聊聊如何在内网下构建大模型微调环境
在内网环境下搭建大模型微调环境,核心痛点在于依赖包的获取——没有公网镜像,没有便捷的pip一键安装。好在通过虚拟机中转加离线包搬运,这套流程完全可以跑通。下面详细记录从零到一的完整步骤,涉及VMWare镜像、Docker容器、Python虚拟环境、离线pip操作以及LLaMA-Factory的常见踩坑。
背景
AI服务器在内网,除了预先安装的python及docker等基本软件包外,别的一概没有。从零基于Llama-Factory搭建大模型微调环境。

在VMWare上搭一个同样服务器版本(例如centos)的虚拟机,用于联网下载依赖包;后续再拷贝过去。
docker
在运维同事打好docker镜像后,开发编写docker-compose单独起一个docker环境。这里建议以自己名字命名文件夹来启动docker,这样docker-compose挂载的volume会比较干净,所有文件都直接落在自己名字的目录下。
docker-compose内容如下(具体配置略),文件夹结构也以个人名字命名,方便管理。
虚拟环境venv
进入docker后,基于python3默认的venv模块,单独起一个python虚拟环境,隔离包的依赖,避免和系统或他人环境冲突。
创建虚拟环境:
python -m venv apienv
激活环境:
source ENV_DIR/bin/activate
pip包下载
在内网环境下,如果没有镜像库支持,是无法一键 pip install xxx 的,必须手动搬运。这里提供两种脱机方案:
- 先
pip download再pip install --no-index - 直接
pip install xxx --target /path
当然,包的下载要在venv虚拟环境下进行,隔离别人的包依赖,防止覆盖或版本不对。
个人推荐以下命令组合(已脱敏处理,镜像源可根据内网情况替换):
# 指定源下载包
pip install pandas -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 将本地目录打包,解决llamafactory-cli命令报错的问题
pip install -e . --no-build-isolation --no-index --find-links=./
# 指定源下载requirements依赖,并指定下载目录
pip download -r requirements.txt -d /home/sitepackage/ --index-url http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 指定源下载指定包,并指定下载目录
pip3 download -d /home/sitepackage/ gradio==4.21.0 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 离线安装 download 好的依赖包
pip install --no-index --find-links=/home/sitepackage/ -r requirements.txt
LLaMA-Factory报错
llamafactory-cli不存在
新版Llama-Factory改用了 llamafactory-cli 命令进行训练微调,但该命令默认是不存在的。需要在LlamaFactory源码目录下执行 pip install -e . 来生成,官方文档也注明了这一要求。不过离线环境下不能直接写,上述命令列表已给出离线安装的变通方式。但当时还是遇到了新问题——可以参考GitHub上的issue,是LlamaFactory自身的问题,重新拉取最新代码即可。只要按照上述步骤:先download包,再install,最后执行:
pip install -e . --no-build-isolation --no-index --find-links=/home/sitepackage/
即可生成 llamafactory-cli 命令。
docker共享内存不足
报错信息如下:
NCCL error in: ../torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1970, unhandled system error (run with NCCL_DEBUG=INFO for details), NCCL version 2.20.5
System call (e.g. socket, malloc) or external library call failed or device error.
error:
while creating shared memory segment /dev/shm/nccl-jURtqQ (size 5767520)
docker默认的共享内存只有64MB,当机器有多张显卡时,llamafactory-cli train 默认会启用分布式训练,这时共享内存很容易爆满。解决方式有两种:一是调大docker的shm_size,在docker-compose文件中增加配置:
shm_size: 16GB
二是指定单卡训练(如果单卡显存足够),命令如下:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train xxx
参考:NCCL相关issue、简书分享
transformers版本不对
报错信息:
ValueError: too many values to unpack (expected 2)
重新安装一下transformers,指定版本为4.41.2即可解决。
总结
LlamaFactory新版本更新后,整体使用还算方便,唯独 llamafactory-cli 命令确实容易让人懵一下,踩个坑就清楚了。对于微调本身,并不复杂——毕竟都是配置项驱动;真正的麻烦在于内网环境下依赖包的拉取和安装,不过走完一遍流程,收获还是不少的。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名