大模型部署文档

Chromy Chen

一、系统准备

例:x86-64,NVIDIA GPU,16G+ RAM,50G+ System SSD,Data Volume。
系统:Ubuntu20.04

1. 配置网络

尽可能确保系统能够顺利访问Github、HuggingFace。

推荐:Clash
clash-for-linux-master/.env文件内配置订阅链接 & 自定义UI访问密码(可选)

配置wget代理:

1
2
3
4
5
# /etc/wgetrc
https_proxy = http://ip:port
http_proxy = http://ip:port
ftp_proxy = http://ip:port
use_proxy = on

2. 更新系统

在开始安装之前,先更新系统软件包:

1
2
sudo apt update
sudo apt upgrade

3. 安装NVIDIA驱动程序(以driver 555 & CUDA 12.5为例)

完整教程:NVIDIA CUDA Installation Guide for Linux
  1. 确认gcc已安装

    1
    2
    apt -y install gcc
    gcc --version
  2. 卸载旧版本驱动或确认无冲突

    1
    2
    dpkg -l | grep nvidia
    apt-get --purge remove "*nvidia*"
  3. 安装驱动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    > Base Installer:

    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
    sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
    wget https://developer.download.nvidia.com/compute/cuda/12.5.1/local_installers/cuda-repo-ubuntu2004-12-5-local_12.5.1-555.42.06-1_amd64.deb
    sudo dpkg -i cuda-repo-ubuntu2004-12-5-local_12.5.1-555.42.06-1_amd64.deb
    sudo cp /var/cuda-repo-ubuntu2004-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/
    sudo apt-get update
    sudo apt-get -y install cuda-toolkit-12-5
    1
    2
    3
    > Driver Installer:

    sudo apt-get install -y cuda-drivers
  4. 重启系统以应用更改:

    1
    sudo reboot
  5. 确认驱动程序安装成功:

    1
    nvidia-smi

    如果安装成功,将看到GPU的相关信息。

4. 安装Miniconda

由于不同的大模型所需的环境各不相同,为了保护系统、避免冲突,可以使用Miniconda 灵活创建多个虚拟环境。

  1. 自定义conda安装路径

    1
    mkdir -p /path/to/your/conda #自定义conda安装位置,若系统盘小于50G将很快全部占满,强烈建议将conda安装在数据盘
  2. 下载conda安装脚本

    1
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /path/to/your/conda/miniconda.sh
  3. 安装conda

    1
    2
    bash /path/to/your/conda/miniconda.sh #按照脚本提示一步步完成安装
    rm -f /path/to/your/conda/miniconda.sh #安装完成后,安装脚本可删去
  4. 初始化bash环境

    1
    /path/to/your/conda/bin/conda init bash

确认环境存储目录与包存储目录都在设定的路径:

1
conda info

查看当前环境列表:

1
conda info -e

二、部署自带Web Demo的模型

以百川大模型Baichuan2 为例

选择模型为:例Baichuan2-13B-Chat

1. 创建新环境

首先确认要部署的大模型的python版本要求。例:3.12

1
conda create -n baichuan2 python=3.12 #虚拟环境名字自拟

2. 激活环境

进入该环境下。

1
conda activate baichuan2

3. 克隆仓库

模型不要存放在系统盘。

目录结构为:/yourpath/Baichuan2/Baichuan2-13B-Chat/

  1. 克隆Github仓库

    1
    2
    cd /yourpath/
    git clone [email protected]:baichuan-inc/Baichuan2.git
  2. 克隆模型仓库

    需要为git安装git-lfs 才可支持直接克隆大文件;也可手动wget大文件。可根据官方文档任选合适的git-lfs安装方法
    若模型在魔塔社区 有仓库,强烈建议直接拉取魔塔社区的仓库。
    1
    2
    3
    4
    5
    cd /yourpath/Baichuan2/
    # ModelScope
    git clone https://www.modelscope.cn/baichuan-inc/Baichuan2-13B-Chat.git
    # HuggingFace
    git clone https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat

4. 安装依赖

现在,/yourpath/Baichuan2/ 内应当有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.
├── Baichuan2-13B-Chat
│   ├── ...
│   ├── pytorch_model-00001-of-00003.bin
│   ├── pytorch_model-00002-of-00003.bin
│   ├── pytorch_model-00003-of-00003.bin
│   └── ...
├── cli_demo.py
├── fine-tune
│   └── ...
├── LICENSE
├── media
│   └── ...
├── OpenAI_api.py
├── README_EN.md
├── README.md
├── requirements.txt
└── web_demo.py
  1. 按照仓库要求安装需要的包

    1
    2
    # 其中未明确版本的包先参考 `4.2.解决可能出现的报错` 的稳定包版本👇
    pip install -r requirements.txt
  2. 解决可能出现的报错

    已知百川2的requirements对版本要求不严格,安装的包版本过新可能导致报错,
    如下是第三方包的稳定版本

    1
    2
    3
    4
    5
    6
       pip install triton==2.0.0
    pip install torch==2.0.1
    pip install transformers==4.33.3
    pip install xFormers==0.0.20
    pip install bitsandbytes==0.41.3.post2
    pip install scipy==1.11.4

    不同的大模型部署时可能出现的报错也不同,需根据log具体分析。
    多数启动时的报错都是缺少依赖导致的,还有少数是因为包版本不兼容。

5. 启动模型

  1. 命令行工具方式

    本命令行工具是为 Chat 场景设计,不支持使用该工具调用 Base 模型。

    首先需修改cli_demo文件内的模型路径:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # cli_demo.py
    ...
    def init_model():
    print("init model ...")
    model = AutoModelForCausalLM.from_pretrained(
    "baichuan-inc/Baichuan2-13B-Chat", # 将这里改为实际本地路径
    torch_dtype=torch.float16,
    device_map="auto",
    trust_remote_code=True
    )
    ...
    # 其余位置同理

    启动模型:

    1
    python cli_demo.py
  2. 网页 demo 方式
    依靠 streamlit 运行以下命令,会在本地启动一个 web 服务,浏览器可直接访问log中给出的地址。
    本网页 demo 工具是为 Chat 场景设计,不支持使用该工具调用 Base 模型。

    首先需修改cli_demo文件内的模型路径:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # web_demo.py
    ...
    def init_model():
    model = AutoModelForCausalLM.from_pretrained(
    "baichuan-inc/Baichuan2-13B-Chat", # 将这里改为实际本地路径
    torch_dtype=torch.float16,
    device_map="auto",
    trust_remote_code=True
    )
    ...
    # 其余位置同理

    启动模型:

    1
    streamlit run web_demo.py

三、部署Ollama & Open-WebUI

通过部署Ollama与Open-WebUI,运行并快速切换多个大模型(例:llama3 Llama3-70B-Chinese-Chat-GGUF-4bit )。

1. 创建新环境

Open-WebUI的pip install安装方式要求Python版本>=3.11,
因此假设新环境安装Python版本3.12。

1
conda create -n ollama python=3.12 #虚拟环境名字自拟

2. 激活环境

进入该环境下。

1
conda activate ollama

3. 部署Ollama

Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。
以下是其主要特点和功能概述:

  • 简化部署:Ollama 目标在于简化在 Docker 容器中部署大型语言模型的过程,使得非专业用户也能方便地管理和运行这些复杂的模型。
  • 轻量级与可扩展:作为轻量级框架,Ollama 保持了较小的资源占用,同时具备良好的可扩展性,允许用户根据需要调整配置以适应不同规模的项目和硬件条件。
  • API支持:提供了一个简洁的 API,使得开发者能够轻松创建、运行和管理大型语言模型实例,降低了与模型交互的技术门槛。
  • 预构建模型库:包含一系列预先训练好的大型语言模型,用户可以直接选用这些模型应用于自己的应用程序,无需从头训练或自行寻找模型源。
  • 模型导入与定制:
    从 GGUF 导入:支持从特定平台(如GGUF,假设这是一个模型托管平台)导入已有的大型语言模型。
    从 PyTorch 或 Safetensors 导入:兼容这两种深度学习框架,允许用户将基于这些框架训练的模型集成到 Ollama 中。
    自定义提示:允许用户为模型添加或修改提示(prompt engineering),以引导模型生成特定类型或风格的文本输出。
  • 跨平台支持:提供针对 macOS、Windows(预览版)、Linux 以及 Docker 的安装指南,确保用户能在多种操作系统环境下顺利部署和使用 Ollama。
  • 命令行工具与环境变量:
    命令行启动:通过命令 ollama serve 或其别名 start 可以启动 Ollama 服务。
    环境变量配置:如 OLLAMA_HOST,用于指定服务绑定的主机地址和端口,默认值为 127.0.0.1:11434,用户可以根据需要进行修改。
  1. 安装Ollama:

    1
    curl -fsSL https://ollama.com/install.sh | sh
  2. 自定义Ollama模型存储路径:

    1
    2
    # ollama默认将模型存储在/usr/share/ollama/.ollama/models/下,强烈建议将模型存储路径设置在数据盘
    export OLLAMA_MODELS=/yourpath/ollama/models # 自定义
  3. 启动Ollama:

    1
    2
    3
    4
    5
    ollama serve
    # 后台运行:
    ollama serve &
    # 确认服务已启动:
    ss -ntlp | grep ollama
  4. Ollama常用命令:

    1
    2
    3
    4
    # 查看模型列表
    ollama list
    # 查看正在运行的模型
    ollama ps

4. 部署Open-WebUI

Open WebUI (以前称为Ollama WebUI)是一款面向大型语言模型(LLMs)的用户友好型Web界面,支持Ollama和兼容OpenAI的API运行。通过一个直观的界面,它为用户提供了一种便捷的方式,与语言模型进行交互、训练和管理。
其主要特点有:

  • 用户界面:仿照 ChatGPT 设计的聊天界面,直观易用。
  • 响应设计:无论是桌面还是移动设备,都能提供流畅的体验。
  • 高效响应:快速且响应敏捷的性能。
  • 简易设置:支持通过 Docker 或 Kubernetes 进行无忧安装。
  • 代码语法高亮:改善代码的可读性。
  • Markdown 和 LaTeX 支持:丰富的交互体验。
  • 集成文档互动:支持从聊天中直接加载文档或文件。
  • Web 浏览功能:在聊天中直接集成网页内容。
  1. 安装Open-WebUI:
    Open-WebUI支持多种部署方式。
    根据官方文档 ,Open-WebUI推荐使用Docker部署,也支持k8s、Helm部署,
    pip安装(Beta阶段)、Github仓库部署、编译安装以及Docker Compose。
    在网络通畅的情况下,实测pip install方式省心省力,运行正常。

    1
    pip install open-webui
  2. 启动Open-WebUI:

    1
    2
    3
    4
    # 建议首次启动不要后台运行,便于查看log:
    open-webui serve
    # 后台静默运行:
    nohup open-webui serve >/dev/null 2>&1 &

    浏览器打开 ip:8080 即可访问。

5. 添加大模型

Ollama支持直接从官方仓库拉取模型(类似拉取Docker镜像),也支持模型导入与定制。

  1. 直接拉取模型:
    例:llama3:latest。

    1
    2
    # 请先确认Ollama模型存储路径!若未配置成功,Ollama将会存储模型到默认位置。
    ollama pull llama3

    拉取成功后,Open-WebUI将会自动检测到该模型,选择新对话——>选择该模型,此时已直接可用。

  2. 从GGUF文件导入:
    例:shenzhi-wang/Llama3-70B-Chinese-Chat-GGUF-4bit

    1
    2
    3
    git clone https://huggingface.co/shenzhi-wang/Llama3-70B-Chinese-Chat-GGUF-4bit
    # or just:
    wget https://huggingface.co/shenzhi-wang/Llama3-70B-Chinese-Chat-GGUF-4bit/resolve/main/Llama3-70B-Chinese-Chat-q4_0.gguf?download=true

    创建ModelFile文件(文件名自拟):

    1
    2
    # ./ModelFile
    FROM /yourpath/Llama3-70B-Chinese-Chat-GGUF-4bit/Llama3-70B-Chinese-Chat-q4_0.gguf

    将Llama3-70B-Chinese-Chat-q4_0.gguf导入Ollama

    1
    ollama create Llama3-70B-Chinese-Chat-GGUF-4bit --file ./ModelFile

    等待时间可能很长。完成后,Open-WebUI将会自动检测到该模型,选择新对话——>选择该模型,此时已直接可用。

  3. 从Safetensors文件导入:
    如果导入的模型是以下架构之一,则可以通过 Modelfile 直接导入 Ollama:

    • LlamaForCausalLM
    • MistralForCausalLM
    • GemmaForCausalLM
    1
    2
    # ./ModelFile
    FROM /path/to/safetensors/directory