上一节课程链接:中文llama3仿openai api实战-CSDN博客 ,本文是在上一节基础上继续操作
课程介绍
本文基于Chinese-LLaMA-Alpaca-3(https://github.com/ymcui/Chinese-LLaMA-Alpaca-3)项目,介绍如何通过搭建2个llama3私有化api和oneapi网关,实现大模型接口的高可用方案。
(1)上节课,我们进行了llama3-8b模型的本地化部署及仿openai api接口开放;
(2)本次课基于上节课的基础,进行llama3-8b本地化及接口的高可用;
学习知识:
(1)windows终端ssh服务器、windows版本客户端安装;
(2)windows作为客户端的cpu/gpu大模型的部署和应用:
(3)基于容器(docker)安装oneapi及配置,使用oneapi连接已部署的cpu/gpu版本大模型;
(4)基于oneapi学习高可用测试;
(5)一些常用指令操作;
实验环境
本文的基础环境如下
操作系统:ubuntu20.04
CUDA:12.2
英伟达显卡驱动版本:535.183.01
显卡型号:本实验用英伟达3090(全模型(未开量化)需要单张显存大于20GB的英伟达显卡;
**开量化之后的模型可以使用11GB显存的英伟达显卡,基本市面上大部分消费级显卡可以满足实验要求,
大家根据自己的显卡进行选择实验)
客户端演示环境: windows
实验环境准备
MacOS
命令行工具
如果您使用的是苹果操作系统,可以直接使用系统自带的终端
软件来连接服务器。具体操作步骤如下,首先按Command+空格
打开聚焦搜索
界面:
然后在聚焦搜索
框中,输入终端
两个字,如下图:
回车即可打开终端
:
大模型聊天客户端
我们使用ChatGPTNextWeb
工具测试我们的接口,如果您没有下载客户端,可以通过下面地址下载:
Mac:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/releases/download/v2.14.2/NextChat_2.14.2_universal.dmg
Windows10/11
命令行工具
在windows系统中,我们使用Git Bash
来连接服务器,下面是具体安装步骤,首先我们通过如下地址下载安装包:https://github.com/git-for-windows/git/releases/download/v2.46.0.windows.1/Git-2.46.0-64-bit.exe,下载好以后,双击安装包,出现如下画面:
可以将Only show new options
选项去掉,以看到更多的安装选项。点击Next
,将看到如下图:
继续点击Next
,出现如下图界面:
在上述界面中,一直点击Next
即可。最后点击install
:
大模型聊天客户端
我们使用ChatGPTNextWeb
工具测试我们的接口,如果您没有下载客户端,可以通过下面地址下载:
Windows:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/releases/download/v2.14.2/NextChat_2.14.2_x64-setup.exe
下载后,双击安装包运行,如果出现如下画面,点击更多信息
:
然后一直点击Next
即可安装。
开始实验
本文默认您在操作系统的用户名为:llm_course
,如果您使用的是其他用户名,请更改涉及到用户名的地址。基本的搭建架构图如下:
我们通过人工停掉llama3-cpu,保持llama3-gpu运行,来模拟节点故障。
安装Docker(如有可跳过)
#移除 Docker 相关的软件包和容器运行时
apt remove docker-ce docker-ce-cli containerd.io docker-compose-plugin docker docker-engine docker.io containerd runc
# 切换国内源
sed -i -r 's#http://(archive|security).ubuntu.com#https://mirrors.aliyun.com#g' /etc/apt/sources.list && apt update -y
### 安装docker
# 安装ca-certificates curl gnupg lsb-release
apt install ca-certificates curl gnupg lsb-release -y
#下载 Docker 的 GPG 密钥,并将其添加到 apt-key 中
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
# 为Docker 添加阿里源
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 更新系统的软件包
apt -y update
# 安装docker相关的包
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
兼容多端口启动
因为我们要基于一份代码,启动两个服务,我们需要在原有的代码中加入端口参数,打开下面文件:~/Chinese-LLaMA-Alpaca-3-3.0/scripts/oai_api_demo/openai_api_server.py
,做如下修改:
parser = argparse.ArgumentParser() # 找到改行代码,在改行代码下添加一行
parser.add_argument('--port', default=19327, type=int) # 新添加一行
# 找到这行代码
uvicorn.run(app, host="0.0.0.0", port=19327, workers=1, log_config=log_config)
# 改为如下内容
uvicorn.run(app, host="0.0.0.0", port=args.port, workers=1, log_config=log_config)
启动llama3 gpu和cpu版本
我们假设您已在上次课《中文llama3仿openai api实践》中搭建好了相应的环境。如果您还未搭建对应的环境,可以参考之前的课程文档。
启动gpu版本
conda activate chinese_llama_alpaca_3 # 激活虚拟环境
cd ~/Chinese-LLaMA-Alpaca-3-3.0/scripts/oai_api_demo/ # 进入脚本目录
python openai_api_server.py --gpus 0 --base_model /home/llm_course/.cache/modelscope/hub/ChineseAlpacaGroup/llama-3-chinese-8b-instruct-v3
默认情况下,程序将监听19327
端口。
启动cpu版本
conda activate chinese_llama_alpaca_3_cpu # 激活虚拟环境
cd ~/Chinese-LLaMA-Alpaca-3-3.0/scripts/oai_api_demo/ # 进入脚本目录
python openai_api_server.py --only_cpu --port 19328 --base_model /home/llm_course/.cache/modelscope/hub/ChineseAlpacaGroup/llama-3-chinese-8b-instruct-v3
部署oneapi
创建docker-compose.yam文件
mkdir -p ~/oneapi-compose
cd ~/oneapi-compose
touch docker-compose.yaml
在docker-compose.yaml
文件中添加如下内容(命令行中可以使用nano docker-compose.yaml
打开):
version: '3.8'
services:
oneapi:
image: m.daocloud.io/ghcr.io/songquanpeng/one-api:v0.6.7
container_name: oneapi
restart: always
ports:
- 3030:3000
networks:
- oneapi_llm_course
environment:
- TZ=Asia/Shanghai
volumes:
- ./data:/data
networks:
oneapi_llm_course:
启动服务
使用如下命令启动容器:docker compose up -d
修改默认密码
打开刚才部署的oneapi页面,通过ifconfig
命令可以查看您的服务器地址,我们这里假设您的服务器地址是:192.168.9.96
,在浏览器中打开:http://192.168.9.96:3030
,可以看到如下界面:
点击登录,当您第一次登录oneapi时,默认用户名是root
,默认密码是123456
,登录后需要立即修改密码:
我们这里将密码设置为:Llm_course
,您可以设置您自己认为安全的密码。
添加渠道
添加llama3-gpu渠道
再次点击渠道
菜单,可以看到如下页面:
添加llama3-cpu渠道
再次点击渠道
菜单,可以看到如下页面:
添加Token
我们需要添加一个Token
用于后续测试:
输入令牌详情:
复制刚才创建的Token
在后续高可用测试中将用到该Token
:
测试高可用
配置ChatGPTNextWeb
我们使用ChatGPTNextWeb
来进行测试,首先我们需要配置该软件。如下图:
设置渠道信息:
双渠道可用
我们输入同样的问题两次,可以观察回答一次慢,一次快,说明是第一次是调用了CPU渠道,第二次是调用了GPU渠道,您在测试时,有可能是第一次快,第一次慢,是正常的现象。
CPU可用GPU不可用
我们切换到GPU渠道的命令行运行界面:
我们按Ctrl+c
结束掉GPU渠道,如下所示:
我们再次回到ChatGPTNextWeb
窗口,发送问题,依然可以得到回答,只是回答得非常慢,说明CPU渠道正在提供服务,我们到oneapi的渠道页面,对gpu渠道进行测试,应该会得到如下信息:
GPU可用CPU不可用
我们回到GPU渠道的命令行界面,再次启动GPU渠道服务:
然后切换到CPU渠道命令行页面,按Ctrl+c
结束掉CPU渠道,如下所示:
我们再次回到ChatGPTNextWeb
窗口,发送问题,依然可以得到回答,这次的回答非常快,说明GPU渠道正在提供服务,我们到oneapi的渠道页面,对cpu渠道进行测试,应该会得到如下信息:
常见问题
oneapi怎么做到高可用
以火山引擎为例,我们可以在多台ECS(云服务器)中部署oneapi,然后设置一个域名映射到多个ip即可: