news 2026/1/12 11:12:46

大模型的服务器部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型的服务器部署

我要在linux服务器部署千问14b大模型,一步一步详细的告诉我用命令行和ftp 怎么操作

后面命令需要根据cuda版本调整

nvidia-smi
Wed Dec 10 17:53:02 2025
±----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.105.08 Driver Version: 580.105.08 CUDA Version: 13.0 |
±----------------------------------------±-----------------------±---------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=++======|
| 0 NVIDIA GeForce RTX 4090 Off | 00000000:47:00.0 Off | Off |
| 30% 28C P8 17W / 450W | 68MiB / 49140MiB | 0% Default |
| | | N/A |
±----------------------------------------±-----------------------±---------------------+

±----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1395 G /usr/lib/xorg/Xorg 21MiB |
| 0 N/A N/A 1574 G /usr/bin/gnome-shell 15MiB |
±----------------------------------------------------------------------------------------+

可以,咱们按「从 0 到能在终端跟千问 14B 聊天」来一步一步走一遍,用到两件武器:
1)Linux 命令行(SSH)
2)FTP/SFTP(从你本地电脑往服务器丢文件)

下面假设你要部署的是最新版的指令模型Qwen/Qwen2.5-14B-Instruct,官方推荐直接用 Hugging Face 的transformers来推理。(Gitee)


一、前提条件检查(在服务器上)

  1. 确认有 GPU(没有也能跑,但 14B 非常慢)

    nvidia-smi

    能看到显卡信息(显存 24G 起步最舒服),就算过关。
    如果没有nvidia-smi,说明没装驱动,要找管理员先装好 CUDA 驱动。

  2. 系统假设
    下面命令以 Ubuntu 为例(Debian 也类似)。
    如果你是 CentOS/Rocky,可以把apt换成yumdnf


二、用命令行连上服务器(SSH)

在你本地电脑(Windows 推荐用 PowerShell 或 Windows Terminal):

ssh your_user_name@your_server_ip# 例如# ssh zhenyue@1.2.3.4

第一次会问yes/no,输入yes,然后输入密码,就登陆到 Linux 上了。


三、准备 Python 环境(命令行)

1. 更新系统并安装基本依赖

# 更新软件源sudoaptupdate# 基础工具sudoaptinstall-ygitpython3 python3-venv python3-pip

2. 创建项目目录与虚拟环境

mkdir-p ~/qwen14bcd~/qwen14b# 创建虚拟环境python3 -m venv .venv# 激活虚拟环境source.venv/bin/activate

之后你每次想用这个项目,都先:

cd~/qwen14bsource.venv/bin/activate

3. 安装 PyTorch 与 Transformers 等

PyTorch 要根据你服务器的 CUDA 版本来装,这里只给一个「常见情况」示例,你最好根据 PyTorch 官网命令做微调。(OneClick IT Consultancy)

在虚拟环境里:

# 升级 pippipinstall-U pip# 安装 transformers + accelerate + huggingface_hub 等pipinstall-U"transformers>=4.44.0"accelerate huggingface_hub sentencepiece# PyTorch 示例(以 CUDA 12.1 为例):pipinstalltorch --index-url https://download.pytorch.org/whl/cu121

如果你的 CUDA 不是 12.1,把cu121改成对应版本即可;
只想先跑 CPU 版,也可以简单:

pipinstalltorch --index-url https://download.pytorch.org/whl/cpu

四、配置 Hugging Face 访问(命令行)

Qwen2.5 官方在 Hugging Face 上,建议配置一个 token,这样拉模型比较顺畅。(Gitee)

  1. 在浏览器打开 Hugging Face,登陆你的账号,个人设置里生成一个Access Token(记下来)。

  2. 在服务器上创建配置目录:

    mkdir-p ~/.huggingfacenano~/.huggingface/token
  3. 把你的hf_xxx...粘进去,保存退出:

    • nano里按Ctrl+O回车保存
    • 再按Ctrl+X退出

五、命令行下载 Qwen 14B 模型

最方便的是用huggingface-cli直接下载到本地磁盘(可选步骤,纯在线加载也行)。

  1. 安装命令行工具:

    pipinstall-U huggingface_hub
  2. 在项目目录里运行:

    cd~/qwen14b# 下载 Qwen2.5-14B-Instruct 到本地 Qwen2.5-14B-Instruct 目录huggingface-cli download Qwen/Qwen2.5-14B-Instruct\--local-dir ./Qwen2.5-14B-Instruct

这一步会占用几十 GB 磁盘,请确保/home/你的用户下空间够用。

说明:如果你不提前下载,后面用from_pretrained("Qwen/Qwen2.5-14B-Instruct")也会自动从网络拉,只是可控性稍差一些。


六、写推理脚本(命令行方式)

1. 在服务器上用编辑器写 Python

cd~/qwen14bnanochat_qwen.py

把下面完整代码粘进去:

fromtransformersimportAutoModelForCausalLM,AutoTokenizerimporttorch MODEL_NAME="Qwen/Qwen2.5-14B-Instruct"# 或者改成本地目录: "./Qwen2.5-14B-Instruct"defload_model():print(f"Loading model:{MODEL_NAME}")tokenizer=AutoTokenizer.from_pretrained(MODEL_NAME,use_fast=False)model=AutoModelForCausalLM.from_pretrained(MODEL_NAME,torch_dtype="auto",device_map="auto")returntokenizer,modeldefchat_loop(tokenizer,model):system_prompt="You are Qwen, created by Alibaba Cloud. You are a helpful assistant."history=[]print("✅ 模型加载完成,输入内容开始对话,输入 exit / quit 退出。")whileTrue:user_input=input("你: ").strip()ifuser_input.lower()in["exit","quit","q"]:print("结束对话,再见~")break# 构造 messages(兼容 Qwen 官方 chat 模板):contentReference[oaicite:3]{index=3}messages=[{"role":"system","content":system_prompt}]foru,ainhistory:messages.append({"role":"user","content":u})messages.append({"role":"assistant","content":a})messages.append({"role":"user","content":user_input})text=tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)model_inputs=tokenizer([text],return_tensors="pt").to(model.device)withtorch.no_grad():generated_ids=model.generate(**model_inputs,max_new_tokens=512,do_sample=True,temperature=0.7,top_p=0.9,)# 去掉输入部分,只保留新生成的回复new_tokens=generated_ids[0,model_inputs["input_ids"].shape[1]:]response=tokenizer.decode(new_tokens,skip_special_tokens=True)print(f"Qwen:{response}\n")history.append((user_input,response))if__name__=="__main__":tokenizer,model=load_model()chat_loop(tokenizer,model)

保存退出:Ctrl+O回车,Ctrl+X

2. 直接运行测试

确保虚拟环境已激活:

cd~/qwen14bsource.venv/bin/activate python chat_qwen.py

第一次会花时间加载模型,出现✅ 模型加载完成...后,就可以在命令行里和千问对话了。


七、用 FTP/SFTP 上传文件(从本地到服务器)

你说要用 FTP,那我们以FileZilla(图形化客户端)为例,走一遍从本地上传脚本的流程,适合你在本地改好代码再扔上服务器。

1. 在本地准备代码

在你自己的电脑上,用 PyCharm/VSCode 写好chat_qwen.py,或者整个项目目录,比如qwen_project/

2. 安装并打开 FileZilla

  1. 下载 FileZilla Client(不是 Server)。
  2. 打开后点左上角「文件」→「站点管理器」。

3. 配置 SFTP 连接

在站点管理器中新建站点,填写:

  • 协议:SFTP - SSH File Transfer Protocol
  • 主机: 你的服务器 IP,例如1.2.3.4
  • 端口:22
  • 登录类型: 普通
  • 用户: 和你 SSH 登录时一样,例如zhenyue
  • 密码: 对应密码

点「连接」,下方右侧就会显示服务器上的文件系统。

4. 上传文件到项目目录

  1. 在右侧远程目录里,进入你项目目录,例如/home/zhenyue/qwen14b
  2. 左侧是你本地目录,找到你的项目文件夹(例如qwen_project)。
  3. 把本地的chat_qwen.py或整个文件夹拖拽到右侧/home/zhenyue/qwen14b
  4. 传输结束后,文件就同步到服务器了。

之后你回到 SSH:

sshyour_user_name@your_server_ipcd~/qwen14bsource.venv/bin/activate python chat_qwen.py

就能以你在本地写的代码为准来跑。


八、如果必须用命令行 FTP/SFTP(纯命令行版)

假如你在另一台 Linux 或 macOS 上,用命令行传文件到服务器,可以用scpsftp

1. 用scp一次性复制文件

在你本地 Linux/macOS 上:

# 上传单个文件scpchat_qwen.py your_user_name@your_server_ip:/home/your_user_name/qwen14b/# 上传整个文件夹scp-r qwen_project your_user_name@your_server_ip:/home/your_user_name/

2. 用sftp交互式上传

sftpyour_user_name@your_server_ip# 进入远程目录cdqwen14b# 切换本地目录lcd /path/to/your/local/project# 上传文件或目录put chat_qwen.py put -r qwen_project# 退出bye

九、显存不够时的简单思路(顺口提一句)

14B 全精度对显存要求比较高,官方建议用 vLLM 或量化部署以降低显存占用。(Gitee)
如果你发现一跑就报 CUDA OOM,可以考虑:

  • 换成官方的量化模型(例如 INT8 或 4bit 版本)。(Dataloop)
  • 或者引入 LMDeploy 之类的加速与量化工具来部署。(Hugging Face)

这些可以再单独给你写一套「低显存部署千问 14B」的脚本。


如果你愿意,你也可以告诉我:

  • 服务器是几 G 显存的卡
  • 想要「命令行聊天」就够,还是想做「HTTP 接口服务」

我可以在这套基础上,再帮你加一层 FastAPI/vLLM 的部署脚本,直接变成可供你前端或别的服务调用的推理接口 😎

调用方式

好,懂了 👍
你要的流程是:Python 里自动拉 Qwen2.5-14B-Instruct 模型 → 用 FastAPI 封装成 HTTP 接口
下面我从「命令行操作」到「完整 FastAPI 代码」一步一步写清楚,你照着敲就能跑起来。

模型用:Qwen/Qwen2.5-14B-Instruct(官方 HF 仓库)(Hugging Face)
显卡:RTX 4090,驱动支持 CUDA 13.0,用 PyTorch CUDA 12.8 轮子就行。


一步一步来:环境准备(命令行)

1. SSH 登录到服务器

在你本地电脑终端(Windows 用 PowerShell / CMD / Git Bash 都可以):

sshyour_user_name@your_server_ip# 例如:# ssh sun@1.2.3.4

输入密码后就进服务器了。


2. 创建项目目录 & 虚拟环境

# 随便选个目录,这里用 ~/qwen14b_apimkdir-p ~/qwen14b_apicd~/qwen14b_api# 创建虚拟环境python3 -m venv .venv# 激活虚拟环境(非常关键!后面所有 pip 都在这个环境里)source.venv/bin/activate

以后每次要启动服务,都先:

cd~/qwen14b_apisource.venv/bin/activate

3. 安装依赖:PyTorch + Transformers + FastAPI

用你 4090 + CUDA13 的配置,直接装 CUDA 12.8 版的 PyTorch 即可(Dataloop):

# 先升级 pippipinstall-U pip# 安装 PyTorch(CUDA 12.8 轮子)pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128# 安装 Qwen2.5 需要的 transformers 等pipinstall"transformers>=4.44.0"accelerate huggingface_hub sentencepiece# 安装 FastAPI + Uvicornpipinstallfastapi"uvicorn[standard]"

注意:Qwen2.5 官方要求较新的 transformers,低于 4.37 会报KeyError: 'qwen2'(Hugging Face),所以我直接写成>=4.44.0


4.(可选)配置 Hugging Face Token

如果服务器访问 Hugging Face 有权限或限速问题,建议配置一个 token(没有也能试,慢一些/可能失败):

mkdir-p ~/.huggingfacenano~/.huggingface/token

把你在 Hugging Face 网站生成的 token(hf_xxx...)粘进去:

  • Ctrl + O回车保存
  • Ctrl + X退出

二、写 FastAPI 服务代码(自动从网络拉取 Qwen 14B)

我们写一个app_qwen14b.py,启动时会自动from_pretrained(),需要时才从网络拉模型。

1. 在服务器上新建代码文件

cd~/qwen14b_apinanoapp_qwen14b.py

把下面这一整段粘进去:

importtorchfromfastapiimportFastAPIfrompydanticimportBaseModelfromtypingimportList,Literal,OptionalfromtransformersimportAutoModelForCausalLM,AutoTokenizer# ==================== 模型配置 ====================MODEL_NAME="Qwen/Qwen2.5-14B-Instruct"# 千问2.5 14B 指令版app=FastAPI(title="Qwen2.5-14B FastAPI Service")tokenizer=Nonemodel=None# ==================== 请求 / 响应数据结构 ====================classMessage(BaseModel):role:Literal["system","user","assistant"]content:strclassChatRequest(BaseModel):# 完整消息列表(兼容多轮)messages:List[Message]# 可选参数max_new_tokens:int=512temperature:float=0.7top_p:float=0.9classChatResponse(BaseModel):text:str# ==================== 启动时加载模型 ====================@app.on_event("startup")defload_qwen_model():globaltokenizer,modelprint(f"🔄 正在加载模型:{MODEL_NAME}(首次会从网络拉取参数,时间会比较长)")tokenizer=AutoTokenizer.from_pretrained(MODEL_NAME)model=AutoModelForCausalLM.from_pretrained(MODEL_NAME,torch_dtype="auto",# 自动选择 float16/bfloat16 等device_map="auto",# 自动把模型放到 GPU)# 简单测试一下_=model.to("cuda"iftorch.cuda.is_available()else"cpu")print("✅ 模型加载完成,可以开始接受请求了。")# ==================== 核心对话接口 ====================@app.post("/chat",response_model=ChatResponse)defchat(req:ChatRequest):""" 调用方式:POST /chat JSON 结构: { "messages": [ {"role": "system", "content": "你是一个乐于助人的教学助手。"}, {"role": "user", "content": "帮我设计一节关于欧姆定律的课堂导入。"} ], "max_new_tokens": 512, "temperature": 0.7, "top_p": 0.9 } """iftokenizerisNoneormodelisNone:raiseRuntimeError("模型尚未加载完成,请稍后重试。")# 转成 Qwen 推荐的 chat_template 格式:contentReference[oaicite:3]{index=3}messages=[m.dict()forminreq.messages]text=tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True)inputs=tokenizer([text],return_tensors="pt").to(model.device)withtorch.no_grad():outputs=model.generate(**inputs,max_new_tokens=req.max_new_tokens,do_sample=True,temperature=req.temperature,top_p=req.top_p,)# 只取新生成的部分gen_ids=outputs[0,inputs["input_ids"].shape[1]:]response_text=tokenizer.decode(gen_ids,skip_special_tokens=True)returnChatResponse(text=response_text)

然后:

  • Ctrl + O回车保存
  • Ctrl + X退出

说明:

  • 第一次启动 FastAPI时,会自动从 Hugging Face 下载Qwen/Qwen2.5-14B-Instruct到本地缓存。
  • 下载完之后再重启就直接走本地缓存,不会重复拉取。

三、启动 FastAPI 服务(命令行)

虚拟环境要激活:

cd~/qwen14b_apisource.venv/bin/activate

然后用uvicorn启动:

uvicorn app_qwen14b:app --host0.0.0.0 --port8000

含义:

  • app_qwen14b:就是刚才那个app_qwen14b.py文件名(去掉.py
  • :app:文件里定义的app = FastAPI(...)这个对象
  • --host 0.0.0.0:对外网可访问
  • --port 8000:服务端口,可自己改

如果你想多进程一点,可以:

uvicorn app_qwen14b:app --host0.0.0.0 --port8000--workers2

首次启动时,终端会卡在「正在加载模型」很久,这是正常的,14B 要下载几十 GB;日志打印✅ 模型加载完成后说明服务就绪。


四、在别的机器 / 本机测试调用(HTTP)

1. 用curl测试(最直观)

在你自己的电脑上(只要能访问这台服务器的 8000 端口):

curl-X POST"http://服务器IP:8000/chat"\-H"Content-Type: application/json"\-d'{ "messages": [ {"role": "system", "content": "你是一个乐于助人的教学助手。"}, {"role": "user", "content": "帮我设计一节关于欧姆定律的课堂导入。"} ], "max_new_tokens": 256, "temperature": 0.7, "top_p": 0.9 }'

如果一切正常,你会看到返回一个 JSON,大概是:

{"text":"好的,可以这样设计课堂导入:……"}

2. 用 Python 调用示例(方便你后续集成)

importrequests url="http://服务器IP:8000/chat"payload={"messages":[{"role":"system","content":"你是一个乐于助人的教学助手。"},{"role":"user","content":"请帮我分析这节物理课的优点和不足。"}],"max_new_tokens":512,"temperature":0.7,"top_p":0.9}resp=requests.post(url,json=payload,timeout=600)resp.raise_for_status()print(resp.json()["text"])

你原来那个「FastAPI /chat」测试脚本,改成这个结构就可以无缝接入。


五、跟你当前习惯对齐的小结

你说的需求其实可以概括为:

「我不想提前用 huggingface-cli 下模型,只要 Python 代码 from_pretrained 就行,然后对外暴露 FastAPI 接口。」

上面的方案完全满足这一点:

  • 模型拉取位置:在app_qwen14b.pyload_qwen_model()中,通过from_pretrained(MODEL_NAME)自动从网络拉取。
  • 部署方式:用命令行uvicorn app_qwen14b:app --host 0.0.0.0 --port 8000起服务。
  • 调用方式:所有前端、后端、脚本只要走 HTTP POST/chat就可以拿到 Qwen2.5-14B-Instruct 的回复。

如果你愿意下一步,我可以帮你:

  • 把这个 FastAPI 服务改成「OpenAI 风格接口」(/v1/chat/completions那一套),你原来的多智能体评课系统可以几乎零改动接入。
  • 或者加一个「健康检查接口」//health,方便你用 supervisor / systemd 做常驻守护。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/5 20:20:34

Wan2.2-T2V-5B在低显存设备上的适配技巧(<8GB)

Wan2.2-T2V-5B在低显存设备上的适配技巧&#xff08;<8GB&#xff09; 你有没有遇到过这样的尴尬&#xff1a;兴冲冲打开一个文本生成视频的AI工具&#xff0c;输入精心设计的提示词——“一只发光水母在深海中缓缓游动&#xff0c;周围星光点点”——结果系统弹出一行小字&…

作者头像 李华
网站建设 2026/1/11 15:29:57

Wan2.2-T2V-5B在智能广告牌内容轮播中的动态更新实践

Wan2.2-T2V-5B在智能广告牌内容轮播中的动态更新实践 你有没有注意到&#xff0c;街角那块原本只会循环播放“全场8折”的广告牌&#xff0c;突然换成了“雨天暖心拿铁&#xff0c;热饮第二杯半价”&#xff1f;而且画面里还真的飘着细雨、热气从咖啡杯升腾而起——仿佛它“知道…

作者头像 李华
网站建设 2026/1/12 6:10:14

Wan2.2-T2V-5B入门指南:快速部署与本地推理教程

Wan2.2-T2V-5B入门指南&#xff1a;快速部署与本地推理教程你有没有过这样的体验&#xff1f;脑子里浮现出一个绝妙的画面——比如“一只橘猫穿着宇航服在月球上弹吉他”&#xff0c;可当你想把它做成视频时&#xff0c;却发现剪辑软件太难上手、外包成本太高、AI工具又慢得像在…

作者头像 李华
网站建设 2026/1/7 22:52:52

Wan2.2-T2V-5B支持哪些输入格式?一文讲清接口规范

Wan2.2-T2V-5B支持哪些输入格式&#xff1f;一文讲清接口规范 在短视频爆发、内容为王的今天&#xff0c;你有没有遇到过这样的场景&#xff1a;运营同事催着要10条新品宣传视频&#xff0c;可剪辑师还在加班调色&#xff1b;产品经理想验证一个“未来城市”的视觉概念&#x…

作者头像 李华
网站建设 2026/1/11 7:48:07

Wan2.2-T2V-5B如何应对模糊描述?鲁棒性压力测试

Wan2.2-T2V-5B如何应对模糊描述&#xff1f;鲁棒性压力测试 在短视频内容爆炸式增长的今天&#xff0c;你有没有试过这样一幕&#xff1a;灵光一闪&#xff0c;想生成一个“什么东西在飞”的画面&#xff0c;结果模型要么给你一团乱码&#xff0c;要么干脆卡住不动&#xff1f;…

作者头像 李华
网站建设 2026/1/10 12:01:21

Wan2.2-T2V-5B能否生成文字叠加视频?图文融合能力考察

Wan2.2-T2V-5B能否生成文字叠加视频&#xff1f;图文融合能力考察 在短视频狂飙突进的今天&#xff0c;内容创作者每天都在和时间赛跑。你有没有遇到过这样的场景&#xff1a;凌晨两点&#xff0c;热点事件刚爆发&#xff0c;运营催着要一条带字幕的创意视频&#xff0c;而剪辑…

作者头像 李华