llm接口高可用工程实践 #91

Open
opened 2024-09-14 17:45:28 +08:00 by 12390900721cs · 1 comment

本次实验主要还是继续上次的本地llama3-8b大模型部署的基础,来实现该模型本地化以及接口的高可用。

这里在之前的实验中已经完成了Docker的安装,续接讲义的内容往后做。

首先是最经典的环境部署。这里需要部署oneapi。

mkdir -p ~/oneapi-compose

cd ~/oneapi-compose

touch docker-compose.yaml

nano docker-compose.yaml

这些命令的作用是为 Docker Compose 设置一个工作环境,具体步骤如下:

  1. mkdir -p ~/oneapi-compose: 该命令创建了一个名为 oneapi-compose 的目录。如果父目录(~ 目录下的路径)不存在,它会自动创建,-p 选项确保没有错误提示。
  2. cd ~/oneapi-compose: 切换到刚刚创建的 oneapi-compose 目录中。
  3. touch docker-compose.yaml: 创建一个空的 docker-compose.yaml 文件,这是 Docker Compose 的配置文件。通常,它会定义多个容器的服务、网络和卷等信息。
  4. nano docker-compose.yaml: 用 nano 文本编辑器打开 docker-compose.yaml 文件,供你编辑其内容。在这个文件里,你可以定义 Docker Compose 所需的服务配置,例如指定镜像、端口映射、环境变量等。

这些步骤通常用于在 Docker Compose 中编排多个 Docker 容器的运行。你可以在 docker-compose.yaml 文件中定义多个服务,并用一个命令来启动它们。 Docker Compose 允许你在单个 YAML 文件中定义多个服务(每个服务对应一个容器)。你可以通过简单的命令(如 docker-compose up)启动所有服务,而不必分别启动每个容器。

完成创建后根据该文件启动服务,这里可能我的docker是老版本的,而且llm_course没有足够的权限,就需要使用与讲义略有不同的sudo docker-compose up -d来启动服务。这里如果当前账户没有权限就要先转移到一个有权限的账户来用sudo usermod -aG sudo llm_course给当前的账户权限,然后用sudo命令来启动。

启动容器后通过当前服务器地址打开oneai页面。一开始我的环境中用不了ifconfig,然后用sudo apt install net-tools安装了net-tools包后才可以用ifconfig查看。

这里不同的地方的地址有不同的意义。lo代表local指的是本地,这里应该用这个来打开oneai页面。

然后分别用gpu和cpu启动llama3。

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

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

这里我的cpu不够好,试了好多次都killed了,就只用gpu做实验吧。

按照讲义在oneai页面进行操作,渠道url中使用localhost:3030会出现错误:do request failed: Post "http://0.0.0.0:19327/v1/chat/completions": dial tcp 0.0.0.0:19327: connect: connection refused导致无法连接的错误。这里是因为0.0.0.0 是一个通配符地址,表示服务器监听所有可用的网络接口。但它并不是一个可以直接用来访问的具体 IP 地址。 需要将渠道url改为前面的实际的ip地址。

更改后再次点击测试可以跑通。

(由于CPU实在是跑不起来,就不弄了)

随后取得token后在ChatGPTNextWeb进行测试,可以看到能够正常跑通。

实验中还进行了GPU可用CPU不可用以及CPU可用GPU不可用的测试。随后还先在云服务器中部署了oneapi后再利用将一个域名设置到多个ip的方式实现了高可用。

本次实验主要还是继续上次的本地llama3-8b大模型部署的基础,来实现该模型本地化以及接口的高可用。 这里在之前的实验中已经完成了Docker的安装,续接讲义的内容往后做。 首先是最经典的环境部署。这里需要部署oneapi。 ``` mkdir -p ~/oneapi-compose cd ~/oneapi-compose touch docker-compose.yaml nano docker-compose.yaml ``` 这些命令的作用是为 Docker Compose 设置一个工作环境,具体步骤如下: 1. `mkdir -p ~/oneapi-compose`: 该命令创建了一个名为 `oneapi-compose` 的目录。如果父目录(`~` 目录下的路径)不存在,它会自动创建,`-p` 选项确保没有错误提示。 2. `cd ~/oneapi-compose`: 切换到刚刚创建的 `oneapi-compose` 目录中。 3. `touch docker-compose.yaml`: 创建一个空的 `docker-compose.yaml` 文件,这是 Docker Compose 的配置文件。通常,它会定义多个容器的服务、网络和卷等信息。 4. `nano docker-compose.yaml`: 用 `nano` 文本编辑器打开 `docker-compose.yaml` 文件,供你编辑其内容。在这个文件里,你可以定义 Docker Compose 所需的服务配置,例如指定镜像、端口映射、环境变量等。 这些步骤通常用于在 Docker Compose 中编排多个 Docker 容器的运行。你可以在 `docker-compose.yaml` 文件中定义多个服务,并用一个命令来启动它们。 Docker Compose 允许你在单个 YAML 文件中定义多个服务(每个服务对应一个容器)。你可以通过简单的命令(如 `docker-compose up`)启动所有服务,而不必分别启动每个容器。 完成创建后根据该文件启动服务,这里可能我的docker是老版本的,而且llm_course没有足够的权限,就需要使用与讲义略有不同的`sudo docker-compose up -d`来启动服务。这里如果当前账户没有权限就要先转移到一个有权限的账户来用`sudo usermod -aG sudo llm_course`给当前的账户权限,然后用sudo命令来启动。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726305800382-0143e849-c83a-4f65-97bd-b3d35c97a99a.png) 启动容器后通过当前服务器地址打开oneai页面。一开始我的环境中用不了ifconfig,然后用`sudo apt install net-tools`安装了`net-tools`包后才可以用ifconfig查看。![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726305783137-41314b32-eae9-46ee-a5a2-3954394eb4b3.png) ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726305842578-0bca3a22-43a5-4b16-a136-f2893e059f49.png)这里不同的地方的地址有不同的意义。lo代表local指的是本地,这里应该用这个来打开oneai页面。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726305928396-44d42759-f6e3-4e2e-abaa-9e523116fb1d.png) 然后分别用gpu和cpu启动llama3。 ``` 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 ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726306066067-881b5d6f-d45f-42c2-b9cb-a63016e322a4.png) ``` 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 ``` ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726306084017-25b8415d-930d-42d7-9bdb-d472d189e793.png) 这里我的cpu不够好,试了好多次都killed了,就只用gpu做实验吧。 按照讲义在oneai页面进行操作,渠道url中使用localhost:3030会出现错误:do request failed: Post "[http://0.0.0.0:19327/v1/chat/completions":](http://0.0.0.0:19327/v1/chat/completions":) dial tcp 0.0.0.0:19327: connect: connection refused导致无法连接的错误。这里是因为`0.0.0.0` 是一个通配符地址,表示服务器监听所有可用的网络接口。但它并不是一个可以直接用来访问的具体 IP 地址。 需要将渠道url改为前面的实际的ip地址。 更改后再次点击测试可以跑通。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726306450520-b3cee024-593a-4bdb-b9d0-8dcaf755c0bc.png) (由于CPU实在是跑不起来,就不弄了) 随后取得token后在ChatGPTNextWeb进行测试,可以看到能够正常跑通。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726306544226-cc7f9ee7-ca98-4466-953d-89f8e8970bc6.png) 实验中还进行了GPU可用CPU不可用以及CPU可用GPU不可用的测试。随后还先在云服务器中部署了oneapi后再利用将一个域名设置到多个ip的方式实现了高可用。

太有用了!解决了!谢谢大佬!

太有用了!解决了!谢谢大佬!
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 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#91
No description provided.