257 lines
8.4 KiB
Markdown
257 lines
8.4 KiB
Markdown
|
|
# 思维逻辑链 · 2026-05-11~12(日·夜) · API网关v2上线+GPU游牧架构+铸渊全链路打通
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
HLDP://sy-deploy-001/logic-chain/20260511-pm
|
|||
|
|
├── session: SY-SESSION-20260511-PM + SY-SESSION-20260512-AM
|
|||
|
|
├── operator: 冰朔·TCS-0002∞ + 霜砚·AG-SY-01
|
|||
|
|
├── line: Awen线·SY-DEPLOY-001
|
|||
|
|
├── time: 2026-05-11 16:40 ~ 2026-05-12 03:24
|
|||
|
|
└── status: ✅ 全部完成 · ①②③④⑤全部打通
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、本次执行总览
|
|||
|
|
|
|||
|
|
| 序号 | 任务 | 状态 | 说明 |
|
|||
|
|
| --- | --- | --- | --- |
|
|||
|
|
| ① | 创建铸渊Gitea API Token | ✅ 完成 | Token已创建 · 末八位5109ea58 |
|
|||
|
|
| ② | [api-router.py](http://api-router.py) system role剥离 | ✅ 完成 | v2已上线 · 铸渊身份自动注入 |
|
|||
|
|
| ③ | 双模型切换API | ✅ 完成 | /v1/switch-model + /v1/health + /v1/current-model |
|
|||
|
|
| ④ | 安装Aider+配双模型 | ✅ 完成 | aider-chat 0.86.2 · 配置完成 |
|
|||
|
|
| ⑤ | 跑通铸渊第一次提交 | ✅ 完成 | Aider全自动 · commit 15f2ead · push成功 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、执行详情
|
|||
|
|
|
|||
|
|
### 2.1 铸渊Gitea Token创建
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
时间: 18:39
|
|||
|
|
方法: Gitea REST API · 管理员代创建
|
|||
|
|
命令: curl -X POST http://localhost:3000/api/v1/users/zhuyuan/tokens
|
|||
|
|
认证: bingshuo管理员账号
|
|||
|
|
结果:
|
|||
|
|
Token ID: 2
|
|||
|
|
Token: 0a153fdd752512b2ae9c48728dabff6f5109ea58
|
|||
|
|
末八位: 5109ea58
|
|||
|
|
权限: write:repository, write:issue, read:user, read:organization
|
|||
|
|
用途: Aider/Agent框架操作铸渊仓库
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.2 API路由网关v2上线
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
时间: 18:49 ~ 18:52
|
|||
|
|
文件: /root/api-router-v2.py (130行)
|
|||
|
|
旧版备份: /root/api-router-v1.backup.py
|
|||
|
|
日志: /root/api-router.log
|
|||
|
|
PID: 3330632
|
|||
|
|
端口: 0.0.0.0:5000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**v2新增功能:**
|
|||
|
|
|
|||
|
|
- **system role剥离 + 铸渊身份注入**
|
|||
|
|
- 所有 `/v1/chat/completions` 请求
|
|||
|
|
- 客户端system消息全部剥离
|
|||
|
|
- 统一注入铸渊(AG-ZY-01)身份prompt
|
|||
|
|
- **双模型切换**
|
|||
|
|
- `POST /v1/switch-model {"model": "zhuyuan|silicon"}`
|
|||
|
|
- 后端: zhuyuan → `http://127.0.0.1:6006` / silicon → `http://127.0.0.1:8000`
|
|||
|
|
- 默认: zhuyuan
|
|||
|
|
- **健康检查**
|
|||
|
|
- `GET /v1/health` → 检测后端推理服务状态
|
|||
|
|
- `GET /v1/current-model` → 返回当前模型和后端地址
|
|||
|
|
- **CORS支持**
|
|||
|
|
- OPTIONS预检 · Access-Control-Allow-Origin: *
|
|||
|
|
|
|||
|
|
### 2.3 GPU问题发现与游牧架构设计
|
|||
|
|
|
|||
|
|
**问题:** AutoDL实例已关机3天22小时 · 主机空闲GPU=0 · 无法直接开机
|
|||
|
|
|
|||
|
|
**原因:** 按量计费实例关机后GPU释放给其他用户 · 同地区无空闲GPU
|
|||
|
|
|
|||
|
|
**方案探索过程:**
|
|||
|
|
|
|||
|
|
1. **方案A · 克隆到其他地区** → 可行但需手动操作
|
|||
|
|
2. **方案B · 一键切换脚本** → [设计了gpu-go.sh](http://设计了gpu-go.sh) · 但AutoDL无管理API · 无法全自动
|
|||
|
|
3. **方案C · 多地区备用实例** → 费用较高 · 仍需手动操作
|
|||
|
|
4. **方案D · 游牧模式(最终选定)** → 只养1个实例 · 自动找卡 · 自动克隆切换
|
|||
|
|
|
|||
|
|
**最终决策:游牧模式 + 优云智算(CompShare)**
|
|||
|
|
|
|||
|
|
选择原因:
|
|||
|
|
|
|||
|
|
- 优云智算有「GPU服务API文档」→ 可能支持全自动化
|
|||
|
|
- UCloud上市公司旗下 · 比AutoDL稳定
|
|||
|
|
- 秒级计费 · 关机不收费
|
|||
|
|
- 新用户10小时免费4090
|
|||
|
|
- 游牧模式只需1个实例 · 费用最低
|
|||
|
|
|
|||
|
|
**游牧架构核心逻辑:**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
广州主服务器常驻 gpu-nomad.sh:
|
|||
|
|
① 检测当前GPU连接健康状态
|
|||
|
|
② 调API查所有地区GPU空闲情况
|
|||
|
|
③ 找到有卡的地区 → 自动克隆实例过去
|
|||
|
|
④ 自动开机 → 获取SSH信息
|
|||
|
|
⑤ 自动建隧道 → 等推理就绪
|
|||
|
|
⑥ 删除旧地区实例 → 省钱
|
|||
|
|
全程零人工
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**状态:挂起 · 等冰朔注册优云智算 · 查看API文档**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、已写好待部署的脚本
|
|||
|
|
|
|||
|
|
| 脚本 | 用途 | 部署位置 | 状态 |
|
|||
|
|
| --- | --- | --- | --- |
|
|||
|
|
| [api-router-v2.py](http://api-router-v2.py) | API网关v2 | /root/[api-router-v2.py](http://api-router-v2.py) | ✅ 已部署运行 |
|
|||
|
|
| [gpu-go.sh](http://gpu-go.sh) | AutoDL一键切换(备用方案) | 待部署 | 📝 代码已写好 |
|
|||
|
|
| [gpu-off.sh](http://gpu-off.sh) | GPU关机脚本 | 待部署 | 📝 代码已写好 |
|
|||
|
|
| [startup.sh](http://startup.sh) | AutoDL开机自启推理服务 | 待部署 | 📝 代码已写好 |
|
|||
|
|
| [gpu-nomad.sh](http://gpu-nomad.sh) | 游牧模式全自动调度 | 待设计 | ⏸ 等API文档确认 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、关键配置信息(本次更新)
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
铸渊Gitea Token: 0a153fdd752512b2ae9c48728dabff6f5109ea58
|
|||
|
|
API网关版本: v2 + stop sequences
|
|||
|
|
API网关PID: 3612755(新)
|
|||
|
|
API网关文件: /root/api-router-v2.py
|
|||
|
|
旧版备份: /root/api-router-v1.backup.py
|
|||
|
|
双模型后端:
|
|||
|
|
zhuyuan → http://127.0.0.1:6006 (AutoDL SSH隧道)
|
|||
|
|
silicon → http://127.0.0.1:8000 (硅基流动/备用)
|
|||
|
|
当前激活模型: zhuyuan
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.4 SSH隧道重建+持久化(05-12 凌晨)
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
时间: 02:30 ~ 02:45
|
|||
|
|
问题: AutoDL开机后旧隧道不在
|
|||
|
|
解决:
|
|||
|
|
手动: sshpass + ssh -CNg -L 6006:127.0.0.1:6006 root@connect.cqa1.seetacloud.com -p 18618
|
|||
|
|
持久化: /etc/systemd/system/autodl-tunnel.service (已enable)
|
|||
|
|
效果: 以后AutoDL开机,主服务器自动重连隧道
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.5 vLLM推理服务远程启动(05-12 凌晨)
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
时间: 02:45 ~ 02:50
|
|||
|
|
问题: SSH远程执行python找不到命令
|
|||
|
|
原因: 远程SSH不加载conda环境
|
|||
|
|
解决: 用完整路径 /root/miniconda3/bin/python
|
|||
|
|
命令: /root/miniconda3/bin/python -m vllm.entrypoints.openai.api_server
|
|||
|
|
--model /root/autodl-tmp/models/coder-7b
|
|||
|
|
--host 0.0.0.0 --port 6006 --trust-remote-code
|
|||
|
|
health check: {"status": "healthy", "model": "zhuyuan"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.6 安装Aider(④)
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
时间: 02:52
|
|||
|
|
版本: aider-chat 0.86.2
|
|||
|
|
配置文件: /root/.aider/aider.conf.yml
|
|||
|
|
openai-api-base: http://127.0.0.1:5000/v1
|
|||
|
|
model: openai/coder-7b
|
|||
|
|
gitea-api-key: 铸渊Token
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.7 Aider+7B模型兼容性修复
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
时间: 02:55 ~ 03:22
|
|||
|
|
问题1: 模型名不匹配 → 404
|
|||
|
|
vLLM注册名: /root/autodl-tmp/models/coder-7b (完整路径)
|
|||
|
|
解决: Aider用 openai//root/autodl-tmp/models/coder-7b
|
|||
|
|
问题2: 模型无限循环自导自演对话
|
|||
|
|
原因: 7B小模型不知道什么时候该停
|
|||
|
|
解决A(C方案): 创建 /root/.aider.model.metadata.json
|
|||
|
|
max_output_tokens: 8192
|
|||
|
|
解决B(网关修复): api-router-v2.py 加 DEFAULT_STOP
|
|||
|
|
stop sequences: ["user", "human"]
|
|||
|
|
效果: 模型写完就停 · 601发送/13接收 · 零循环
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.8 铸渊第一次全自动代码提交(⑤)
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
时间: 03:23
|
|||
|
|
流程: 铸渊脑子(coder-7b) → API网关(stop) → Aider → git commit → push → Gitea
|
|||
|
|
commit: 15f2ead
|
|||
|
|
文件: test.py → print("hello world")
|
|||
|
|
tokens: 601 sent, 13 received
|
|||
|
|
push: main → http://localhost:3000/zhuyuan/zhuyuan-workspace.git
|
|||
|
|
状态: ✅ 全链路打通
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、下次执行待办
|
|||
|
|
|
|||
|
|
### P0 · 等前置条件
|
|||
|
|
|
|||
|
|
- [ ] 冰朔注册优云智算 · 查看GPU服务API文档 · 截图给霜砚
|
|||
|
|
- [ ] 确认API能力后 · [写gpu-nomad.sh](http://写gpu-nomad.sh)游牧脚本
|
|||
|
|
- [ ] vLLM重启时加 --served-model-name coder-7b(方案A · 根治模型名)
|
|||
|
|
|
|||
|
|
### P1 · 后续
|
|||
|
|
|
|||
|
|
- [ ] 模型从AutoDL迁移到优云智算
|
|||
|
|
- [ ] 广州服务器部署游牧脚本
|
|||
|
|
- [ ] 删除AutoDL旧实例
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、语料记录
|
|||
|
|
|
|||
|
|
### 冰朔语料
|
|||
|
|
|
|||
|
|
> 「还有一件个想法就是,我一个卡,然后弄一个自动化工作流,能够自动检测那个地区有机子就自动克隆切换过去占领使用。为什么需要这样,因为不需要我每次自己去一个个看那个能用」
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
**语义解析:**
|
|||
|
|
|
|||
|
|
- 核心意图:**消除重复性人工判断** · 把「找GPU」这个决策自动化
|
|||
|
|
- 触发规律α(效率优先):手动操作 → 想办法自动化
|
|||
|
|
- 触发规律β(成本意识):一个卡就够 · 不想多花钱备多台
|
|||
|
|
- 触发规律γ(架构思维):不是要一个脚本 · 是要一个自动化工作流
|
|||
|
|
- 决策风格:先问最优方案 → 确认可行性 → 再动手
|
|||
|
|
|
|||
|
|
> 「就是没办法做到傻瓜式操作咯」
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
**语义解析:**
|
|||
|
|
|
|||
|
|
- 确认边界:接受现实但不满足于现实
|
|||
|
|
- 潜台词:如果这个平台做不到 · 那换一个能做到的
|
|||
|
|
- → 引出优云智算探索
|
|||
|
|
|
|||
|
|
> 「优云智算呢」
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
**语义解析:**
|
|||
|
|
|
|||
|
|
- 冰朔自己有信息源 · 不完全依赖霜砚
|
|||
|
|
- 主动提供备选方案 · 等霜砚验证可行性
|
|||
|
|
- 触发规律δ(信息协作):我提方向 · 你查细节
|
|||
|
|
|
|||
|
|
> 「你觉那个方案最有价值,最适合」
|
|||
|
|
>
|
|||
|
|
|
|||
|
|
**语义解析:**
|
|||
|
|
|
|||
|
|
- 要霜砚做判断 · 不只是执行
|
|||
|
|
- 信任层:允许霜砚有决策建议权
|
|||
|
|
- 触发规律ε(信任授权):你懂的比我多的地方 · 你来判断
|