离线部署大模型依赖无网络住宅主机
为什么要在无网络住宅主机上部署大模型依赖
很多用户把家用 PC 或旧服务器改造成内网大模型工作站,但这类主机通常没有上网权限(比如物理隔离、弱网环境)。
大模型依赖的 Python 包动辄几十个,加上模型文件本身可能超过 10GB,直接 pip install 会失败。
离线部署大模型依赖到无网络住宅主机,核心思路就是“用一台能联网的机器当搬运机,把所有依赖和模型打包好,再通过 U 盘或局域网传到目标主机上安装”。
准备工作:你需要一台能联网的“搬运机”
- 联网机器:任何能正常上网的电脑(Linux / macOS / Windows 都可以),用来下载依赖包和模型。
- 无网络主机:需要安装大模型的目标机器,系统推荐 Ubuntu 20.04+ 或 CentOS 7+。
- 传输介质:U 盘(建议 32GB 以上)、移动硬盘,或者两台机器在同一个内网里(通过直连网线或路由器)。
- Python 环境:目标主机上提前装好 Python 3.8+(建议 3.10),如果还没装,需要离线安装 Python,参考另一篇教程。
第一步:在联网机器上下载所有依赖包
先确定你要运行的大模型框架(比如 Transformers、PyTorch、vLLM 等)。
下面以常见的 transformers + torch 为例。
- 创建一个空目录,存放所有离线包:
mkdir offline_packages
cd offline_packages
- 生成依赖列表。如果你已经有项目代码,直接导出
requirements.txt:
pip freeze > requirements.txt
如果没有现成项目,可以手动写一个最小依赖文件,例如写入以下内容:
transformers>=4.30.0
torch>=2.0.0
accelerate
sentencepiece
- 用
pip download命令下载所有依赖包及其子依赖:
pip download -r requirements.txt -d ./ --platform manylinux2014_x86_64 --only-binary=:all:
参数说明:-d ./指定下载到当前目录;--platform指定目标主机架构(如果你目标主机是 x86_64 则用这个);--only-binary=:all:只下载预编译的 wheel 包,避免目标主机上缺少编译工具。
- 下载模型文件(可选)。用 Hugging Face 的
snapshot_download或直接手动下载:
pip install huggingface_hub
huggingface-cli download meta-llama/Llama-2-7b-chat-hf --local-dir ./model_cache
注意:模型文件很大,确保存储空间充足。
第二步:打包传输到无网络主机
- 将所有下载的
.whl文件和模型文件夹打包成一个压缩包:
tar czf offline_deploy.tar.gz ./*
- 通过 U 盘复制到目标主机,或用
scp(如果两台机器在同一网段):
scp offline_deploy.tar.gz user@192.168.1.100:/home/user/
第三步:离线安装依赖与模型文件
- 在无网络主机上解压:
tar xzf offline_deploy.tar.gz
cd offline_packages
- 离线安装所有
.whl文件:
pip install --no-index --find-links . -r requirements.txt
--no-index 禁止联网索引,--find-links . 指定从当前目录查找包。
- 验证安装是否成功:
python -c "import transformers; print(transformers.__version__)"
python -c "import torch; print(torch.__version__)"
如果输出版本号,说明依赖安装正常。
- 将模型文件移动到合适位置(例如
~/.cache/huggingface/hub/):
mv model_cache ~/.cache/huggingface/hub/
或直接在代码中指定路径。
避坑指南:常见错误与解决方法
- pip download 报错“No matching distribution”:通常是因为你指定的
--platform和目标主机架构不一致。先uname -m确认目标主机架构(x86_64 还是 aarch64),然后在下载时使用正确的平台值。 - 安装时提示“ERROR: Could not find a version that satisfies the requirement”:很可能
requirements.txt里写死了某个版本,但下载时没有拉取其依赖。建议用pip download -r requirements.txt -d ./不加--only-binary试试,但会下载源码包;若目标主机缺少编译环境则更麻烦。推荐始终使用--only-binary并提前检查依赖关系。 - 模型文件太大,U 盘空间不足:优先使用移动硬盘或内网传输。也可以只下载模型权重文件,忽略不必要的文件(如 tokenizer 配置等必备的)。
- 目标主机没有 pip:先用安装包离线安装 pip。从联网机器下载
get-pip.py,再python get-pip.py --no-index(需要预先下载 pip 的 wheel)。
验证最终效果
用一段简单代码测试整个流程是否可用:
from transformers import AutoTokenizer, AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("./model_cache")
tokenizer = AutoTokenizer.from_pretrained("./model_cache")
inputs = tokenizer("Hello, I am a language model", return_tensors="pt")
outputs = model.generate(**inputs)
print(tokenizer.decode(outputs[0]))
如果输出推理结果,那恭喜你——离线部署大模型依赖到无网络住宅主机已经成功了。
高频问题解答
Q:我必须使用特定的 Python 版本吗?
A:建议与联网机器版本一致,避免二进制包兼容问题。可以用 pyenv 多版本管理。
Q:我的目标主机是 ARM 架构(比如树莓派),怎么处理?
A:在下载时把 --platform 改成 manylinux2014_aarch64,并且找对应的预编译包。部分包可能没有 ARM 的 wheel,需要源码编译。
Q:每次更新依赖都要重新打包吗?
A:如果你只是更新少量包,可以单独下载单个 wheel 文件,再用 pip install --no-index 安装即可,不需要重新打包全部。
如果你正在处理离线部署大模型依赖到无网络住宅主机的任务,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。