llm接口高可用工程实践(本地服务器) #177

Open
opened 2024-10-11 10:55:46 +08:00 by 12390900721cs · 0 comments
  1. 部署Chinese-LLaMA-Alpaca-3项目;
  2. 搭建2个llama3私有化api和oneapi网关;
  3. 基于oneapi实现大模型接口的高可用方案。

实验环境准备

利用Visual Studio远程连接服务器终端

ssh username@your_service_IP

然后打开终端即可。

接口测试工具下载

这里我们还是用ChatGPTNextWeb工具测试我们的接口,通过下面的地址下载:

ChatGPTNextWeb

安装Docker(有的话可以跳过)

#移除 Docker 相关的软件包和容器运行时
apt-get 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-get update

### 安装docker
# 安装ca-certificates curl gnupg lsb-release
apt-get install ca-certificates curl gnupg lsb-release
#下载 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-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

多端口启动大模型

代码兼容多端口启动大模型

因为要基于一份代码启动两个服务,我们需要在原有代码中加入端口参数。打开文件,作出修改:

~/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)
# 改为如下内容(主要是可以自己设置端口,这里默认值还是19327)
uvicorn.run(app, host="0.0.0.0", port=args.port, workers=1, log_config=log_config)

启动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/ganjialing/.cache/modelscope/hub/ChineseAlpacaGroup/llama-3-chinese-8b-instruct-v3

不知道为什么这里报错了啊,之前的实验都可以的,先跳过这个吧

启动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/ganjialing/.cache/modelscope/hub/ChineseAlpacaGroup/llama-3-chinese-8b-instruct-v3

部署OneAPI

创建docker-compose.yam文件并启动服务

创建docker-compose.yml

mkdir -p ~/oneapi-compose
cd ~/oneapi-compose
touch 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页面

前面的.yml文件设置了端口号为3030,故如果是本地要进入刚刚部署的OneAPI页面则为localhost+3030;如果是使用服务器部署的则为服务器ip+3030。

配置llama3-gpu

配置如下:

注意:他这里本来应该叫llama-3-chinese,主要这里是高可用测试,在后面用百度api配置的文心一言那里不能改模型的名字,只能叫ERNIE-Speed-128K,而我们的自定义模型可以随便取自己的名字,所以这里我们也假装叫ERNIE-Speed-128K。

测试一下可通:

配置llama3-gpu

这里我gpu的不知怎么跑不起来的,我试试就拿个别的模型(ERNIE-Speed-128K)假装是gpu版本看行不,反正是测试高可用嘛。

添加Token

我们需要添加一个Token用于后续测试:

注意这里与原讲义有所不同,我们不叫llama-3-chinese。

然后复制令牌,用于后续测试。

测试高可用

配置ChatGPTNextWeb

这里填入OneAPI的接口地址,这也是用OneAPI进行接口分发以及高可用的体现。

之前得到的Token的Key也输入下;

这里模型名和模型也要改。

测试可行性

这里禁用百度文心模型,只用CPU版本,看看我的CPU版本可用不,可用的话实验才能顺利进行。

发现是可用的,只是跑得慢。

双渠道高可用测试

这里解开禁用。

再问同一个问题,快速问两次。

真的是一快一慢,还真是那么回事。

GPU可用CPU不可用以及CPU可用GPU可用测试

由于我是用的文心的API模拟GPU,所以这里其实在我测试可行性的时候就已经做过这个工作了。这里试一下关CPU只用GPU的用法。

关掉CPU,假装GPU在跑。

出来的很快。

这里再试一下关GPU只用CPU的用法。

可以看到半天才蹦出来一个字。

1. 部署<font style="color:black;">Chinese-LLaMA-Alpaca-3项目;</font> 2. <font style="color:black;">搭建2个llama3私有化api和oneapi网关;</font> 3. <font style="color:black;">基于oneapi实现大模型接口的高可用方案。</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728545579433-97ea3002-e146-42fe-8b90-3f0bf5a120f0.png) ## <font style="color:black;">实验环境准备</font> ### 利用Visual Studio远程连接服务器终端 ```plain ssh username@your_service_IP ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728545168763-34dc299c-ef95-4a82-9b6f-84695f125e86.png) ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728545197245-54763688-d0e4-4475-8314-51bbe447ab83.png) 然后打开终端即可。 ### <font style="color:black;">接口测试工具下载</font> <font style="color:black;">这里我们还是用ChatGPTNextWeb工具测试我们的接口,通过下面的地址下载:</font> [ChatGPTNextWeb](自己去课件里找) ### 安装Docker(有的话可以跳过) ```plain #移除 Docker 相关的软件包和容器运行时 apt-get 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-get update ### 安装docker # 安装ca-certificates curl gnupg lsb-release apt-get install ca-certificates curl gnupg lsb-release #下载 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-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` ## 多端口启动大模型 ### 代码兼容多端口启动大模型 因为要基于一份代码启动两个服务,我们需要在原有代码中加入端口参数。打开文件,作出修改: ```plain ~/Chinese-LLaMA-Alpaca-3-3.0/scripts/oai_api_demo/openai_api_server.py ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728546863516-ab30e2fb-4e0d-46a1-a02d-683784d2b1f2.png) ```plain 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) # 改为如下内容(主要是可以自己设置端口,这里默认值还是19327) uvicorn.run(app, host="0.0.0.0", port=args.port, workers=1, log_config=log_config) ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728546952414-2a793aee-dbb4-411b-89c7-4311a6c9e1ca.png) ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728546929977-7e940fa7-168c-40e6-afc6-ee373a4a3eb7.png) ### 启动GPU版本大模型 ```plain 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/ganjialing/.cache/modelscope/hub/ChineseAlpacaGroup/llama-3-chinese-8b-instruct-v3 ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728547703870-dd5d79ac-e34c-4a2b-b06e-436789dfce6b.png) ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728549595011-aaadcda3-592f-4eaf-808a-156050082412.png) # <font style="color:#DF2A3F;">不知道为什么这里报错了啊,之前的实验都可以的,先跳过这个吧</font> ### 启动CPU版本大模型 ```plain 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/ganjialing/.cache/modelscope/hub/ChineseAlpacaGroup/llama-3-chinese-8b-instruct-v3 ``` # ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728551289703-3c1eff0a-41ac-41bd-8d7a-e98449a364aa.png) ## 部署OneAPI ### 创建docker-compose.yam文件并启动服务 #### 创建docker-compose.yml ```plain mkdir -p ~/oneapi-compose cd ~/oneapi-compose touch docker-compose.yaml ``` #### 添加内容 ```plain 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: ``` #### 启动服务 ```plain docker compose up -d ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728551687167-5a3b6df9-f800-4e12-9c23-572c4243882e.png) ### 进入OneAPI页面 前面的.yml文件设置了端口号为3030,故如果是本地要进入刚刚部署的OneAPI页面则为localhost+3030;如果是使用服务器部署的则为服务器ip+3030。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728551705354-da47ac07-4be2-4bd8-afe6-43697d7eda47.png) ### 配置llama3-gpu 配置如下: ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728553011962-3bb6ee6b-905f-4fac-8dfd-1c6a1c7a89cc.png) #### <font style="color:#DF2A3F;">注意:他这里本来应该叫llama-3-chinese,主要这里是高可用测试,在后面用百度api配置的文心一言那里不能改模型的名字,只能叫ERNIE-Speed-128K,而我们的自定义模型可以随便取自己的名字,所以这里我们也假装叫</font><font style="color:#DF2A3F;background-color:rgb(230, 240, 255);">ERNIE-Speed-128K。</font> 测试一下可通: ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728552992251-c7d9e9b0-542b-47ab-99b7-74fcf3b19149.png) ### 配置llama3-gpu 这里我gpu的不知怎么跑不起来的,我试试就拿个别的模型(ERNIE-Speed-128K)假装是gpu版本看行不,反正是测试高可用嘛。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728553235425-f565b14d-eeaf-419d-a684-6a6f0e9a2fde.png) ## 添加Token <font style="color:black;">我们需要添加一个Token用于后续测试:</font> ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728553298443-44e85611-95a4-49e0-bd9f-d813f2b8d840.png) 注意这里与原讲义有所不同,我们不叫llama-3-chinese。 然后复制令牌,用于后续测试。 ## 测试高可用 ### 配置ChatGPTNextWeb 这里填入OneAPI的接口地址,这也是用OneAPI进行接口分发以及高可用的体现。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728553445126-b496bfc4-b050-4aa0-a9b1-1d685dbb6c58.png) 之前得到的Token的Key也输入下; ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728553613294-40417f97-98f4-48bd-aacf-732d5d43fad7.png) 这里模型名和模型也要改。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554082343-592c2729-f8a8-40c3-8217-648551a44a63.png) ### 测试可行性 这里禁用百度文心模型,只用CPU版本,看看我的CPU版本可用不,可用的话实验才能顺利进行。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554055748-2f18824e-6ead-45a1-9fe4-989ec356f86f.png) 发现是可用的,只是跑得慢。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554208784-a55a9431-88e7-431b-a44a-d3d0b04d25db.png) ### 双渠道高可用测试 这里解开禁用。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554274995-cb012d97-f2ff-4419-bb9d-a20b0f6a9c48.png) 再问同一个问题,快速问两次。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554350607-43381e4a-0bc6-4e4c-8720-8645a6e6e6d9.png) 真的是一快一慢,还真是那么回事。 ### GPU可用CPU不可用以及CPU可用GPU可用测试 由于我是用的文心的API模拟GPU,所以这里其实在我测试可行性的时候就已经做过这个工作了。这里试一下关CPU只用GPU的用法。 关掉CPU,假装GPU在跑。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554467993-f20cb608-33a7-4839-8fcc-bcd85aecf9eb.png) 出来的很快。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554534995-ff36add7-f552-4f43-926e-0ce2e32e5ef3.png) 这里再试一下关GPU只用CPU的用法。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554567491-874fd40d-94ec-4e4b-b5ff-996c1c10c715.png) 可以看到半天才蹦出来一个字。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1728554603620-6cbc8fb2-5027-4c90-b4a4-3656c394bdb7.png)
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: HswOAuth/llm_course#177
No description provided.