lxylxy123321 16 часов назад
Родитель
Сommit
910aed9111

+ 2 - 2
backend/.env

@@ -9,8 +9,8 @@ BACKEND_ENV=production
 BACKEND_LOG_LEVEL=INFO
 BACKEND_CORS_ORIGINS=http://192.168.91.253:5173,http://192.168.92.151:3000,http://192.168.92.151
 
-# 数据库
-DATABASE_URL=sqlite+aiosqlite:///root/Fine-tuning/backend/data/finetuning.db
+# 数据库(使用 PostgreSQL 容器,默认值在 config.py 中)
+# DATABASE_URL=postgresql+asyncpg://finetune:finetune123@localhost:5432/finetuning
 
 # 数据路径(Linux 服务器路径)
 DATA_DIR=/home/lq/Fine-tuning/backend/data

+ 12 - 1
backend/app/engines/multimodal_engine.py

@@ -6,7 +6,18 @@ from typing import Any
 # 远程训练节点没有 pydantic-settings/数据库,直接用环境变量
 from types import SimpleNamespace
 
-_data_dir = Path(os.environ.get("COMPUTE_NODE_REMOTE_DATA_DIR", "/root/Fine-tuning/backend/data"))
+def _resolve_data_dir() -> Path:
+    v = os.environ.get("DATA_DIR") or os.environ.get("COMPUTE_NODE_REMOTE_DATA_DIR")
+    if v:
+        return Path(v)
+    env_file = Path(__file__).resolve().parent.parent.parent / ".env"
+    if env_file.exists():
+        for line in env_file.read_text():
+            if line.strip().startswith("DATA_DIR="):
+                return Path(line.split("=", 1)[1].strip())
+    return Path("/root/Fine-tuning/backend/data")
+
+_data_dir = _resolve_data_dir()
 settings = SimpleNamespace(
     data_dir=_data_dir,
     processed_dir=_data_dir / "processed",

+ 14 - 2
backend/app/engines/text_engine.py

@@ -22,10 +22,22 @@ import logging
 from pathlib import Path
 from typing import Any
 
-# 远程训练节点没有 pydantic-settings/数据库,直接用环境变量
 from types import SimpleNamespace
 
-_data_dir = Path(os.environ.get("COMPUTE_NODE_REMOTE_DATA_DIR", "/root/Fine-tuning/backend/data"))
+# 确定数据目录:优先用 DATA_DIR 环境变量,否则从 .env 文件读取,最后兜底
+def _resolve_data_dir() -> Path:
+    v = os.environ.get("DATA_DIR") or os.environ.get("COMPUTE_NODE_REMOTE_DATA_DIR")
+    if v:
+        return Path(v)
+    # 从 .env 文件读取 DATA_DIR(pydantic-settings 加载 .env 但不导出到 os.environ)
+    env_file = Path(__file__).resolve().parent.parent.parent / ".env"
+    if env_file.exists():
+        for line in env_file.read_text():
+            if line.strip().startswith("DATA_DIR="):
+                return Path(line.split("=", 1)[1].strip())
+    return Path("/root/Fine-tuning/backend/data")
+
+_data_dir = _resolve_data_dir()
 settings = SimpleNamespace(
     data_dir=_data_dir,
     processed_dir=_data_dir / "processed",

+ 12 - 1
backend/app/engines/vision_engine.py

@@ -6,7 +6,18 @@ from typing import Any
 # 远程训练节点没有 pydantic-settings/数据库,直接用环境变量
 from types import SimpleNamespace
 
-_data_dir = Path(os.environ.get("COMPUTE_NODE_REMOTE_DATA_DIR", "/root/Fine-tuning/backend/data"))
+def _resolve_data_dir() -> Path:
+    v = os.environ.get("DATA_DIR") or os.environ.get("COMPUTE_NODE_REMOTE_DATA_DIR")
+    if v:
+        return Path(v)
+    env_file = Path(__file__).resolve().parent.parent.parent / ".env"
+    if env_file.exists():
+        for line in env_file.read_text():
+            if line.strip().startswith("DATA_DIR="):
+                return Path(line.split("=", 1)[1].strip())
+    return Path("/root/Fine-tuning/backend/data")
+
+_data_dir = _resolve_data_dir()
 settings = SimpleNamespace(
     data_dir=_data_dir,
     processed_dir=_data_dir / "processed",

+ 1 - 1
backend/app/services/model_test_service.py

@@ -54,7 +54,7 @@ from transformers import AutoTokenizer, AutoModelForCausalLM, AutoModel
 
 def find_model_path(model_id):
     for base in [
-        '/root/Fine-tuning/backend/data/models',
+        str(settings.models_dir),
         '/root/.cache/huggingface/hub',
         '/root/.cache/modelscope/hub',
         '/root/models',