
使用 OpenLLM 和 Vultr 云 GPU 构建 AI 驱动的应用程序
OpenLLM 是一个开源平台,使您能够创建 AI 驱动的生产应用程序,例如个性化聊天机器人、推荐系统等等。它允许您通过向 API 发送提示,以及参数来控制响应,从而生成响应。 OpenLLM 的库 包含所有主要模型,例如 Mistral、Falcon 和 Llama。
在本文中,我们将演示在 Vultr GPU 服务器上使用 OpenLLM 部署 Falcon 7B 模型以生成 API 响应的步骤,这些响应可用于创建 AI 驱动的应用程序。您将学习如何安装所需的依赖项,以及如何创建具有持久性的 OpenLLM 服务。此外,我们将介绍如何设置 Nginx 作为反向代理以实现高效的负载均衡,以及如何使用安全套接字层 (SSL) 证书保护您的应用程序以启用 HTTPS。
在 Vultr 上部署服务器
为了高效地部署人工智能 (AI) 或机器学习 (ML) 驱动的应用程序,使用云 GPU 是最有效的方法之一。云 GPU 提供对最新技术的访问,使您能够持续构建、部署和全球化提供大规模应用程序。
- 注册并登录到 Vultr 客户门户。
- 导航到“产品”页面。
- 从侧边菜单中选择“计算”。
- 单击中心中的“部署服务器”按钮。
- 选择“云 GPU”作为服务器类型。
- 选择“A40”作为 GPU 类型。
- 在“服务器位置”部分中,选择您选择的区域。
- 在“操作系统”部分中,选择“Vultr GPU 堆栈”作为操作系统。
Vultr GPU 堆栈 旨在通过提供预安装软件套件(包括 NVIDIA CUDA 工具包、NVIDIA cuDNN、Tensorflow、PyTorch 等等)来简化构建人工智能 (AI) 和机器学习 (ML) 项目的过程。
- 在“服务器大小”部分中,选择“48 GB”选项。
- 在“附加功能”部分中,根据需要选择任何其他功能。
- 单击右下角的“立即部署”按钮。
安装所需的软件包
在按照上述步骤设置 Vultr 服务器后,本部分将指导您完成安装运行 OpenLLM 所需的依赖项 Python 软件包,并验证安装。
- 安装所需的软件包。以下是每个软件包的含义bash
pip3 install openllm scipy xformers einops
xformers
:提供多个构建块,用于构建基于 Transformer 的模型。einops
:重新整形和缩减多维数组的维度。scipy
:解决复杂的数学问题,能够处理和可视化数据。openllm
:提供运行 OpenLLM 服务所需的依赖项。
- 验证安装。如果安装成功,系统将找到并执行bash
openllm -h
openllm
,并显示其帮助信息。这表明openllm
已正确安装并被系统识别。如果openllm
未正确安装,该命令可能会返回错误。
创建 OpenLLM 服务
在本部分中,您将学习如何创建 OpenLLM 服务,该服务在系统启动时自动启动该服务,并运行 Falcon 7B 模型以进行推理。
- 获取
openllm
路径。bashwhich openllm
- 复制并粘贴路径到剪贴板。您将在步骤 4 中使用它。
- 创建 OpenLLM 服务文件。bash
nano /etc/systemd/system/openllm.service
- 将以下内容粘贴到服务文件中。确保将
User
和Group
值替换为您的实际值。还将WorkingDirectory
替换为您之前复制的 OpenLLM 路径(不包含openllm
),并将Execstart
替换为包含可执行二进制文件的实际 OpenLLM 路径。bash[Unit] Description= Daemon for OpenLLM Demo Application After=network.target [Service] User=example_user Group=example_user WorkingDirectory=/home/example_user/.local/bin/ ExecStart=/home/example_user/.local/bin/openllm start tiiuae/falcon-7b --backend pt [Install] WantedBy=multi-user.target
- 启动服务。bash
systemctl start openllm
- 验证服务的运行状态。输出将如下所示bash
systemctl status openllm
● openllm.service - Daemon for OpenLLM Demo Application 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 /usr/local/bin/openllm start tiiuae/falcon-7b --backend pt
- 启用服务,使其在系统启动时自动启动。bash
systemctl enable openllm
将 Nginx 配置为反向代理服务器
Nginx 充当 Web 服务器和客户端之间的反向代理。它根据您的请求配置设置,将传入请求定向到指定的位置。
在本部分中,您将学习如何使用 Nginx 配置 OpenLLM 应用程序以进行反向代理,以实现高效的请求处理和负载均衡。您还将学习如何配置 OpenLLM 本身以实现反向代理功能。
- 登录到 Vultr 客户门户。
- 导航到“产品”页面。
- 从侧边菜单中展开“网络”下拉菜单,然后选择“DNS”。
- 单击中心中的“添加域名”按钮。
- 按照设置过程,通过选择服务器的 IP 地址来添加您的域名。
- 将以下主机名设置为域名的主名称服务器和辅助名称服务器,并将它们添加到您的域名注册商。
- ns1.vultr.com
- ns2.vultr.com
- 安装 Nginx。bash
sudo apt install nginx
- 在
sites-available
目录中创建一个名为openllm.conf
的文件。bashsudo nano /etc/nginx/sites-available/openllm.conf
- 将以下内容粘贴到
openllm.conf
文件中。确保将example.com
替换为您的实际域名。以下指令用于上述虚拟主机配置bashserver { listen 80; listen [::]:80; server_name example.com www.example.com; location / { proxy_pass http://127.0.0.1:3000/; } }
server
定义了我们域名的设置块。listen
指示服务器监听端口80
以接收传入请求。server_name
指定此服务器块将响应的域名。location
定义了服务器应该如何处理传入请求。proxy_pass
指示服务器将请求转发到另一个位置,在本例中为http://127.0.0.1:3000/
。
- 保存文件,然后退出编辑器。
- 通过将
openllm.conf
文件链接到sites-enabled
目录,激活虚拟主机配置。bashsudo ln -s /etc/nginx/sites-available/openllm.conf /etc/nginx/sites-enabled/
- 测试配置以识别错误。如果配置没有错误,您的输出应如下所示bash
sudo nginx -t
bashnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- 重新启动 Nginx 服务器。bash
sudo systemctl reload nginx
- 允许在端口
80
上接收传入连接。bashsudo ufw allow 80/tcp
使用 Certbot 安装 SSL 证书
Certbot 允许您从“Let's Encrypt”获取 SSL 证书,这是一个免费的证书颁发机构。这些 SSL 证书充当加密密钥,可以实现用户和 Web 服务器之间安全的通信。
在本部分中,您将学习如何为您的域名从“Let's Encrypt”请求免费 SSL 证书,并为您的应用程序实现 HTTPS。您还将学习如何在证书过期前的 90 天内自动续订证书。
- 允许在端口
443
上接收传入连接,以实现 HTTPS。bashsudo ufw allow 443/tcp
- 使用
snap
包管理器安装certbot
包。bashsudo snap install --classic certbot
- 为您的域名请求新的 SSL 证书。确保将
example.com
替换为您的实际域名。bashsudo certbot --nginx -d example.com -d www.example.com
- 您可以在以下链接处访问 OpenLLM API 文档url
https:
使用 OpenLLM 生成 API 响应
在配置完 Nginx 和 SSL 后,本部分将指导您完成向 OpenLLM 端点发送 API POST 请求,该端点负责根据给定的提示生成响应。
向 API 端点发送 curl
请求。
curl -X POST -H "Content-Type: application/json" -d '{
"prompt": "What is the meaning of life?",
"stop": ["\n"],
"llm_config": {
"max_new_tokens": 128,
"min_length": 0,
"early_stopping": false,
"num_beams": 1,
"num_beam_groups": 1,
"use_cache": true,
"temperature": 0.75,
"top_k": 15,
"top_p": 0.9,
"typical_p": 1,
"epsilon_cutoff": 0,
"eta_cutoff": 0,
"diversity_penalty": 0,
"repetition_penalty": 1,
"encoder_repetition_penalty": 1,
"length_penalty": 1,
"no_repeat_ngram_size": 0,
"renormalize_logits": false,
"remove_invalid_values": false,
"num_return_sequences": 1,
"output_attentions": false,
"output_hidden_states": false,
"output_scores": false,
"encoder_no_repeat_ngram_size": 0,
"logprobs": 0,
"prompt_logprobs": 0,
"n": 1,
"presence_penalty": 0,
"frequency_penalty": 0,
"use_beam_search": false,
"ignore_eos": false,
"skip_special_tokens": true
},
"adapter_name": null
}' https://example.com/v1/generate
您可以通过更改各种参数的值来调整响应的强度。以下是每个参数的作用的解释
top_p
:负责选择输出中最佳概率的标记,使输出更集中、更相关。epsilon_cutoff
:负责忽略概率低于 epsilon 值的标记,从而忽略低概率选项。diversity_penalty
:负责影响输出的多样性。较高的参数值将创建更具多样性、更少重复的响应。repetition_penalty
:负责对在生成的输出中连续重复的标记进行惩罚。length_penalty
:负责控制响应的长度;较高的参数值将生成更长的响应,反之亦然。no_repeat_ngram_size
:负责惩罚已经出现在响应中的形成 n 元组(n 个标记的序列)的标记。remove_invalid_values
:负责自动从生成的响应中删除具有无效值的标记。num_return_sequences
:负责控制模型应该在响应中生成的不同序列数量。frequency_penalty
:负责操作模型在生成响应时选择某些标记的频率。use_beam_search
:如果参数值为真,负责使用 beam search 查找响应生成的关联延续。ignore_eos
:如果参数值为真,负责在响应生成期间忽略“句子结束”标记。n
:负责表示每个生成响应中的标记数量。
这是 curl
请求的示例输出
{
"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 响应。本教程引导您完成创建 OpenLLM 服务的步骤,该服务初始化必要的模型和 API 端点,以便生成响应。您还将学习如何将 Nginx 设置为 OpenLLM 服务的反向代理服务器,并使用 SSL 证书对其进行保护。
本文由 Vultr 赞助。Vultr 是全球最大的私营云计算平台。Vultr 受开发人员的青睐,已为 185 个国家/地区的 150 多万客户提供灵活、可扩展的全球云计算、云 GPU、裸机和云存储解决方案。了解更多关于 Vultr。