OpenLLM是一个开源平台,可以帮助你创建如个性化聊天机器人、推荐系统等AI驱动的生产应用。它允许你通过发送API提示及其参数来生成响应。OpenLLM的库包含了所有主要模型,如Mistral、Falcon和Llama。
本文将指导你如何在Vultr GPU服务器上部署Falcon 7B模型并使用OpenLLM来生成API响应,这些响应可以用于创建AI驱动的应用。你将学习如何安装所需的依赖项,如何创建具有持久性的OpenLLM服务。此外,我们还将讲解如何设置Nginx作为反向代理以实现有效的负载平衡,并通过安全套接字层(SSL)证书保护你的应用以启用HTTPS。
在Vultr上部署服务器
使用云GPU是部署AI或机器学习(ML)驱动应用的一种高效方式。云GPU提供了最新技术的访问权限,使你能够持续构建、部署并全球范围内提供大规模应用。
- 注册并登录到Vultr门户。
- 导航至产品页面。
- 从侧菜单选择计算。
- 点击中央的部署服务器按钮。
- 选择云GPU作为服务器类型。
- 选择A40作为GPU类型。
-
在"服务器位置"部分,选择你喜欢的地区。
-
在"操作系统"部分,选择Vultr GPU Stack作为操作系统。Vultr GPU Stack旨在简化构建AI和ML项目的过程,提供包括NVIDIA CUDA Toolkit、NVIDIA cuDNN、Tensorflow、PyTorch等在内的预安装软件全套解决方案。
-
在"服务器大小"部分,选择48 GB选项。
-
在"附加特性"部分根据需要选择更多特性。
-
点击右下角的部署现在按钮。
安装所需的包
完成Vultr服务器的设置后,本节将指导你安装运行OpenLLM所需的Python依赖包并验证安装。
-
安装所需的包。
pip3 install openllm scipy xformers einops
这里每个包的含义:
-
xformers:为构建基于变换器的模型提供多个构建块。
-
einops:重新排列和减少多维数组的维数。
-
scipy:解决复杂的数学问题,并具有操作和可视化数据的能力。
-
openllm:提供运行OpenLLM服务所需的依赖项。
-
验证安装。
openllm -h
如果安装成功,系统将找到并执行openllm,显示其帮助信息。这表明openllm正确安装并被系统识别。如果openllm安装不正确,命令可能会返回错误。
创建OpenLLM服务
本节将教你如何创建一个OpenLLM服务,该服务在系统启动时自动启动,并运行Falcon 7B模型进行推理。
- 获取openllm路径。
bash
which openllm
复制并粘贴路径到剪贴板。你将在第4步中使用这个路径。
- 创建OpenLLM服务文件。
bash
nano /etc/systemd/system/openllm.service
将以下内容粘贴到服务文件中。确保用你实际的值替换User和Group值。同时,用你之前复制的OpenLLM路径(不包括openllm)替换WorkingDirectory,用实际的OpenLLM
路径包括可执行二进制文件。
ini
[Unit]
Description=OpenLLM Demo Application Daemon
After=network.target
[Service]
User=your_user
Group=your_group
WorkingDirectory=/your/home/.local/bin/
ExecStart=/your/home/.local/bin/openllm start tiiuae/falcon-7b --backend pt
[Install]
WantedBy=multi-user.target
- 启动服务。
sql
systemctl start openllm
- 验证服务状态。
lua
systemctl status openllm
输出示例:
yaml
● openllm.service - OpenLLM Demo Application Daemon
Loaded: loaded (/etc/systemd/system/openllm.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-11-29 20:51:25 UTC; 12min ago
Main PID: 3160 (openllm)
Tasks: 257 (limit: 72213)
Memory: 21.9G
CGroup: /system.slice/openllm.service
├─3160 /usr/bin/python3 /your/home/.local/bin/openllm start tiiuae/falcon-7b --backend pt
- 设置服务开机自启。
bash
systemctl enable openllm
配置Nginx作为 反向代理 服务器
Nginx作为你的web服务器和客户端之间的反向代理,根据你的请求配置设置来指导传入请求。
-
安装Nginx。
sudo apt install nginx
-
在sites-available目录下创建名为openllm.conf的文件。
arduino
sudo nano /etc/nginx/sites-available/openllm.conf
- 将以下内容粘贴到openllm.conf文件中,确保用你的实际域名替换example.com。
ini
server {
listen 80;
listen [::]:80;
server_name your_domain.com www.your_domain.com;
location / {
proxy_pass http://127.0.0.1:3000/;
}
}
-
保存文件并退出编辑器。
-
通过将openllm.conf文件链接到sites-enabled目录来激活虚拟主机配置。
bash
sudo ln -s /etc/nginx/sites-available/openllm.conf /etc/nginx/sites-enabled/
-
测试配置以识别错误。
sudo nginx -t
-
重启Nginx服务器。
sudo systemctl reload nginx
-
允许端口80上的传入连接。
bash
sudo ufw allow 80/tcp
使用Certbot安装 SSL 证书
Certbot允许你从"Let's Encrypt"获取SSL证书,这是一个免费的证书颁发机构。这些SSL证书充当加密密钥,使用户和web服务器之间的通信安全。
- 允许端口443上的HTTPS传入连接。
bash
sudo ufw allow 443/tcp
- 使用snap包管理器安装certbot包。
css
sudo snap install --classic certbot
- 为你的域名请求新的SSL证书,确保用你的实际域名替换example.com。
css
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
使用OpenLLM生成API响应
配置Nginx和SSL后,本节将指导你通过向负责生成响应的OpenLLM端点发送API POST请求来生成响应。
- 向API端点发送curl请求。
swift
curl -X POST -H "Content-Type: application/json" -d '{
"prompt": "What is the meaning of life?",
"stop": ["\n"],
...
}' https://your_domain.com/v1/generate
你可以通过更改各种参数的值来调整响应的强度。这里是对每个参数的解释:
-
top_p:负责为输出选择最佳概率令牌,使输出更加集中和相关。
-
repetition_penalty:对在生成的输出中连续重复的令牌施加惩罚。
-
length_penalty:控制响应的长度;参数值
更高会生成较长的响应,反之亦然。
-
no_repeat_ngram_size:对在响应中已经出现的形成n-gram(n个令牌的序列)的令牌施加惩罚。
-
remove_invalid_values:自动从生成的响应中移除无效值的令牌。
-
num_return_sequences:控制模型在响应中应生成的不同序列数量。
-
frequency_penalty:在生成响应时,操作模型选择特定令牌的频率。
-
use_beam_search:如果参数值设为真,使用beam search找到响应生成的相关延续。
-
ignore_eos:如果参数值设为真,在生成响应时忽略"句末"令牌。
这是curl请求的示例输出:
yaml
{
"prompt": "What is the meaning of life?",
"finished": true,
"outputs": [
{
"index": 0,
"text": "What is the meaning of the universe? How does the universe work?",
"token_ids": [1634, 304, 248, 4113, 275, 248, 10314, 42, 1265, 960, 248, 10314, 633, 42, 193, 1265, 960, 248, 10314, 633, 42, 193],
"cumulative_logprob": 0,
"logprobs": null,
"finish_reason": "stop"
}
],
"prompt_token_ids": [1562, 304, 248, 4113, 275, 1063, 42],
"prompt_logprobs": null,
"request_id": "openllm-e1b145f3e9614624975f76e7fae6050c"
}
总结
希望通过这篇文章,你能学习如何使用OpenLLM和Vultr GPU堆栈为AI驱动的应用构建API响应,感谢阅读~