后端 (platform.py + platform_store.py): - 新增 _build_messages_payload() 转换前端格式为 OpenAI messages - 新增 _stream_chat_proxy() SSE 流式代理到算力节点 - 新增 _unload_from_compute_node() 真正释放算力节点 GPU 显存 - 重写 model_compare_load: 从假 PID/端口改为真正调用算力节点加载模型 - 修复 model_compare_unload: 调用 _unload_from_compute_node 释放 GPU - 修复 model_compare_delete: 先释放 GPU 再删除记录 - 修复 model_compare_stream_chat: 从 mock 改为 StreamingResponse 代理 - 修复 model_chat_local/stream: 消息格式转换 + 路径修正 - PlatformStore 新增 _inference_nodes 追踪,gpus() 同步推理占用状态 - preload/unload 端点标记/清除推理节点占用 算力节点 (compute): - inference.py: 适配新版 LLaMA-Factory API (get_infer_args 4 返回值、ChatModel args dict、stream_chat 新签名) - inference.py: unload() 增加 gc.collect + torch.cuda.empty_cache + synchronize 彻底释放显存 - main.py: inference/load 移除 HTTPException(500),错误以 200 正常返回 前端: - InferenceChatView: 真实模式下走 SSE 流式推理,mock 模式保留兼容 - InferenceCreateView: 调用 preloadLocalModel + createCompare 真实创建推理任务,失败回退 mock - InferenceListView: 「停止」改为「释放」,删除前先释放算力节点,改进错误提示 - compare.ts: 新增 streamChatReal() fetch SSE,preload 超时提升至 5 分钟 - useStreamChat.ts: send() 支持 useMock 参数,真实模式调用 streamChatReal - GPU 选择过滤: 仅显示在线算力节点上的空闲 GPU Co-Authored-By: Claude <noreply@anthropic.com>
Compute Platform
算力平台与应用平台分开部署,本目录用于后续实现单机多 GPU 调度、文件网关和训练引擎适配。
目录结构
compute/
api/ # 只允许应用平台访问的内部 Compute API
agent/ # 单机 Agent,负责 GPU、进程、工作区管理
engines/
llama_factory/ # LLaMA-Factory 训练引擎适配器
file_gateway/ # 本地磁盘上传、下载、预览、离线导入
tests/
开发职责
- GPU 发现、状态上报、锁定和释放。
- 本地磁盘工作区管理。
- 创建、停止、查询训练/评测/推理/合并任务。
- LLaMA-Factory 命令生成、日志解析、产物收集。
- 分片上传、短时下载、离线导入。
- 通过服务间 token 接受应用平台调用。
运行模式
- 默认
COMPUTE_EXECUTION_MODE=real,Compute API 会通过compute.agent.process_manager.ProcessManager启动真实llamafactory-cli train子进程,并将日志写入TRAINING_LOG_ROOT。 - 真实模式下 GPU 发现优先使用宿主机
nvidia-smi。如果部署环境暂时无法调用nvidia-smi,可通过COMPUTE_GPU_COUNT、COMPUTE_GPU_NAME、COMPUTE_GPU_MEMORY_GB、COMPUTE_GPU_POWER_LIMIT_W声明兼容 GPU 清单,便于应用侧先完成节点登记和联调。 - 仅隔离联调时可设置
COMPUTE_EXECUTION_MODE=simulator,启用内存状态机和合成 GPU/日志数据。该模式不得作为生产运行路径。 - 服务间鉴权默认开启:设置
COMPUTE_AUTH_ENABLED=true和一致的COMPUTE_SERVICE_TOKEN,应用侧会通过X-Compute-Token调用 Compute API。 - 真实训练作业会登记到
TRAINING_LOG_ROOT/compute-jobs.json。Compute API 重启后会恢复作业索引,继续提供状态、停止和日志查询。 - 同一算力节点内按 GPU ID 做轻量锁定;已有运行中作业占用的 GPU 不允许再次提交,避免同机多 GPU 场景下误复用。
真实执行前提:
- 镜像或宿主机环境中
llamafactory-cli可执行。 LLAMA_FACTORY_HOME指向 LLaMA-Factory 工作目录。- 基座模型路径和数据集名称/目录已经在算力服务器本地可访问。
- 应用侧训练任务中的 GPU、模型、数据集配置能映射到当前节点本地路径。
应用侧接入
应用平台通过“算力节点”页面维护每台 GPU 服务器的 Compute API 和 File Gateway 地址。点击连接测试时,Backend API 会主动调用:
GET /modelTF/v1/compute/health
GET /modelTF/compute/resources/gpus
连接成功后,应用侧会同步节点健康信息、能力标签和 GPU 清单到 PostgreSQL。多节点阶段仍按“每台算力服务器 = 单机多 GPU 节点”管理,每台服务器都部署 Compute API、Agent、File Gateway 契约和 LLaMA-Factory。
训练闭环:
Frontend 创建/启动训练
-> Backend API 选择 compute_nodes 节点
-> Backend API POST /modelTF/compute/jobs 到目标 Compute API
-> Compute API 启动 llamafactory-cli 子进程
-> Backend Worker 定时 GET /modelTF/compute/jobs/{id}
-> Backend API 同步 fine_tune_tasks 状态、进度、PID、日志路径和产物索引
当前接口能力
日志接口:
GET /modelTF/compute/jobs/{job_id}/logs?tail_lines=200
GET /modelTF/compute/jobs/{job_id}/logs?offset=0&limit=500
返回 content、metrics、total_lines、offset、limit、has_more、next_offset,用于前端增量刷新和日志平台采集。
文件导入:
POST /modelTF/compute/files/import-local
该接口用于应用侧调度前把算力服务器本地可访问的模型/数据集路径导入到 YG_FT_DATA_ROOT 内部。目标路径会校验不能逃逸出 YG_FT_DATA_ROOT,源路径必须已存在于算力服务器本地或挂载目录。