利用OpenLLM和Vultr Cloud GPU构建AI驱动的应用

OpenLLM是一个开源平台,可以帮助你创建如个性化聊天机器人、推荐系统等AI驱动的生产应用。它允许你通过发送API提示及其参数来生成响应。OpenLLM的库包含了所有主要模型,如Mistral、Falcon和Llama。

本文将指导你如何在Vultr GPU服务器上部署Falcon 7B模型并使用OpenLLM来生成API响应,这些响应可以用于创建AI驱动的应用。你将学习如何安装所需的依赖项,如何创建具有持久性的OpenLLM服务。此外,我们还将讲解如何设置Nginx作为反向代理以实现有效的负载平衡,并通过安全套接字层(SSL)证书保护你的应用以启用HTTPS。

在Vultr上部署服务器

使用云GPU是部署AI或机器学习(ML)驱动应用的一种高效方式。云GPU提供了最新技术的访问权限,使你能够持续构建、部署并全球范围内提供大规模应用。

  • 导航至产品页面。
  • 从侧菜单选择计算。
  • 点击中央的部署服务器按钮。
  • 选择云GPU作为服务器类型。
  • 选择A40作为GPU类型。
  • 在"服务器位置"部分,选择你喜欢的地区。

  • 在"操作系统"部分,选择Vultr GPU Stack作为操作系统。Vultr GPU Stack旨在简化构建AI和ML项目的过程,提供包括NVIDIA CUDA Toolkit、NVIDIA cuDNN、Tensorflow、PyTorch等在内的预安装软件全套解决方案。

  • 在"服务器大小"部分,选择48 GB选项。

  • 在"附加特性"部分根据需要选择更多特性。

  • 点击右下角的部署现在按钮。

安装所需的包

完成Vultr服务器的设置后,本节将指导你安装运行OpenLLM所需的Python依赖包并验证安装。

  1. 安装所需的包。

    pip3 install openllm scipy xformers einops

这里每个包的含义:

  • xformers:为构建基于变换器的模型提供多个构建块。

  • einops:重新排列和减少多维数组的维数。

  • scipy:解决复杂的数学问题,并具有操作和可视化数据的能力。

  • openllm:提供运行OpenLLM服务所需的依赖项。

  1. 验证安装。

    openllm -h

如果安装成功,系统将找到并执行openllm,显示其帮助信息。这表明openllm正确安装并被系统识别。如果openllm安装不正确,命令可能会返回错误。

创建OpenLLM服务

本节将教你如何创建一个OpenLLM服务,该服务在系统启动时自动启动,并运行Falcon 7B模型进行推理。

  1. 获取openllm路径。
bash 复制代码
which openllm

复制并粘贴路径到剪贴板。你将在第4步中使用这个路径。

  1. 创建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
  1. 启动服务。
sql 复制代码
systemctl start openllm
  1. 验证服务状态。
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
  1. 设置服务开机自启。
bash 复制代码
systemctl enable openllm

配置Nginx作为 反向代理 服务器

Nginx作为你的web服务器和客户端之间的反向代理,根据你的请求配置设置来指导传入请求。

  1. 安装Nginx。

    sudo apt install nginx

  2. 在sites-available目录下创建名为openllm.conf的文件。

arduino 复制代码
sudo nano /etc/nginx/sites-available/openllm.conf
  1. 将以下内容粘贴到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/;
    }
}
  1. 保存文件并退出编辑器。

  2. 通过将openllm.conf文件链接到sites-enabled目录来激活虚拟主机配置。

bash 复制代码
sudo ln -s /etc/nginx/sites-available/openllm.conf /etc/nginx/sites-enabled/
  1. 测试配置以识别错误。

    sudo nginx -t

  2. 重启Nginx服务器。

    sudo systemctl reload nginx

  3. 允许端口80上的传入连接。

bash 复制代码
sudo ufw allow 80/tcp

使用Certbot安装 SSL 证书

Certbot允许你从"Let's Encrypt"获取SSL证书,这是一个免费的证书颁发机构。这些SSL证书充当加密密钥,使用户和web服务器之间的通信安全。

  1. 允许端口443上的HTTPS传入连接。
bash 复制代码
sudo ufw allow 443/tcp
  1. 使用snap包管理器安装certbot包。
css 复制代码
sudo snap install --classic certbot
  1. 为你的域名请求新的SSL证书,确保用你的实际域名替换example.com
css 复制代码
sudo certbot --nginx -d your_domain.com -d www.your_domain.com

使用OpenLLM生成API响应

配置Nginx和SSL后,本节将指导你通过向负责生成响应的OpenLLM端点发送API POST请求来生成响应。

  1. 向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响应,感谢阅读~

相关推荐
Chef_Chen12 分钟前
从0开始学习机器学习--Day22--优化总结以及误差作业(上)
人工智能·学习·机器学习
Mr.简锋17 分钟前
opencv常用api
人工智能·opencv·计算机视觉
DevinLGT1 小时前
6Pin Type-C Pin脚定义:【图文讲解】
人工智能·单片机·嵌入式硬件
宋一诺331 小时前
机器学习—高级优化方法
人工智能·机器学习
龙的爹23331 小时前
论文 | The Capacity for Moral Self-Correction in LargeLanguage Models
人工智能·深度学习·机器学习·语言模型·自然语言处理·prompt
Mr.简锋1 小时前
opencv视频读写
人工智能·opencv·音视频
Baihai_IDP1 小时前
「混合专家模型」可视化指南:A Visual Guide to MoE
人工智能·llm·aigc
寰宇视讯2 小时前
“津彩嘉年,洽通天下” 2024中国天津投资贸易洽谈会火热启动 首届津彩生活嘉年华重磅来袭!
大数据·人工智能·生活
Light602 小时前
低代码牵手 AI 接口:开启智能化开发新征程
人工智能·python·深度学习·低代码·链表·线性回归
墨绿色的摆渡人2 小时前
用 Python 从零开始创建神经网络(六):优化(Optimization)介绍
人工智能·python·深度学习·神经网络