利用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响应,感谢阅读~

相关推荐
蹦蹦跳跳真可爱5893 小时前
Python----深度学习(基于深度学习Pytroch簇分类,圆环分类,月牙分类)
人工智能·pytorch·python·深度学习·分类
蚂蚁20144 小时前
卷积神经网络(二)
人工智能·计算机视觉
z_mazin6 小时前
反爬虫机制中的验证码识别:类型、技术难点与应对策略
人工智能·计算机视觉·目标跟踪
lixy5797 小时前
深度学习3.7 softmax回归的简洁实现
人工智能·深度学习·回归
youhebuke2257 小时前
利用deepseek快速生成甘特图
人工智能·甘特图·deepseek
訾博ZiBo7 小时前
AI日报 - 2025年04月26日
人工智能
郭不耐7 小时前
DeepSeek智能时空数据分析(三):专业级地理数据可视化赏析-《杭州市国土空间总体规划(2021-2035年)》
人工智能·信息可视化·数据分析·毕业设计·数据可视化·城市规划
AI军哥7 小时前
MySQL8的安装方法
人工智能·mysql·yolo·机器学习·deepseek
余弦的倒数8 小时前
知识蒸馏和迁移学习的区别
人工智能·机器学习·迁移学习
Allen Bright8 小时前
【机器学习-线性回归-2】理解线性回归中的连续值与离散值
人工智能·机器学习·线性回归