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

相关推荐
昨夜见军贴06162 小时前
IACheck AI审核在生产型企业质量控制记录中的实践探索——全面赋能有关物质研究合规升级
大数据·人工智能
智星云算力2 小时前
智星云镜像共享全流程指南,附避坑手册(新手必看)
人工智能
盖雅工场2 小时前
驱动千店销售转化提升10%:3C零售门店的人效优化实战方案
大数据·人工智能·零售·数字化管理·智能排班·零售排班
Loo国昌2 小时前
深入理解 FastAPI:Python高性能API框架的完整指南
开发语言·人工智能·后端·python·langchain·fastapi
发哥来了2 小时前
【AI视频创作】【评测】【核心能力与成本效益】
大数据·人工智能
醉舞经阁半卷书13 小时前
Python机器学习常用库快速精通
人工智能·python·深度学习·机器学习·数据挖掘·数据分析·scikit-learn
产品何同学4 小时前
在线问诊医疗APP如何设计?2套原型拆解与AI生成原型图实战
人工智能·产品经理·健康医疗·在线问诊·app原型·ai生成原型图·医疗app
星爷AG I4 小时前
9-14 知觉整合(AGI基础理论)
人工智能·agi
开源技术4 小时前
Violit: Streamlit杀手,无需全局刷新,构建AI面板
人工智能·python
递归尽头是星辰4 小时前
大模型与向量检索的融合:从核心原理到 Spring AI 落地
人工智能·大模型·向量检索·rag·spring ai·向量库