八个必需依赖与五个可选依赖:版本下限和推荐值分别卡在哪

2026-08-09

本文所有事实以 hiyouga/LlamaFactory 官方仓库 2026-08-09 的内容为准。我们没有安装、训练或部署过任何模型,文中版本号均照抄仓库文档原文。

装这类训练框架最常见的翻车顺序是这样的:先照着 pip install -e . 敲完,跑起来报一个看不懂的错,回头搜半天,最后发现是 transformers 版本比人家要求的低了两个小版本。而这件事其实在 README 的 Installation 一节里就写着——那里有两张 Requirement 表,一张 Mandatory 八行,一张 Optional 五行,每行都分了 MinimumRecommend 两列。

这篇只干一件事:把这十三行摊开讲清楚。哪一行是真的硬下限,哪几行只有在你用到某个具体功能时才需要,这些数字分别写在哪一层,以及为什么读完这两张表你还是拿不到一份”这几个版本一起用就对了”的组合清单。

先分清 Minimum 和 Recommend 是两条线

这两列不是”低配”和”高配”的意思。按 README 的表头字面理解:Minimum 是这个依赖被接受的最低版本,Recommend 是官方给出的推荐取值。两列都是官方文档口径,我们没有装过任何一个组合去验证它们,所以下面全程只做转述和对照,不做”哪个组合能跑”的判断。

有一个细节值得先点出来:八条 Mandatory 里,只有 python 这一行的 Recommend 写成了 >=3.11 这种区间形式,其余七行的 Recommend 都是一个具体版本号。也就是说 Python 这一项官方给的是”3.11 起步、往上不设限”,而其它依赖给的是一个点值。这是从表里直接读出来的写法差异,至于为什么这么写,README 没说,我们也不推断。

八条 Mandatory:逐格照抄

依赖MinimumRecommend
python3.11>=3.11
torch2.0.02.6.0
torchvision0.15.00.21.0
transformers4.49.04.50.0
datasets2.16.03.2.0
accelerate0.34.01.2.1
peft0.14.00.15.1
trl0.8.60.9.6

读这张表的时候,按”这一行卡住的是哪一环”分一下组,比从上往下扫一遍有用:

python 是最先该确认的一行。 Minimum 3.11、Recommend >=3.11,两列都从 3.11 起。这意味着如果你手上是更老的解释器环境,其它七行你连看都不用看,先解决 Python 版本再谈别的。这一行的下限和推荐值撞在同一个数上,是八行里唯一一处,值得单独记住。

torchtorchvision 是成对的一组。 torch 的跨度是 Minimum 2.0.0 到 Recommend 2.6.0,torchvision 是 0.15.0 到 0.21.0。这两行的 MinimumRecommend 之间隔了不小的一段——你可以把这理解成官方在两端各画了一条线,中间那一大片没有表态。至于这两个版本号之间该取哪一个,README 没说,我们也没有装过任何一个组合来验证。

剩下五行是 Hugging Face 那一套生态。 transformers 4.49.0 / 4.50.0,datasets 2.16.0 / 3.2.0,accelerate 0.34.0 / 1.2.1,peft 0.14.0 / 0.15.1,trl 0.8.6 / 0.9.6。这五个里最容易被忽略的是 pefttrl:它们各自具体承担什么,README 的 Requirement 表里没有展开写,我们也不替它补——这里只按表面事实说一句,它们被放在 Mandatory 表里而不是 Optional 表里,也就是说不管你这次只想跑一个最简单的监督微调,按这张表它们也一样在必装之列。

值得注意的是版本跨度:datasets 的 Minimum 是 2.x(2.16.0)而 Recommend 已经是 3.x(3.2.0),accelerate 是 0.34.0 到 1.2.1,同样跨过了一次主版本号。八行里就这两行的 Minimum 与 Recommend 分属不同主版本,其余各行的两列都在同一个主版本内。这同样是从表里数出来的,不涉及任何”该选哪个”的建议。

这张表落在哪一层,以及 Installation is mandatory.

README 在安装这一节用 > [!IMPORTANT] 单独强调了一句 Installation is mandatory.——这个项目不接受”先不装、直接跑源码试试”的路子。

从源码装的四行原文是:

git clone --depth 1 https://github.com/hiyouga/LlamaFactory.git
cd LlamaFactory
pip install -e .
pip install -r requirements/metrics.txt

这四行和上面那张表的关系是:pip install -e . 负责的是包本身及其声明的依赖,而 Requirement 表是 README 用人话把版本区间列给你看的一层说明。两张 Requirement 表之外,仓库里还有两处地方也在管依赖:一是 requirements/ 目录下的 metrics.txtdeepspeed.txt 这类可选依赖清单,README 给了一次装两个的写法:

pip install -e . && pip install -r requirements/metrics.txt -r requirements/deepspeed.txt

二是 examples/requirements/,README 说特定功能的额外依赖放在那里。所以”依赖”这件事在这个仓库里至少分布在三处:README 的两张表、requirements/ 下的可选清单、examples/requirements/ 下的功能级清单。查版本问题时,只翻 README 那张表是不够的。

五条 Optional:每一条都绑着一类具体功能

依赖MinimumRecommend
CUDA11.612.2
deepspeed0.10.00.16.4
bitsandbytes0.39.00.43.1
vllm0.4.30.8.2
flash-attn2.5.62.7.2

Optional 这个词容易被误读成”锦上添花”。更准确的读法是:它们不是全局必需,但只要你要用对应的那类功能,对应的那一行就变成必需的了。 按 README 里 Features 那八条的措辞,能对上的挂钩关系是这样的:

  • bitsandbytes 对应的是 Scalable resources 那一条里的 QLoRA。README 在那条里写的是通过 AQLM / AWQ / GPTQ / LLM.int8 / HQQ / EETQ 实现 2/3/4/5/6/8-bit QLoRA。也就是说,你只要打算走量化微调这条线,这一行就得看。
  • vllm 对应的是 Faster inference 那一条:README 写明推理侧可以接 vLLM workerSGLang worker。如果你只训练、训完把权重导出去交给别的服务,这一行可以先放着。
  • flash-attn 对应的是 Practical tricks 那一条里的 FlashAttention-2。同一条里还列了 Unsloth、Liger Kernel、KTransformers、RoPE scaling、NEFTune、rsLoRA——README 的这一条只说明这些技巧被集成进来了,至于它们各自是否默认启用、怎么开,Features 那八条里没写,本文也不猜。
  • deepspeed 在仓库里有一份专门的 requirements/deepspeed.txt,也是 README 明确点名的两个可选依赖之一(另一个是 metrics)。
  • CUDA 这一行和上面四行的性质不太一样,它不是一个 pip 包,而是你机器上的那一层。README 另有一张 Hardware Requirement 表列了各方法在不同参数规模下的显存量级,但那张表在表头上方被 README 自己标了 * estimated(估算),不是实测占用,我们也没有跑过任何一次训练,所以这里不据此给”你的卡够不够”的结论。那张表我们另有一篇专门讲。

至于 Ascend NPU 这条线,README 的折叠块里给了一个和量化直接相关的具体提示:在配置里设 double_quantization: false,并给了参考示例 examples/train_qlora/qwen3_lora_sft_bnb_npu.yaml。这一条只在 NPU 场景下出现,用不上就跳过。

官方 Docker 镜像给出了一组具体版本,可以拿来对照

如果你想避开自己拼版本这件事,README 给的 Docker 路径是:

docker run -it --rm --gpus=all --ipc=host hiyouga/llamafactory:latest

README 原文写明这个镜像基于 Ubuntu 22.04 (x86_64)、CUDA 12.4、Python 3.11、PyTorch 2.6.0、Flash-attn 2.7.4。预构建镜像列表在 Docker Hub 的 tags 页;要自建的话,README 给的是 cd docker/docker-cuda/ 然后 docker compose up -d,仓库 docker/ 目录下按后端分了子目录。

把这组数字和上面两张表并排看,能读出几处对照:

  • Python 3.11、PyTorch 2.6.0 分别对应 Mandatory 表里 python 的下限和 torch 的 Recommend
  • 镜像里的 CUDA 是 12.4,而 Optional 表里 CUDA 的 Recommend12.2
  • 镜像里的 Flash-attn 是 2.7.4,而 Optional 表里 flash-attn 的 Recommend2.7.2

后两处是同一个依赖在仓库的两个位置上出现了不同的版本号:一处是 Optional 表里的 Recommend,一处是 README 写明的镜像内置版本。我们只如实指出这个差异,不推断哪个才是”该用的那个”,也不推断为什么两处不一样。对你的实际影响只有一条:如果你要照着镜像的版本组合去本地复刻,别把 README 表里的 Recommend 当成镜像里的实际版本。

另外,README 的折叠块里还给了 uv 的用法示例,用来建隔离环境:

uv run llamafactory-cli webui

Windows 侧单独记的两行

依赖装完之后,很多人卡住的下一步是模型下不动。README 给的处置是切下载源,环境变量的写法在两个平台上不一样,这里分开写:

切到 ModelScope Hub:

# Linux / macOS
export USE_MODELSCOPE_HUB=1
:: Windows
set USE_MODELSCOPE_HUB=1

然后把 model_name_or_path 填成 ModelScope 的 model ID,README 给的例子是 LLM-Research/Meta-Llama-3-8B-Instruct

切到 Modelers Hub 是同一套写法,变量换成 USE_OPENMIND_HUB=1,model ID 示例是 TeleAI/TeleChat-7B-pt。同样地,Linux/macOS 用 export,Windows 用 set

那么,该把版本锁在哪

这个问题官方没给答案,我们也不替它给。

两张 Requirement 表提供的是每个依赖各自的一条下限和一个推荐点,没有任何一处给出”这几个版本一起用”的组合矩阵。唯一一组被官方同时写出来的具体版本,就是 Docker 镜像那五个数字,而其中两个还高于表里对应的 Recommend。具体锁哪个版本取决于你的显卡、驱动、要不要用量化、要不要接推理 worker——这些条件官方没给通用值,我们也没有装过任何一个组合来验证。

真正能拿走的操作顺序倒是清楚的:

  1. 先确认 Python,两列都是 3.11 起,这一行不满足,后面都白搭;
  2. 再确认 torch / torchvision 这一对,以及机器上的 CUDA 层;
  3. 然后按你要用的功能勾 Optional:走量化看 bitsandbytes,要接推理服务看 vllm,要开 FlashAttention-2 看 flash-attn,要上 deepspeed 就顺手把 requirements/deepspeed.txt 一起装了;
  4. 不想拼版本就直接用官方镜像,代价是接受它固定的那组 Ubuntu / CUDA / Python / PyTorch / Flash-attn 组合。

最后提醒一句仓库里的名字问题:hiyouga/LlamaFactory 是当前的真实路径,但仓库内部新旧写法并存,src/llamafactory/launcher.py 的欢迎语里写的项目主页仍是带连字符的旧名 https://github.com/hiyouga/LLaMA-Factory,README 正文里两种拼法也都出现过。搜依赖报错、翻 issue 的时候两种拼法都试一遍,别因为拼写不同就以为搜到的是另一个项目。


本文依据 LlamaFactory 官方仓库(github.com/hiyouga/LlamaFactory)的 README、data/README.mdexamples/ 下的配置与 src/llamafactory/hparams/ 的参数定义整理,核对日 2026-08-09。本文内容为仓库源码与文档口径,我们没有安装、训练或部署过任何模型,文中显存数字均为官方标注的估算值(README 原文标 * estimated)而非实测占用。参数与默认值随版本变动,请以 llamafactory-cli train -h 的实际输出为准。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。