Skip to content

Python部署教程

Kuriko Moe edited this page Jun 16, 2024 · 7 revisions

Sakura模型部署教程-Python部署教程

Sakura模型要求GPU至少有12G显存,显存不够的话可以尝试使用llama.cpp将模型部分或全部卸载到CPU/内存上运行。

配置Python环境

考虑到大部分用户使用的是Windows系统,本教程将主要从Windows系统的视角提供部署教程。

建议选择预打包的Windows环境,方便部署。如果您具备一定的Python基础,也可以尝试手动安装。

Linux用户请参考手动安装一章自行配置。

打包好的免Python环境的Sakura API程序包

  1. releases页面根据你的CUDA版本下载对应的压缩包(记得是分卷压缩的两个文件.001和.002)并解压缩到文件夹。

  2. 解压缩后,你现在应该有一个叫做 sakura.exe 的程序和一个文件夹。这个sakura.exe程序的使用与server.py基本相同。假设要使用llama-cpp-python后端加载一个模型并启动Sakura API,只需要将server.py的指令中的python server.py改成./server.exe即可,如下面所示:

./server.exe --model_name_or_path sakura-13b-lnovel-v0.9.0pre2-Q4_K_M.gguf --trust_remote_code --no-auth --log info --model_version 0.9 --llama_cpp --use_gpu

手动安装

Transformers AutoGPTQ后端

  1. 安装 Python。要求安装 Python3.10 或以上版本,推荐 Python3.10。

  2. 安装 torch。打开终端,输入指令nvcc -V ,并查看此处release后面显示的版本。

    Untitled

    如果你的CUDA版本是12.0以上,则运行以下命令:

    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

    如果你的CUDA版本是11.x,则运行以下命令:

    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
  3. 安装 bitsandbytes 和 auto-gptq。

    • bitsandbytes:
    pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.40.2-py3-none-win_amd64.whl
    • auto-gptq:根据你的CUDA版本和Python版本进行安装,这里使用Python3.10作为例子:
    # CUDA 11.7(11.7及以前)
    pip install https://github.com/PanQiWei/AutoGPTQ/releases/download/v0.4.2/auto_gptq-0.4.2+cu117-cp310-cp310-win_amd64.whl
    # CUDA 11.8(11.8及以后)
    pip install https://github.com/PanQiWei/AutoGPTQ/releases/download/v0.4.2/auto_gptq-0.4.2+cu118-cp310-cp310-win_amd64.whl

    如果出现CUDA版本问题,可先尝试将CudaToolkit更新/降级至11.7/11.8版本

  4. 安装其他依赖。

    运行以下命令:

    pip3 install transformers==4.33.2 sentencepiece xformers

llama-cpp-python后端

  1. 安装 Python。要求安装 Python3.10 或以上版本,推荐 Python3.10。

  2. 安装 llama-cpp-python库。

python -m pip install llama-cpp-python --prefer-binary --extra-index-url=https://jllllll.github.io/llama-cpp-python-cuBLAS-wheels/AVX2/cu117

指令中的AVX2cu117需要根据自己的硬件情况进行调整。CPU支持到AVX、AVX2或AVX512的,可以将AVX2分别替换成AVXAVX2AVX512。不存在CUDA运行环境(纯CPU)、存在CUDA运行环境11.7、11.8、12.1、12.2的,可以将cu117分别替换成CPUcu117cu118cu121cu122

例如,电脑的CPU支持AVX2,且存在12.1版本的CUDA环境,应使用如下指令进行安装:

python -m pip install llama-cpp-python --prefer-binary --extra-index-url=https://jllllll.github.io/llama-cpp-python-cuBLAS-wheels/AVX2/cu121

常见问题

llama 模式启动后提示不支持 qwen2,报错为:unknown model architecture: 'qwen2'

相关 issue: #92 #71

原因:旧版本 llama_cpp_python 不支持 qwen2,需要更新。

# 卸载原有旧版本 llama-cpp-python
pip uninstall llama-cpp-python

# 安装新版,cuda-version 为 cu121、cu122、cu123、cu124,python 版本仅支持 3.10、3.11、3.12
pip install llama-cpp-python
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/

#假设为 cuda 12.1
pip install llama-cpp-python
--extra-index-url https://abetlen.github.io/llama-cpp-python/whl/cu121

模型下载:

发布时间-底模-参数量-版本 Transformers模型 GGUF量化模型 GPTQ 8bit量化 GPTQ 4bit量化 GPTQ 3bit量化 AWQ量化
20231026-Baichuan2 13B v0.8 🤗 Sakura-13B-LNovel-v0.8 🤗 Sakura-13B-LNovel-v0_8-GGUF 🤗 Sakura-13B-LNovel-v0_8-8bit 🤗 Sakura-13B-LNovel-v0_8-4bit 🤗 Sakura-13B-LNovel-v0_8-3bit 🤗 Sakura-13B-LNovel-v0_8-AWQ
20240111-Qwen-14B-v0.9 🤗 Sakura-13B-LNovel-v0.9 🤗 Sakura-13B-LNovel-v0.9b-GGUF - - - -
20240116-Qwen-7B-v0.9 - 🤗 Sakura-7B-LNovel-v0.9-GGUF - - - -
20240213-Qwen1.5-14B-v0.9 🤗 Sakura-14B-Qwen2beta-v0.9 🤗 Sakura-14B-Qwen2beta-v0.9-GGUF - - -
20240214-Qwen1.5-1.8B-v0.9.1 🤗 Sakura-1B8-Qwen2beta-v0.9.1 🤗 Sakura-1B8-Qwen2beta-v0.9.1 - - -
20240303-Qwen1.5-14B-v0.10pre0 🤗 Sakura-14B-Qwen2beta-v0.10pre0 🤗 Sakura-14B-Qwen2beta-v0.10pre0-GGUF - - - -

翻译Epub/Txt

  1. 如果你想直接本地翻译轻小说Epub或文本:

    执行以下命令克隆项目仓库

    git clone https://github.com/SakuraLLM/Sakura-13B-Galgame.git

    克隆后进入该目录,将你想翻译的Epub文件或文本文件放入仓库根目录中,并重命名为novel.epub(或novel.txt),如果你想翻译Epub文件,还需要创建一个文件夹output。

    Untitled

    完成后打开终端,执行以下命令(注意系统):

    • 如果你想翻译Epub文件:

      # 参数说明:
      
      # 模型参数:
      # --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,即将删除。
      
      # 翻译参数:
      # --text_length:文本分块的最大单块文字数量。
      # --data_path:日文原文Epub小说文件路径。
      # --data_folder:批量翻译Epub小说时,小说所在的文件夹路径
      # --output_folder:翻译后的Epub文件输出路径(注意是文件夹路径)。
      # --translate_title:是否翻译标题。
      
      # 以下为一个例子
      # Linux的例子
      python translate_epub.py \
          --model_name_or_path SakuraLLM/Sakura-13B-LNovel-v0_8-4bit \
          --trust_remote_code \
          --model_version 0.8 \
          --use_gptq_model \
          --text_length 512 \
          --data_path novel.epub \
          --output_folder output
      # Windows的例子
      python translate_epub.py --model_name_or_path SakuraLLM/Sakura-13B-LNovel-v0_8-4bit --trust_remote_code --model_version 0.8 --use_gptq_model --text_length 512 --data_path novel.epub --output_folder output
    • 如果你想翻译文本文件:

      # 参数说明:
      
      # 模型参数:
      # --model_name_or_path:模型本地路径或者huggingface仓库id。
      # --model_version:模型版本,本仓库README表格中即可查看。可选范围:['0.1', '0.4', '0.5', '0.7', '0.8']
      # --use_gptq_model:如果模型为gptq量化模型,则需加此项;如是全量模型,则不需要添加。
      # --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,即将删除。
      
      # 翻译参数:
      # --text_length:文本分块的最大单块文字数量。每块文本量将最大不超过text_length。
      # --compare_text:是否需要输出中日对照文本,如需要,则需加此项;如不需要则不要添加。
      # --data_path:日文原文文件路径
      # --output_path:翻译(或对照)文本输出文件路径
      
      # 以下为一个例子
      # Linux的例子
      python translate_novel.py \
          --model_name_or_path SakuraLLM/Sakura-13B-LNovel-v0_8-4bit \
          --trust_remote_code \
          --model_version 0.8 \
          --use_gptq_model \
          --text_length 512 \
          --data_path novel.txt \
          --output_path novel_translated.txt
      # Windows的例子
      python translate_novel.py --model_name_or_path SakuraLLM/Sakura-13B-LNovel-v0_8-4bit --trust_remote_code --model_version 0.8 --use_gptq_model --text_length 512 --data_path novel.txt --output_path novel_translated.txt

    如果你所在地区无法连接huggingface.co,可以从modelscope仓库拉取模型并存到本地,并将上文命令里的--model_name_or_path的值改为本地模型文件夹的路径。

运行API后端

  1. 克隆Github仓库,并进入仓库目录

    git clone https://github.com/SakuraLLM/Sakura-13B-Galgame
  2. 安装所需的环境(Windows):先按照上文《安装环境(Windows)》安装完成后,执行下面的命令:

    pip install scipy numpy fastapi[all] hypercorn coloredlogs dacite asyncio sse-starlette
  3. 安装所需的环境(Linux):可以直接执行下面的指令。需要上文中提到的cuda版本,如果是12.x则无需操作,如果是11.x请在requirements.txt里将第一行注释掉,并将第二行取消注释。

    pip install -r requirements.txt
  4. 运行程序

    # 参数解释:
    
    # 模型参数
    # --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:设置日志等级。
    
    # 下面为一个使用AutoGPTQ v0.8-4bit模型,同时不使用认证,监听127.0.0.1:5000的命令示例。
    # 这里模型默认从huggingface拉取,如果你已经将模型下载至本地,可以将--model_name_or_path参数的值指定为本地目录。
    python server.py --model_name_or_path SakuraLLM/Sakura-13B-LNovel-v0_8-4bit --use_gptq_model --model_version 0.8 --trust_remote_code --no-auth
  5. 打开轻小说翻译机器人,将你的API后端链接输入到下图的输入框中。举个例子,假设Api监听的是5000端口,那么链接就是 http://127.0.0.1:5000/api/v1/generateUntitled

  6. 点击“测试Sakura”可以进行简单的测试。如果没有问题,则可以上传EPUB/TXT文件并点击“更新Sakura”开始翻译。

  7. 将API映射到公网:使用CF Tunnel将API监听的端口映射到CF,可以参考这个教程或者这个教程

可能遇到的问题

  1. ModuleNotFoundError: No module named ‘sampler_hijack’

    少下了一个文件sampler_hijack.py,请完整克隆仓库。

  2. 出现类似SSLError/ConnectionError/MaxRetryError等连接不上huggingface.co的报错

    中国大陆网络问题导致的,可重试或使用魔法;或者检查model_name_or_path参数有没有写错。