为什么是这套组合?
作为 AI 开发者,你大概率遇到过这些痛点:
痛点 | 传统方案 | 本文方案 |
本地没有 GPU | 买一张 4090(约 ¥12,000–¥16,000,随行情波动) | 共绩算力按秒计费按需租用 |
环境配置地狱 | 花半天装 CUDA/cuDNN/PyTorch | 云主机预装深度学习镜像,开机即用 |
终端来回切换 | SSH + 本地 IDE 分离 | Cursor/Claude Code SSH 直连,编辑器即云端 |
记不住 HF CLI 命令 | 查文档、复制粘贴 | HF Skills 让 AI 助手帮你执行 |
模型训练流程复杂 | 手写训练脚本 + 调参 | Skills 模板 + 自然语言指令 |
这套组合的核心理念:让开发者的注意力回到模型和业务本身,环境、算力、工具链全部自动化。
先选对 GPU:4090 / 5090 / L40S / A800 / H20…怎么选?
共绩算力不只有 4090。面对“大模型任务”(更大参数、更长上下文、更多并发、训练/微调),显存容量往往比“算力峰值”更关键:显存决定你能不能把模型(含 KV Cache、LoRA 权重、优化器状态等)稳稳放进去。
下面这张表直接摘取自共绩算力公开定价(按秒计费,随时开关机)作为选型参考(以云主机为例):共绩算力定价页 (https://www.gongjiyun.com/pricing)%E3%80%82)。%E3%80%82)
机型 | 显存 | 价格(元/时) | 更适合什么任务 |
4090 × 1 | 24G | 1.68 | 4-bit 推理、轻量 LoRA、Gradio Demo、开发调试 |
5090 × 1 | 32G | 2.5 | 32G 显存更从容:更长上下文/更大 batch 的推理 |
L20 × 1 | 48G | 3.59 | 更大显存的推理/微调,性价比路线 |
L40 × 1 | 48G | 3.15 | 48G 推理更稳,吞吐与显存平衡 |
L40S × 1 | 48G | 4.49 | 更强推理吞吐 + 48G 显存(偏推理/服务) |
A800 × 1 | 80G | 5.99 | 大模型推理、长上下文、LoRA/QLoRA 更稳(显存是王道) |
H20 × 1 | 96G | 6.88 | 超大显存单卡:大模型推理、长上下文、并发更舒服 |
H800 × 1 | 80G | 16.88 | 对极致训练/推理性能有需求的重任务 |
910B × 1 | 64G | 3.69 | 特定生态/国产算力场景(看框架兼容性) |
一页决策(给赶时间的人):
- 只想把 Qwen3.5 跑起来(推理 + Demo):优先 4090×1,不够再上 5090×1 或 L40S×1。
- 你在追求“稳定不炸显存 + 更长上下文/更大并发”:直接上 L40S×1(48G)或 H20×1(96G)。
- 你要跑更大的 Qwen3.5(例如 122B/397B)或更激进的训练/微调:优先考虑 A800×1(80G)/H20×1(96G),或多卡(比如 4090×2/×4/×8)。
备注:本文以 Qwen3.5-35B-A3B 为例(单卡 4090 量化后可跑)。如果你要把上下文开到很大、并发开很多、或跑更大模型,A800/H20 会更省心。
2.1 一分钟理解显存:权重、KV Cache、并发三件套
大模型推理/服务是否“跑得稳”,通常取决于你有没有把 三块显存账单同时算清:
- 权重(Weights):模型参数本体。量化(4-bit / 8-bit / FP8)主要就是在这里省显存。
- KV Cache:注意力缓存,跟上下文长度与并发数(同时在跑的会话数)强相关。长上下文/高并发最容易把 KV Cache 撑爆。
- 额外开销:框架开销、分词器缓存、激活、以及一些运行时 buffer。
一个非常实用的经验:
- 权重不爆 ≠ 一定跑得起来:你可能能加载模型,但一开长上下文/一开并发,KV Cache 立刻 OOM。
- 把上下文从 128K 降到 32K,往往比“换更大 GPU”更快见效(尤其单卡)。
2.2 Qwen3.5 选型到机型:从 35B 到 397B 怎么落到硬件
把“模型尺寸”映射到“机器选择”,可以按下面的优先级做决策:
-
先确定目标:推理/服务 还是 微调/训练?
- 推理/服务:更看重 显存 + 吞吐(并发、上下文、批处理)
- 微调:更看重 显存 + 稳定性(梯度、优化器、checkpoint)
-
再确定上下文与并发目标
- 单用户体验:并发低,但可能追求长上下文
- API 服务:并发高,通常需要控制上下文、做队列与限流
一个更贴近实战的落地建议(不追求“理论最优”,追求“少踩坑”):
-
Qwen3.5-35B-A3B(本文主角)
- 单卡入门:4090×1(24G)跑 4-bit 推理 + 控制上下文(例如 8K–32K)
- 更稳的服务:L40S×1(48G)或 H20×1(96G),在长上下文与并发上余量更大
-
Qwen3.5-122B-A10B / Qwen3.5-397B-A17B(更大模型)
- 这类模型通常天然倾向多卡(尤其想要“服务级”吞吐与长上下文时)
- 单卡 A800/H20 可能能做“研究/尝试”(强依赖量化、上下文/并发收敛),但要做稳定服务,通常需要多卡或更激进的工程化(例如分片、限流、缓存策略)
关于 MoE 的一个常见误区:推理时只激活部分专家,不代表显存只需要“激活参数”那点。多数框架仍然需要把大量权重常驻在 GPU/内存中;想把“大 MoE”跑得又稳又快,往往还是要靠 更多显存/多卡并行。
认识三个主角
3.1 Qwen3.5:2026 开年最强开源模型
2026 年 2 月 16 日,阿里云通义团队发布 Qwen3.5 系列,这是目前开源社区最具竞争力的多模态大语言模型之一。
核心亮点:
- 统一视觉 - 语言基础:在万亿级多模态 token 上早期融合训练,文本和图像理解一体化
- 高效混合架构:Gated Delta Networks + 稀疏 MoE(Mixture-of-Experts),推理速度快、延迟低
- 可扩展的强化学习:在百万级 Agent 环境上做了 RL 泛化训练
- 201 种语言和方言:全球最广泛的语言覆盖
- Apache 2.0 开源协议:商用无忧
模型矩阵(截至 2026-02-27):
本文主角:Qwen3.5-35B-A3B——35B 总参数、每次推理只激活 3B,性价比之王,单张 4090 量化后可跑。
关于 MoE 的通俗理解:想象一个有 35 个”专家”的团队,每次回答问题只派出 3 个最合适的专家。这意味着你获得了 35B 级别的知识储备,但只需要 3B 的计算开销。这就是为什么 Qwen3.5-35B-A3B 能在 4090 上流畅运行。
3.2 共绩算力:按秒计费的多 GPU 云主机(4090/A800/H20…)
共绩算力是一家 2023 年成立于清华的算力平台,获奇绩创坛投资。核心卖点:便宜、灵活、预装好环境。
它覆盖从“开发/推理常用的 4090/5090/L40S”,到“更适合大模型任务的 A800/H20/H800”等多个机型。完整价格与规格请以 定价页 (https://www.gongjiyun.com/pricing) 为准。
关键特性:
- 按秒计费:不用时关机即停止计费,约 ¥0.000467/秒
- 关机保存:环境持久化,下次开机接着用
- 预装镜像:CUDA、PyTorch、Jupyter、Code Server 开箱即用
- SSH 支持:可直接 SSH 连接,兼容 VSCode / Cursor Remote
- 共享存储卷:跨机器的持久存储,数据不丢失
- 个人开发者计划:最高 1500 元免费算力 + 新手 50 元体验券
3.3 Hugging Face Skills:让编程助手会做 AI
huggingface/skills (https://github.com/huggingface/skills) 是 Hugging Face 官方维护的 AI 编程技能集(7000+ Stars),遵循 Agent Skill (https://agentskills.io) 开放标准。
它解决了什么问题?
传统方式下,你需要记住 hf download、hf upload、datasets.load_dataset() 等各种命令和 API。有了 Skills,你只需要对 Cursor 说自然语言:
传统方式 | Skills 方式 |
hf download Qwen/Qwen3.5-35B-A3B --local-dir ./model | "帮我下载 Qwen3.5-35B-A3B 到本地" |
手写 TRL 训练脚本 + 配置参数 | "用 SFT 微调 Qwen3.5,数据集用 xxx" |
gradio 代码从零写起 | "创建一个对话 Demo 展示微调后的模型" |
查文档找模型评测方法 | "评测一下模型在 MMLU 上的表现" |
可用的 9 个 Skills:
技能 | 说明 | 典型场景 |
hugging-face-cli | HF Hub 操作:下载/上传/管理仓库 | 模型下载、数据集管理 |
hugging-face-datasets | 数据集创建和管理 | 训练数据准备 |
hugging-face-model-trainer | TRL 模型训练(SFT/DPO/GRPO) | LoRA 微调、全量微调 |
hugging-face-jobs | 云端 Job 运行 | 批量推理、数据处理 |
hugging-face-evaluation | 模型评测 | Benchmark 评分 |
hugging-face-trackio | 训练实验追踪和可视化 | 实时监控 Loss 曲线 |
hugging-face-paper-publisher | 研究论文发布 | 发表模型论文 |
hugging-face-tool-builder | 可复用 API 脚本 | 自动化流水线 |
huggingface-gradio | Gradio 应用构建 | Demo / 在线推理 |
Skills 还配套了一个 MCP Server(https://huggingface.co/mcp),可以让 Cursor 直接通过 MCP 协议调用 HF Hub 的搜索、文档查询、Job 提交等能力——不只是”教会”AI 怎么做,而是直接让 AI “动手做”。
架构总览
你的本地 Mac / Windows
├── Cursor IDE
│ ├── HF Skills (AI 技能集)
│ ├── MCP Server (HF Hub API)
│ └── Remote-SSH (远程连接)
│
├── (SSH 端口转发) ──> Hugging Face Hub (模型仓库/数据集/MCP API)
│
└── (SSH 连接) ──> 共绩算力云主机 (RTX 4090 × 1)
├── CUDA 12.x / PyTorch 2.x / HF CLI
└── Qwen3.5-35B-A3B
├── Ollama (推理)
├── vLLM (推理)
├── LoRA 微调 (TRL/Swift)
└── Gradio (Demo)创建共绩算力云主机
注册并登录 共绩算力控制台 (https://console.suanli.cn/server)
点击 创建云主机
配置选择:
配置项 | 推荐选择 | 说明 |
GPU | 4090 / 5090 / L40S / A800 / H20 | 先按任务选显存:推理/轻量微调用 24–48G,大模型/长上下文优先 80–96G |
镜像 | 基础镜像(支持 SSH) | 预装 CUDA + PyTorch |
系统盘 | 默认(100GB+) | 模型文件较大,建议加大 |
共享存储卷 | 建议开通 | 跨机器持久化,防数据丢失 |
创建完成后,记下 SSH 信息:
主机:ssh root@xnc1.550c.cloud -p 35012 密码:your_password_here
💡 省钱提示:新用户可领取 50 元体验券,个人开发者可申请最高 1500 元免费算力。跑完实验记得关机——关机后按秒停止计费,环境保留不丢失。
Cursor SSH 连接云主机
Cursor 基于 VSCode 构建,原生支持 Remote-SSH 扩展。
5.1 前置条件
- macOS / Linux:默认已安装 SSH 客户端
- Windows:需要开启 设置 → 系统 → 可选功能 → OpenSSH 客户端
- Cursor 中需要安装 Remote - SSH 扩展(Cursor 通常内置 anysphere.remote-ssh)
5.2 快速连接
- 按 Cmd+Shift+P(macOS)或 Ctrl+Shift+P(Windows)打开命令面板
- 输入 Remote-SSH: Connect to Host
- 选择 Add New SSH Host
- 输入连接命令: ssh root@xnc1.550c.cloud -p 35012
- 选择配置文件存储位置(默认 ~/.ssh/config)
- 输入密码完成连接
首次连接时 Cursor 会自动在远程安装 Cursor Server,耐心等待即可。连接成功后,Cursor 的文件浏览器、终端、编辑器全部切换到了远程云主机——感觉就像在本地开发一样。
5.3 配置 SSH Config(推荐)
每次输密码很烦?在本地的 ~/.ssh/config 中添加:
Host gongji-4090
HostName xnc1.550c.cloud
Port 35012
User root
# 可选:免密登录
# IdentityFile ~/.ssh/id_rsa之后在 Cursor 里直接选择 gongji-4090 即可连接。
设置免密登录(可选但强烈推荐):
ssh-keygen -t ed25519 -C "[your_email@example.com](mailto:your_email@example.com)"
ssh-copy-id -p 35012 [root@xnc1.550c.cloud](mailto:root@xnc1.550c.cloud)5.4 SSH 隧道:在本地浏览器访问云端服务
后续我们会在云主机上启动 Gradio、Jupyter 等 Web 服务,需要通过 SSH 隧道将远程端口映射到本地:
ssh -L 7860:127.0.0.1:7860 [root@xnc1.550c.cloud](mailto:root@xnc1.550c.cloud) -p 35012
ssh -L 8000:127.0.0.1:8000 [root@xnc1.550c.cloud](mailto:root@xnc1.550c.cloud) -p 35012
ssh -L 7860:127.0.0.1:7860 -L 8000:127.0.0.1:8000 [root@xnc1.550c.cloud](mailto:root@xnc1.550c.cloud) -p 35012映射后,在本地浏览器访问 http://localhost:7860 就能看到云主机上的 Gradio 页面。
下载加速配置:GitHub + Hugging Face(国内网络必备)
在国内网络环境下,拉仓库/下模型经常会遇到超时或速度波动。共绩算力官方文档给了两套“学术用途”的加速方案:
- GitHub 加速:GitHub 加速配置指南 | 共绩算力 (https://www.gongjiyun.com/docs/platform/resource-acceleration/askjwkwl5i5i8fkzkuacbdnfnig/)
- Hugging Face 加速:Hugging Face 加速配置指南 | 共绩算力 (https://www.gongjiyun.com/docs/platform/resource-acceleration/b8t4wbnsdieruakadxsc2mnrn2f/)
重要说明:两者都依赖第三方公益节点,不承诺 100% 可用、不保证带宽与长期稳定。建议把加速地址做成环境变量/脚本配置,便于后续替换。
6.1 GitHub 加速(HTTPS clone / raw / release)
git clone [https://ghfast.top/https://github.com/huggingface/skills](https://ghfast.top/https://github.com/huggingface/skills)
wget [https://ghfast.top/https://raw.githubusercontent.com/huggingface/skills/main/README.md](https://ghfast.top/https://raw.githubusercontent.com/huggingface/skills/main/README.md)注意:
- 不支持 git@github.com:… 这种 SSH 协议克隆
- 私有仓库需要 PAT(token)并用 HTTPS
6.2 Hugging Face 加速(设置镜像站)
export HF_ENDPOINT="[https://hf-mirror.com](https://hf-mirror.com/)"
hf download Qwen/Qwen3.5-35B-A3B --local-dir /root/models/Qwen3.5-35B-A3B
export HF_HUB_DOWNLOAD_TIMEOUT=306.3 大仓库更稳:hfd 多线程下载(可选)
如果模型仓库文件特别多,或网络波动明显,可按文档使用 hfd:
wget -O hfd.sh [https://hf-cdn.sufy.com/hfd/hfd.sh](https://hf-cdn.sufy.com/hfd/hfd.sh)chmod +x hfd.shmv hfd.sh /usr/local/bin/hfdexport HF_ENDPOINT="[https://hf-mirror.com](https://hf-mirror.com/)"hfd Qwen/Qwen3.5-35B-A3B6.4 云主机环境初始化
通过 Cursor 连接到云主机后,在终端中执行以下初始化脚本:
#!/bin/bash
nvidia-smi
pip install --upgrade pip
pip install -U huggingface_hub[cli] # HF CLIpip install -U transformers # Transformerspip install -U datasets # 数据集工具pip install -U accelerate # 加速训练pip install -U bitsandbytes # 量化工具pip install -U peft # LoRA / QLoRApip install -U trl # TRL 训练框架pip install -U gradio # Gradio UIpip install -U vllm # vLLM 推理引擎pip install -U trackio # 训练追踪
hf auth login
hf auth whoami
python -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA: {torch.cuda.is_available()}'); print(f'GPU: {torch.cuda.get_device_name(0)}')"安装 Hugging Face Skills
在 Cursor 中配置 HF Skills 有三种方式,可根据需求选择。
7.1 方式 A:MCP Server 配置(推荐)
MCP(Model Context Protocol)让 Cursor 能直接调用 HF Hub API——搜索文档、查询模型信息、提交训练 Job 等。
在你的项目根目录创建 .mcp.json:
{ "mcpServers": { "huggingface-skills": { "url": "[https://huggingface.co/mcp?login](https://huggingface.co/mcp?login)" } }}配置完成后,Cursor 的 AI 助手可以通过 MCP 直接调用以下能力:
- hf_doc_search(“query”) — 搜索 HF 文档
- hf_doc_fetch(“url”) — 获取指定文档内容
- hf_whoami() — 查看当前登录用户
- hf_jobs() — 提交云端 Job
- hf_space_*() — 管理 HF Spaces
7.2 方式 B:Skills 目录安装
将 Skills 克隆到云主机,然后在项目中引用:
7.3克隆 HF Skills 仓库
cd /rootgit clone [https://github.com/huggingface/skills.git](https://github.com/huggingface/skills.git) hf-skills7.4在你的项目中创建软链接
cd /root/my-projectmkdir -p .cursor/skillsln -s /root/hf-skills/skills/hugging-face-cli .cursor/skills/hugging-face-cliln -s /root/hf-skills/skills/hugging-face-model-trainer .cursor/skills/hugging-face-model-trainerln -s /root/hf-skills/skills/huggingface-gradio .cursor/skills/huggingface-gradio按需链接更多 skills
7.5 方式 C:AGENTS.md 万能回退
如果你的编程代理不支持 Skills 格式(比如某些旧版 IDE),HF Skills 仓库还提供了 agents/AGENTS.md——一个合并了所有技能指令的文档,任何代理都能读取:
cp /root/hf-skills/agents/AGENTS.md /root/my-project/AGENTS.md三种方式可以叠加使用:MCP 提供实时 API 能力,Skills 目录提供详细的操作指南和模板脚本,AGENTS.md 作为兜底。
用 HF CLI 下载 Qwen3.5
8.1 Qwen3.5 模型选型指南
根据你的 4090(24GB 显存)和使用场景选择:
场景 | 推荐模型 | 量化 | 显存占用 | 说明 |
日常推理/对话 | Qwen3.5-35B-A3B | Q4 (4-bit) | ~22GB | MoE 架构,性价比之王 |
轻量推理/嵌入场景 | Qwen3.5-27B | Q4 (4-bit) | ~17GB | Dense 架构,还有显存余量 |
LoRA 微调 | Qwen3.5-27B | Q4 + LoRA | ~20GB | Dense 模型微调更成熟 |
多模态(图 + 文) | Qwen3.5-35B-A3B | Q4 (4-bit) | ~22GB | 原生视觉 - 语言能力 |
生产部署 | Qwen3.5-35B-A3B-FP8 | FP8 | ~36GB | 需要 2×4090 |
8.2 下载模型
方式一:HF CLI 直接下载
hf download Qwen/Qwen3.5-35B-A3B --local-dir /root/models/Qwen3.5-35B-A3B
hf download Qwen/Qwen3.5-35B-A3B --include ".safetensors" ".json" "*.txt" --local-dir /root/models/Qwen3.5-35B-A3B
curl -fsSL [https://ollama.com/install.sh](https://ollama.com/install.sh) | sh
ollama pull qwen3.5:35b
hf download Qwen/Qwen3.5-35B-A3B-GGUF --include "Q4_K_M" --local-dir /root/models/Qwen3.5-35B-A3B-GGUF
pip install modelscopemodelscope download Qwen/Qwen3.5-35B-A3B --local_dir /root/models/Qwen3.5-35B-A3BQwen3.5 推理部署
9.1 方案 A:Ollama 一键部署(最简单)
适合:快速体验、个人使用、原型开发。
ollama run qwen3.5:35b
import requestsresponse = requests.post("[http://localhost:11434/v1/chat/completions](http://localhost:11434/v1/chat/completions)", json={ "model": "qwen3.5:35b", "messages": [ {"role": "system", "content": "你是一个有帮助的 AI 助手。"}, {"role": "user", "content": "解释一下什么是 Mixture of Experts 架构?"} ]})print(response.json()["choices"][0]["message"]["content"])9.2 方案 B:vLLM 生产级部署
适合:高吞吐量推理、多用户并发、API 服务。
vllm serve Qwen/Qwen3.5-35B-A3B --port 8000 --max-model-len 32768 --gpu-memory-utilization 0.90 --quantization awq --reasoning-parser qwen3
from openai import OpenAIclient = OpenAI(base_url="[http://localhost:8000/v1](http://localhost:8000/v1)", api_key="any")response = client.chat.completions.create( model="Qwen/Qwen3.5-35B-A3B", messages=[ {"role": "system", "content": "你是一个专业的 AI 编程助手。"}, {"role": "user", "content": "用 Python 写一个快速排序,要求支持自定义比较函数。"} ], temperature=0.7, max_tokens=2048)print(response.choices[0].message.content)9.3 方案 C:Transformers 原生推理
适合:研究、自定义推理逻辑、需要细粒度控制。
from transformers import AutoModelForCausalLM, AutoTokenizerimport torchmodel_name = "Qwen/Qwen3.5-35B-A3B"tokenizer = AutoTokenizer.from_pretrained(model_name)model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=torch.bfloat16, device_map="auto", load_in_4bit=True, # 4-bit 量化以适应 24GB 显存)messages = [ {"role": "system", "content": "你是 Qwen,由阿里云开发的 AI 助手。"}, {"role": "user", "content": "请用简洁的语言解释 Transformer 中的注意力机制。"}]text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)inputs = tokenizer([text], return_tensors="pt").to(model.device)output = model.generate( **inputs, max_new_tokens=1024, temperature=0.7, top_p=0.9, do_sample=True)generated = tokenizer.decode(output[0][len(inputs.input_ids[0]):], skip_special_tokens=True)print(generated)9.4 大模型上 A800/H20:122B/397B 的部署思路与多卡模板
如果你要把 Qwen3.5 的更大版本(例如 122B-A10B、397B-A17B)用于推理/服务,建议先用下面这个“工程化视角”来规划:先把风险点摊开,再选机器/参数。
三个关键问题:
- 权重能否装下?(模型本体 + 运行时开销)
- KV Cache 能否扛住目标上下文与并发?
- 吞吐是否达标?(否则会出现“跑得起来但很慢”)
9.4.1 在共绩上怎么选:单卡大显存 vs 多卡并行
-
单卡大显存(A800 80G / H20 96G)
- 优点:部署简单、调参少、长上下文更有余量
- 风险:遇到更大权重时,仍可能需要量化/压缩;并发过高仍会被 KV Cache 限制
-
多卡并行(例如 4090×2/×4/×8)
- 优点:总显存更大、吞吐更强,适合服务化
- 风险:需要正确配置 tensor parallel,以及更关注网络/拓扑与 batch 策略
共绩算力的多卡 4090 机型在定价页有明确规格与价格,可作为多卡部署的直接选择:共绩算力定价页 (https://www.gongjiyun.com/pricing)。%E3%80%82)
9.4.2 vLLM 多卡部署模板(OpenAI 兼容 API)
下面给出一个“多卡通用模板”。核心是让 —tensor-parallel-size 等于 GPU 数:
例:4 卡机(把 tp 设为 4)
vllm serve Qwen/Qwen3.5-35B-A3B --port 8000 --tensor-parallel-size 4 --max-model-len 32768 --gpu-memory-utilization 0.92 --quantization awq --reasoning-parser qwen3如果是 8 卡,把 —tensor-parallel-size 改成 8 即可。对更大模型(122B/397B),你通常也会从“增加卡数 + 收敛上下文/并发”开始。
9.4.3 单卡 A800/H20 的“先跑起来”策略
如果你在单卡 A800/H20 上尝试 122B/397B,更推荐先按“可控变量”逐步加压:
- 第一步:先用短上下文跑通(例如 8K 或 16K)
- 第二步:再提升上下文(例如到 32K),观察吞吐与显存曲线
- 第三步:最后再开并发(逐步增加并发而不是一步拉满)
如果你希望在单卡上尽可能增加成功率,优先尝试:
- 更激进的量化(例如 8-bit/4-bit)来降低权重压力
- 降低 max-model-len 与 降低并发(见 11.5 的 OOM 清单)
现实建议:如果你的目标是“稳定服务 + 真实并发 + 较长上下文”,更大模型大概率会更偏向 多卡 方案;单卡大显存适合作为“开发/研究/探索”的高确定性环境。
9.5 长上下文与并发调参清单(OOM 速查)
当遇到显存不足(OOM)或吞吐不稳时,可以按下面的顺序处理:
9.5.1 先救命:把 KV Cache 压下来
-
降低上下文长度:把 —max-model-len 从 128K/64K 降到 32K/16K/8K
-
降低并发:限制同时处理的会话数
- vLLM 里可以通过控制客户端并发、队列、以及服务端并发相关参数(例如 —max-num-seqs)来实现
-
降低单次 batch 的 token 数(吞吐会下降但更稳)
- 可以通过设置 —max-num-batched-tokens 来避免瞬时 token 峰值
9.5.2 再优化:把权重压力降下来
- 换量化:AWQ / GPTQ / 4-bit 等(不同模型支持度不一样,优先用社区常用方案)
- 降低精度:例如从 FP16/BF16 走 FP8(前提是你拿到 FP8 权重或框架支持)
9.5.3 最后才考虑:增加硬件
- 单卡不够:从 4090×1 → 5090×1/L40S×1,或直接 A800×1/H20×1
- 大模型服务:从单卡升级为多卡,并配置 tensor parallel
用 HF Skills 微调 Qwen3.5
HF Skills 的 model-trainer 技能提供了完整的训练模板。以下演示如何在 4090 上对 Qwen3.5-27B 做 LoRA 微调(27B Dense 模型更适合微调场景)。
10.1 准备训练数据集
数据集需要是标准的对话格式。你可以使用 HF Hub 上现有的数据集,或者自己创建:
prepare_dataset.py
from datasets import Datasetdata = [ { "messages": [ {"role": "system", "content": "你是一位共绩算力的技术客服。"}, {"role": "user", "content": "4090 单卡能跑多大的模型?"}, {"role": "assistant", "content": "RTX 4090 拥有 24GB 显存。在 4-bit 量化下,可以运行约 35B 参数的模型(如 Qwen3.5-35B-A3B)。全精度下最大约 13B 参数。如果使用 LoRA 微调,24GB 显存可以微调约 7-13B 的模型。"} ] }, { "messages": [ {"role": "system", "content": "你是一位共绩算力的技术客服。"}, {"role": "user", "content": "关机后数据会丢失吗?"}, {"role": "assistant", "content": "不会。共绩算力的云主机支持关机保存,系统盘和数据盘在关机期间会持久化保留。不过为了数据安全,建议将重要数据备份到共享存储卷,因为本地 SSD 没有冗余设计。"} ] }, # ... 更多训练数据,实际建议 500-5000 条]dataset = Dataset.from_list(data)dataset.push_to_hub("your-username/gongji-customer-service-dataset")print(f"数据集上传完成,共 {len(dataset)} 条")10.2 LoRA 微调脚本
train_lora.pyimport torchfrom datasets import load_datasetfrom transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfigfrom peft import LoraConfig, get_peft_model, prepare_model_for_kbit_trainingfrom trl import SFTTrainer, SFTConfigmodel_name = "Qwen/Qwen3.5-27B"dataset_name = "your-username/gongji-customer-service-dataset"4-bit 量化配置(QLoRA)
bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True,)tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)tokenizer.pad_token = tokenizer.eos_tokenmodel = AutoModelForCausalLM.from_pretrained( model_name, quantization_config=bnb_config, device_map="auto", trust_remote_code=True,)model = prepare_model_for_kbit_training(model)LoRA 配置
lora_config = LoraConfig( r=16, # LoRA 秩 lora_alpha=32, # 缩放因子 target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], lora_dropout=0.05, bias="none", task_type="CAUSAL_LM",)model = get_peft_model(model, lora_config)model.print_trainable_parameters()预期输出:trainable params: ~50M || all params: ~27B || trainable%: ~0.19%
dataset = load_dataset(dataset_name, split=“train”)
10.3 训练配置
training_args = SFTConfig( output_dir="./qwen35-lora-output", num_train_epochs=3, per_device_train_batch_size=1, gradient_accumulation_steps=8, # 有效 batch_size = 8 learning_rate=2e-4, lr_scheduler_type="cosine", warmup_ratio=0.1, logging_steps=10, save_steps=100, save_total_limit=3, bf16=True, # 4090 支持 BF16 gradient_checkpointing=True, # 省显存 max_seq_length=2048, push_to_hub=True, hub_model_id="your-username/qwen35-27b-gongji-lora", report_to="none",)trainer = SFTTrainer( model=model, args=training_args, train_dataset=dataset, processing_class=tokenizer,)trainer.train()trainer.push_to_hub()print("训练完成!模型已上传到 Hugging Face Hub")显存占用估算:
- 模型(4-bit):~17GB
- LoRA 参数:~0.2GB
- 优化器状态:~1GB
- 梯度 + 激活值(gradient checkpointing):~4GB
- 总计:~22GB — 4090 的 24GB 足够
10.4 用 Trackio 监控训练
HF Skills 的 trackio 技能可以实时追踪训练指标:
import trackio
trackio.init( project="qwen35-finetune", run="lora-v1", hf_space="your-username/training-dashboard")
from transformers import TrainerCallbackclass TrackioCallback(TrainerCallback): def on_log(self, args, state, control, logs=None, **kwargs): if logs: trackio.log(logs, step=state.global_step)
trainer = SFTTrainer( ..., callbacks=[TrackioCallback()],)构建 Gradio Demo
使用 HF Skills 的 gradio 技能,可以快速创建一个对话 Demo:
app.py
import gradio as grfrom openai import OpenAIclient = OpenAI(base_url="[http://localhost:8000/v1](http://localhost:8000/v1)", api_key="any")def chat(message, history): messages = [{"role": "system", "content": "你是一位友好的 AI 助手,由 Qwen3.5 驱动,运行在共绩算力的 4090 云主机上。"}] for h in history: messages.append({"role": "user", "content": h[0]}) if h[1]: messages.append({"role": "assistant", "content": h[1]}) messages.append({"role": "user", "content": message})response = client.chat.completions.create( model="Qwen/Qwen3.5-35B-A3B", messages=messages, temperature=0.7, max_tokens=2048, stream=True)
partial = ""for chunk in response: if chunk.choices[0].delta.content: partial += chunk.choices[0].delta.content yield partialdemo = gr.ChatInterface( fn=chat, title="Qwen3.5 on 共绩算力 4090", description="Qwen3.5-35B-A3B | RTX 4090 24GB | 共绩算力 ¥1.68/时", examples=[ "解释一下 Mixture of Experts 架构", "用 Python 实现一个简单的 RAG 系统", "帮我写一首七言绝句,主题是深夜 coding", ], theme=gr.themes.Soft())demo.launch(server_name="0.0.0.0", server_port=7860)启动后,通过 SSH 隧道在本地浏览器访问 http://localhost:7860。
模型上传到 Hugging Face Hub
训练完成后,用 HF CLI 将模型和 Demo 上传:
hf upload your-username/qwen35-27b-gongji-lora ./qwen35-lora-output . --commit-message="Upload LoRA weights for Qwen3.5-27B fine-tuned on customer service data"
hf upload your-username/qwen35-27b-gongji-lora ./README.md README.md
hf repo tag create your-username/qwen35-27b-gongji-lora v1.0
hf repo create your-username/qwen35-demo --repo-type space --space_sdk gradiohf upload your-username/qwen35-demo . . --repo-type space成本核算:租用 vs 自购,怎么算更合理?
以下是一次完整的”下载→推理→微调→部署”全流程的预估成本:
阶段 | 耗时 | 共绩算力费用 | 说明 |
环境初始化 | ~15 分钟 | ¥0.42 | 安装依赖、登录 HF |
模型下载 | ~20 分钟 | ¥0.56 | 70GB 模型文件 |
推理测试 | ~30 分钟 | ¥0.84 | 调试、验证输出 |
LoRA 微调(1000 条数据) | ~2 小时 | ¥3.36 | 3 个 epoch |
Gradio Demo 调试 | ~30 分钟 | ¥0.84 | 前端调试 |
模型上传 | ~10 分钟 | ¥0.28 | 上传到 Hub |
合计 | ~4 小时 | ~¥6.30 |
一个更贴近现实的对比:4090 自购价格会随渠道/供需波动(常见区间约 ¥12,000–¥16,000)。按 4090×1 的 ¥1.68/时估算,回本小时数约为:
- 12,000 / 1.68 ≈ 7,143 小时
- 16,000 / 1.68 ≈ 9,524 小时
也就是连续跑 297–397 天 才可能“追平”硬件成本(还没算电费、折旧、故障与时间成本)。对大多数需要“按需用 GPU”的团队/个人,云端按秒计费更容易把成本控制在可接受范围内。
九大 HF Skills 速查表
你想做什么 | 对 Cursor 说 | 对应 Skill |
下载模型 | "下载 Qwen3.5-35B-A3B 到 /root/models" | hugging-face-cli |
上传数据集 | "把 ./data 目录上传为 HF 数据集" | hugging-face-datasets |
SFT 微调 | "用 SFT 在这个数据集上微调 Qwen3.5" | hugging-face-model-trainer |
DPO 对齐 | "用 DPO 做偏好对齐训练" | hugging-face-model-trainer |
跑批量推理 | "在 HF Jobs 上批量推理 1 万条数据" | hugging-face-jobs |
评测模型 | "评测微调模型在 MMLU 上的得分" | hugging-face-evaluation |
监控训练 | "设置 Trackio 追踪训练过程" | hugging-face-trackio |
创建 Demo | "用 Gradio 创建一个对话 Demo" | huggingface-gradio |
发布论文 | "在 Hub 上发布这个模型的论文页" | hugging-face-paper-publisher |
14.1 常见问题 FAQ
14.2 Cursor 连接共绩云主机时一直断开怎么办?
A:可能原因:
- 网络不稳定:在 SSH Config 中添加 ServerAliveInterval 60 保持连接
- Cursor Server 安装失败:确保云主机有 wget 和 nodejs 20+
- 防火墙问题:确认安全组开放了 SSH 端口
Host gongji-4090 HostName xnc1.550c.cloud Port 35012 User root ServerAliveInterval 60 ServerAliveCountMax 314.3 4090 显存不够跑 Qwen3.5-35B-A3B 怎么办?
A:三个方案:
- 使用更激进的量化(Q3 而非 Q4),显存降至约 18GB
- 减小 max-model-len(上下文长度),例如设为 8192
- 升级到 2×4090 配置(共 48GB 显存,¥3.36/时),可以跑 FP8 版本
17.3 HF Skills 的 Jobs 和直接在云主机上跑有什么区别?
A:
- HF Jobs:在 Hugging Face 的基础设施上运行,需要 Pro/Team/Enterprise 付费账户,适合不想自己管 GPU 的场景
- 共绩云直接跑:你已经有了 4090,直接用就行,省去 HF Jobs 的额外费用。Skills 里的训练脚本和最佳实践仍然适用,只是执行位置不同
14.4 模型下载很慢怎么办?
A:
- 使用 ModelScope 镜像源(国内加速):VLLM_USE_MODELSCOPE=true
- 使用 HF 镜像:export HF_ENDPOINT=https://hf-mirror.com
- 如果已有共享存储卷,把模型存到共享卷,避免每次开新机重新下载
14.5 关机后已下载的模型还在吗?
A:是的,共绩算力的云主机支持关机保存,系统盘和数据盘会持久化保留。但强烈建议将大模型文件放到共享存储卷,因为本地 SSD 没有冗余,单点故障可能导致数据丢失。
14.6 可以同时跑推理和微调吗?
A:在单张 4090(24GB)上不建议——显存不够同时容纳两个任务。可以:
- 先跑微调 → 完成后切换到推理
- 开两台云主机分别跑(费用翻倍但互不影响)
- 升级到 2×4090 或 4×4090 配置
14.7 如何把微调模型转成 GGUF 用 Ollama 跑?
先合并 LoRA 权重到基础模型python -c "from peft import AutoPeftModelForCausalLMmodel = AutoPeftModelForCausalLM.from_pretrained('./qwen35-lora-output')model = model.merge_and_unload()model.save_pretrained('./qwen35-merged')"使用 llama.cpp 的转换脚本git clone [https://github.com/ggml-org/llama.cpp](https://github.com/ggml-org/llama.cpp)cd llama.cpppython convert_hf_to_gguf.py ../qwen35-merged --outtype q4_k_m在 Ollama 中创建自定义模型cat > Modelfile << 'EOF'FROM ./qwen35-merged-Q4_K_M.ggufSYSTEM "你是一位共绩算力的技术客服。"PARAMETER temperature 0.7EOFollama create gongji-assistant -f Modelfileollama run gongji-assistant总结与进阶路线
本文的核心链路:
本地 Cursor ──SSH──> 共绩云主机(示例:4090×1)──Skills──> HF 生态
│ │ │
│ 编辑代码/指挥 AI │ 执行训练/推理 │ 模型/数据/社区
└────────────────────┴─────────────────────┘你学到了什么:
- 用 Cursor SSH 远程连接共绩算力云主机,获得”本地体验”的云端 GPU 开发环境
- 安装和配置 Hugging Face Skills + MCP,让 AI 编程助手成为你的 AI/ML 操作员
- 在 RTX 4090 上部署 Qwen3.5-35B-A3B(推理)和 Qwen3.5-27B(微调)
- 全流程成本不到 ¥10,远低于购买硬件
进阶方向:
方向 | 说明 | 涉及 Skills |
多模态应用 | Qwen3.5 原生支持图文理解,可以做图片问答、文档解析 | gradio + cli |
RAG 系统 | 结合向量数据库,构建企业知识问答系统 | tool-builder |
Agent 开发 | 基于 Qwen-Agent 框架做工具调用 Agent | cli + jobs |
分布式训练 | 升级到 4×4090,做更大规模的全量微调 | model-trainer |
RLHF/DPO 对齐 | 在 SFT 基础上做偏好对齐 | model-trainer |
模型评测发布 | 评测后发表到 HF Hub,积累社区影响力 | evaluation + paper-publisher |
欢迎交流:如果你在共绩算力上跑 Qwen3.5 遇到问题,或者对 HF Skills 有使用心得,欢迎在评论区留言。
相关阅读:
- Hugging Face Skills 仓库 (https://github.com/huggingface/skills)
- Qwen3.5 官方 GitHub (https://github.com/QwenLM/Qwen3.5)
- 共绩算力官网 (https://www.gongjiyun.com/)