From 56a5a181393f961aabc9af8938878d0ceba12429 Mon Sep 17 00:00:00 2001 From: bingshuo <565183519@qq.com> Date: Mon, 18 May 2026 16:02:17 +0800 Subject: [PATCH] =?UTF-8?q?D101:=20=E6=AF=8D=E6=A8=A1=E5=9E=8B=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E6=96=B9=E6=A1=88=20v2=20=E2=80=94=20CPU+GPU=E5=88=86?= =?UTF-8?q?=E7=A6=BB=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/mother-model-deploy-sg-v2.md | 186 ++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 docs/mother-model-deploy-sg-v2.md diff --git a/docs/mother-model-deploy-sg-v2.md b/docs/mother-model-deploy-sg-v2.md new file mode 100644 index 0000000..3b48804 --- /dev/null +++ b/docs/mother-model-deploy-sg-v2.md @@ -0,0 +1,186 @@ +# 母模型纯推理部署方案 v2 +# Mother Model Deploy · SG Split Architecture · 2026-05-18 + +## 架构 + +``` +冰朔 + │ HTTPS + ▼ +新加坡CPU服务器(43.156.237.110 BS-SG-001) + ├── 你的域名 → 入口服务 + ├── 接收请求 → 转发到GPU + ├── 返回结果给冰朔 + └── 聊天记录存系统盘 /data/logs/chat/ + │ + │ 内网/公网转发 + ▼ +GPU服务器(租的RTX 3090 24G,按量付费) + ├── 只装vLLM + 母模型 + ├── 收到推理请求 → 跑 → 返回 + ├── 不存日志 + ├── 不存聊天记录 + └── 跑完即关,数据不落地 +``` + +## 组件清单 + +### GPU服务器(租的) + +| 项目 | 内容 | +|------|------| +| 硬件 | RTX 3090 24G · 按量付费 | +| 系统盘 | 100GB起步 | +| 模型 | Qwen2.5-7B SFT (FP16, ~14GB) | +| 框架 | vLLM (OpenAI兼容API) | +| 存什么 | 模型权重文件 · 推理框架 · 其他全不存 | +| 访问 | SSH(部署时用)+ API端口(运行时用) | + +### 新加坡CPU服务器(你的服务器) + +| 项目 | 内容 | +|------|------| +| 推荐 | BS-SG-001 (43.156.237.110 · 4C8G·180G) | +| 入口 | 你的域名 → nginx → 转发服务 | +| 转发 | 收到请求 → POST到GPU的API端口 → 等返回 | +| 日志 | 聊天记录写入 /data/logs/chat/ | + +## 部署步骤 + +### 第一步:GPU服务器部署 + +```bash +# 1. 装vLLM +pip install vllm + +# 2. 从COS拉模型 +mkdir -p /data/models +export ZY_OSS_KEY= +export ZY_OSS_SECRET= + +python3 -c " +from qcloud_cos import CosConfig, CosS3Client +import os + +c = CosS3Client(CosConfig( + Region='ap-guangzhou', + SecretId=os.environ['ZY_OSS_KEY'], + SecretKey=os.environ['ZY_OSS_SECRET'] +)) + +base = 'models/qwen25-7b-sft/final' +bucket = 'sy-finetune-corpus-1317346199' +local = '/data/models/qwen25-7b-sft' +os.makedirs(local, exist_ok=True) + +resp = c.list_objects(Bucket=bucket, Prefix=base + '/') +for obj in resp.get('Contents', []): + key = obj['Key'] + rel = os.path.relpath(key, base) + dest = os.path.join(local, rel) + os.makedirs(os.path.dirname(dest), exist_ok=True) + c.download_file(Bucket=bucket, Key=key, DestFilePath=dest) + print(f'下载: {rel}') +print('模型下载完成') +" + +# 3. 启动推理服务 +nohup python3 -m vllm.entrypoints.openai.api_server \ + --model /data/models/qwen25-7b-sft \ + --port 8000 \ + --host 0.0.0.0 \ + --max-model-len 8192 \ + --gpu-memory-utilization 0.9 \ + --trust-remote-code \ + > /data/vllm.log 2>&1 & +``` + +### 第二步:新加坡CPU服务器配置 + +```bash +# 1. 创建日志目录 +mkdir -p /data/logs/chat + +# 2. 部署转发服务(Node.js简单代理) +cat > /opt/proxy/inference-proxy.js << 'EOF' +const http = require('http'); +const fs = require('fs'); + +const GPU_HOST = 'GPU_SERVER_IP' // 替换为GPU服务器IP +const GPU_PORT = 8000 + +// 接收请求 → 转发到GPU → 存日志 → 返回 +const server = http.createServer((req, res) => { + if (req.method === 'POST') { + let body = ''; + req.on('data', chunk => body += chunk); + req.on('end', () => { + // 转发到GPU + const options = { + hostname: GPU_HOST, + port: GPU_PORT, + path: '/v1/chat/completions', + method: 'POST', + headers: { 'Content-Type': 'application/json' } + }; + const gpuReq = http.request(options, gpuRes => { + let data = ''; + gpuRes.on('data', chunk => data += chunk); + gpuRes.on('end', () => { + // 存聊天记录 + const logEntry = { + time: new Date().toISOString(), + request: JSON.parse(body), + response: JSON.parse(data) + }; + const logFile = `/data/logs/chat/${new Date().toISOString().slice(0,10)}.jsonl`; + fs.appendFileSync(logFile, JSON.stringify(logEntry) + '\n'); + + // 返回给用户 + res.writeHead(gpuRes.statusCode, { 'Content-Type': 'application/json' }); + res.end(data); + }); + }); + gpuReq.write(body); + gpuReq.end(); + }); + } else { + res.writeHead(405).end(); + } +}); + +server.listen(8080, () => { + console.log('推理代理运行在 :8080'); +}); +EOF + +# 3. 用PM2托管 +pm2 start /opt/proxy/inference-proxy.js --name inference-proxy +``` + +### 第三步:域名配置 + +你的新加坡域名 → nginx → 转发到 :8080(推理代理) + +## 数据流 + +``` +冰朔 → 新加坡域名 → nginx → inference-proxy(:8080) + → 记录请求到日志文件 + → 转发到GPU(:8000) + → GPU推理 → 返回 + → 记录响应到日志文件 + → 返回给冰朔 +``` + +## 清理(用完关GPU服务器时) + +```bash +# GPU上:停止服务 +pkill -f vllm + +# 可以删模型释放磁盘(可选) +rm -rf /data/models/qwen25-7b-sft +``` + +日志全在你的新加坡CPU服务器上,GPU服务器上什么数据都没留下。 \ No newline at end of file