Linux 环境下部署 SakuraLLM
SakuraLLM 是一款适配轻小说和 GalGame 的日中翻译大语言模型。
该项目的使用文档主要面向 Windows 用户,然而,大多数 GPU 服务器都运行 Linux 系统。本文将简单介绍在 Unbutu 系统中运行 SakuraLLM 的过程。
本文使用的软硬件环境如下:
- 系统:Ubuntu 22.04
- 部署方式:llama-cpp-python
- CPU:Intel Xeon w7-3465X(分配 8 个虚拟核心)
- 内存:分配 40 GB
- 显卡:单卡 RTX 4090,CUDA 12.1
- Python 版本:3.12
- PyTorch 版本:2.3.0
下载代码和模型
克隆仓库:
git clone https://github.com/SakuraLLM/SakuraLLM.git
到 HuggingFace 下载需要的模型。链接可以在仓库的 README 中找到。
可以使用镜像站
hf-mirror.com
来加速下载
此处以 Qwen1.5-7B-Galtransl-v1.5
为例, HuggingFace Model card 给出了不同量化等级使用的显存大小,但在模型文件中只给出了 IQ4_KS
和 Q6_K
两个等级。根据实测, Q6_K
在 llama-cpp-python 部署方式下搭配 GalTransl 使用时显存占用小于 8 GB。
将模型下载到 SakuraLLM/models/
目录中即可。
准备环境
安装 Python、CUDA 环境和 PyTorch
略。Python 应当安装 3.10 或更新的版本,CUDA 建议使用 12.x 版本(11.x 也可以),PyTorch 选择最新版本即可。
安装 PyTorch 可以直接到 https://pytorch.org/ 选择需要的配置后复制命令进行安装,一般都不会出问题。
安装 llama-cpp-python
CUDA 12.x
到 https://github.com/abetlen/llama-cpp-python/releases 中寻找适配自己 CUDA 版本的 Release,然后在其中找到对应自己 Python 版本的项进行下载。
例如,我使用 CUDA 12.1,Python 版本是 3.12,本文撰稿时 llama-cpp-python 的最新版本是 0.2.83,那么就到 https://github.com/abetlen/llama-cpp-python/releases/tag/v0.2.83-cu121 中寻找带有
cp312
字段的 Linux 包下载,最终下载的包是 https://github.com/abetlen/llama-cpp-python/releases/download/v0.2.83-cu121/llama_cpp_python-0.2.83-cp312-cp312-linux_x86_64.whl
下载后使用 pip 进行安装
# 把包名替换成你下载的包名
pip install llama_cpp_python-0.2.83-cp312-cp312-linux_x86_64.whl
CUDA 11.x
到 https://jllllll.github.io/llama-cpp-python-cuBLAS-wheels/ 中寻找适合自己 CPU 指令集、CUDA 版本和 Python 版本的包进行下载。
在 Linux 中,可以执行
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
来查看系统中安装的 CPU 的型号,然后到网络上搜索该型号来获得支持的指令集列表。
下载后参照前文进行安装。
安装其他依赖
通过 llama-cpp-python 部署的其他依赖可通过仓库根目录的 requirements.llamacpp.txt
进行安装,但此处我们已经安装过 PyTorch 和 llama-cpp-python,就手动安装这些依赖。
pip install transformers scipy numpy fastapi[all] asyncio sse-starlette hypercorn coloredlogs dacite
运行
SakuraLLM 需要指定参数运行,此处我们可以编写一个 shell 脚本来简化运行流程。
python server.py \
--model_name_or_path ./models/GalTransl-7B-v1.5-Q6_K.gguf \ # 改成你下载的模型
--llama_cpp \
--use_gpu \
--trust_remote_code \
--listen 127.0.0.1:6006 \ # 改成你需要的IP和端口,如果不设置,则默认值是127.0.0.1:5000
--no-auth
完整参数表如下:
# 模型参数
# --model_name_or_path:模型本地路径或者huggingface仓库id。
# --model_version:模型版本,本仓库README表格中即可查看。可选范围:['0.1', '0.4', '0.5', '0.7', '0.8']
# --use_gptq_model:如果模型为gptq量化模型,则需加此项;如是hf全量模型,则不需要添加。
# --llama_cpp:如果模型为gguf全量模型或其量化模型(如Q4_K_M等),且使用llama-cpp-python后端进行推理,则需加此项。注意:此项与--use_gptq_model冲突,二者只可选一。
# --use_gpu:如果你添加了--llama_cpp使用llama-cpp-python推理,该参数可以控制模型是否载入到GPU进行推理。添加该参数默认将所有层全部载入GPU进行推理。
# --n_gpu_layers:如果你添加了--use_gpu使用GPU推理,该参数可以控制模型有多少层载入到GPU进行推理。如果添加--use_gpu参数而不添加该参数,会默认将所有层全部载入GPU进行推理。
# --trust_remote_code:是否允许执行外部命令(对于0.5,0.7,0.8版本模型需要加上这个参数,否则报错)。
# --llama:如果你使用的模型是llama家族的模型(对于0.1,0.4版本),则需要加入此命令。Legacy,即将删除。
# Server API参数
# --listen:指定要监听的IP和端口,格式为<IP>:<Port>,如127.0.0.1:5000。默认为127.0.0.1:5000
# --auth:使用认证,访问API需要提供账户和密码。
# --no-auth:不使用认证,如果将API暴露在公网可能会降低安全性。
# --log:设置日志等级。