使用LLaMA Factory训练模型指北(一、环境安装)
本文适合于没有机器学习前置知识,但具有一定微积分和线性代数理解的读者,如果没有相应知识,文章中会给出稍许补充。
1.准备工作
- 支持 CUDA 的 GPU ,如果没有,可以自行联系远程服务器
- Linux bash 环境,如果没有,可以使用虚拟机构建
- 能够连接到 https://huggingface.co/ 的网络,用于下载模型,如果没有,需要用其他方法下载。能够连接到 https://github.com 的网络,用于下载 github 仓库,如果没有,找个会的人教你,要么就去网上搜
- 一些基础的 linux 操作方法,文章中会提及部分
- 本文基于 Ubuntu22.04LTS
2.使用 Anaconda 管理包
2.1 安装 Anaconda
Anaconda 环境相较于传统的 pip 包管理来说,可以方便快捷地切换不同环境,如果把 pip 比作把所有的文件都摊到桌面上的笨手笨脚管理员, Anaconda 就像把文件归类放进不同文件夹里的爱干净管理员,这样的文件夹在 Anaconda 中称为“环境”。运行不同的程序所需的依赖不同,有时候会出现冲突,同时需要某个包的不同版本,就可以通过设置不同环境,基于某个环境运行不同程序。
安装 Anaconda 依赖代码如下:
apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6
安装 Anaconda 安装器
# 先运行这行
curl -O https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
# 接着是这行
bash ~/Downloads/Anaconda3-2023.09-0-Linux-x86_64.sh
你也可以在这里看菜鸟教程给出的不同平台详细的安装方法,也可以去这里看官网给出的安装方法。
2.2 创建 Anaconda 环境,安装 CUDA 和 PyTorch
用 Anaconda 新建一个名为 LLaMA 的环境,使用 python3.11
conda create -n LLaMA python=3.11
# 中间会询问你是否 proceed(继续),输入y然后回车即可
激活这个环境,注意:在每次重新登陆的时候,必须输入以下命令激活这个环境,因为你在这个环境中安装了依赖项,否则无法找到依赖项
conda activate LLaMA
# 成功后应该在命令行的用户前显示'(LLaMA)'字样

然后我们来安装 CUDA,但是,什么是 CUDA 呢? CUDA 是 NVIDIA 推出的一种软硬件集成技术,我们都知道显卡通常用于进行图像处理,比如电脑上运行的大型3D游戏,它的流畅程度和帧数都很吃 GPU 的水平,GPU 的特点是可以处理大型并法运算,而这种优势和在机器学习等领域非常有用。CUDA 能让我们利用这种 GPU 的这种特点来加速计算,但是 AMD 的显卡不支持这种技术,所以你需要 NVIDIA 的GPU。
接下来我们来安装 CUDA ,首先查看你的显卡支持的 CUDA 版本,在 bash 命令行输入这行代码
nvidia-smi
当前的 CUDA 版本,显示在表格最上面的一行。直接前往NVIDIA官网选择对应操作系统、架构等下载对应 CUDA 就好。
在安装 PyTorch 之前先简单介绍一下,它是一个 Python 程序库,有助于构建深度学习项目。它非常灵活,并允许我们使用深度学习领域惯用的 Python 来表示深度学习模型。它非常便捷,在刚刚创立的时候就吸引了许多使用者,并且在第 1 次发布之后的几年里,它已经成为应用程序中使用最广泛的深度学习工具之一,另一个比较出名的工具是 Tensorflow,但是更多被应用于生产中,在这里我们不作介绍。
直接来到PyTorch官网选择正确版本并下载。
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
3.安装 LLaMA-Factory
3.1 下载LLaMA-Facroty仓库
为什么选择 LLaMA-Factory ? 因为它支持目前多种模型,集成了许多方法,支持多种精度,并且有非常易用的 webui 界面,对新手非常友好。在 github 上项目地址
运行以下代码来安装LLaMA-Factory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
可选的额外依赖项:torch、torch-npu、metrics、deepspeed、bitsandbytes、hqq、eetq、gptq、awq、aqlm、vllm、galore、badam、qwen、modelscope、quality
3.2 通过远程机器访问 webui
在本地,我们使用这行代码
llamafactory-cli webui
首先找到LLaMA-Factory/src/llamafactory/webui
这个目录,打开interface.py
这个文件,将 run_web_ui() 和 run_web_demo() 函数中各自最后一行的launch()
函数修改成这样
def run_web_ui() -> None:
gradio_share = os.environ.get("GRADIO_SHARE", "0").lower() in ["true", "1"]
server_name = os.environ.get("GRADIO_SERVER_NAME", "0.0.0.0")
create_ui().queue().launch(share=True, server_name=server_name, inbrowser=True,server_port=8887)
def run_web_demo() -> None:
gradio_share = os.environ.get("GRADIO_SHARE", "0").lower() in ["true", "1"]
server_name = os.environ.get("GRADIO_SERVER_NAME", "0.0.0.0")
client_loop: send disconnect: Broken pipeue, server_name=server_name, inbrowser=True,server_port=8887)
注意:share=True
表示允许共享,server_port
规定了开启的端口,在这里规定为8887,接着就可以通过远程界面访问 webui 了,记得将0.0.0.0替换成远程主机的ip地址,如果无法连接,查看你远程主机的防火墙配置。
3.3 通过 tmux 这一终端复用器解决 ssh 连接的问题
当你通过 ssh 连接远程主机运行某种任务的时候,可能会出现一些让人非常红温的问题: ssh 为了保证安全性,若几分钟没有操作就会断开连接,这样一来我们跑在远程主机上的任务就莫名其妙结束了,而且我们也不太想为了一个耗费很长时间的学习任务一直开着我们的电脑,或者一直开着我们的 ssh 连接,如果中间网莫名其妙断了几秒,我肯定相当沮丧,还得重新开始这个任务,白白浪费时间,我们引入 tmux 来解决这个问题。
像 tmux 这类的终端多路复用器可以允许我们基于面板和标签分割出多个终端窗口,这样便可以同时与多个 shell 会话进行交互,终端多路复用使我们可以分离当前终端会话并在将来重新连接。让你的远程工作非常舒服,避免了 nohup 和其他类似技巧的使用。
tmux 的安装命令
sudo apt-get install tmux
启动tmux就直接在终端执行tmux
就可以。
在这里我只介绍一些简单的tmux命令,你可以在这里看到比较详细的操作,还可以看这个和它配套的视频学习其他的有关计算机操作的相关知识。
在ssh连接成功后,键入tmux
你会看到一个长得和终端差不多的界面,你可以在里面干任何你正常连接ssh之后做的事情,然后,如果你想把某个操作放在后台运行,键入Ctrl+b
,再键入d
,你就能看到你原来的ssh连接刚刚连上的样子,原来的窗口去哪里了呢?键入tmux ls
指令查看目前所有窗口,第一个窗口一般表示为 0 ,输入tmux attach -t 0
来重新进入后台的窗口,立即开始你的工作。
它的好处是你可以不用管ssh连接状态,任务会在 tmux 后台窗口里继续运行,你想干别的什么都可以,你还可以创建更多的 tmux 窗口,进行工作,然后退出ssh连接,无论你什么时候重新连接,那些窗口都保留在你退出后继续运行的样子,你可以快速恢复工作流。