Title text reading Build AI-powered applications using OpenLLM and Vultr Cloud GPU. The peach colored background contains icons depicting code stack in the top right corner and a microprocessor icon in the bottom left corner.

使用 OpenLLM 和 Vultr 云 GPU 构建 AI 驱动的应用程序

作者头像Vultr阅读时间:8 分钟

OpenLLM 是一个开源平台,使您能够创建 AI 驱动的生产应用程序,例如个性化聊天机器人、推荐系统等等。它允许您通过向 API 发送提示,以及参数来控制响应,从而生成响应。 OpenLLM 的库 包含所有主要模型,例如 Mistral、Falcon 和 Llama。

在本文中,我们将演示在 Vultr GPU 服务器上使用 OpenLLM 部署 Falcon 7B 模型以生成 API 响应的步骤,这些响应可用于创建 AI 驱动的应用程序。您将学习如何安装所需的依赖项,以及如何创建具有持久性的 OpenLLM 服务。此外,我们将介绍如何设置 Nginx 作为反向代理以实现高效的负载均衡,以及如何使用安全套接字层 (SSL) 证书保护您的应用程序以启用 HTTPS。

在 Vultr 上部署服务器

为了高效地部署人工智能 (AI) 或机器学习 (ML) 驱动的应用程序,使用云 GPU 是最有效的方法之一。云 GPU 提供对最新技术的访问,使您能够持续构建、部署和全球化提供大规模应用程序。

  1. 注册并登录到 Vultr 客户门户
  2. 导航到“产品”页面。
  3. 从侧边菜单中选择“计算”。 Vultr 客户门户计算侧边菜单的图像,用于部署新的云计算服务器
  4. 单击中心中的“部署服务器”按钮。
  5. 选择“云 GPU”作为服务器类型。
  6. 选择“A40”作为 GPU 类型。
  7. 在“服务器位置”部分中,选择您选择的区域。
  8. 在“操作系统”部分中,选择“Vultr GPU 堆栈”作为操作系统。 Vultr 客户门户操作系统选择菜单的图像,用于部署 GPU 堆栈 Vultr GPU 堆栈 旨在通过提供预安装软件套件(包括 NVIDIA CUDA 工具包、NVIDIA cuDNN、Tensorflow、PyTorch 等等)来简化构建人工智能 (AI) 和机器学习 (ML) 项目的过程。
  9. 在“服务器大小”部分中,选择“48 GB”选项。
  10. 在“附加功能”部分中,根据需要选择任何其他功能。
  11. 单击右下角的“立即部署”按钮。

安装所需的软件包

在按照上述步骤设置 Vultr 服务器后,本部分将指导您完成安装运行 OpenLLM 所需的依赖项 Python 软件包,并验证安装。

  1. 安装所需的软件包。
    bash
    pip3 install openllm scipy xformers einops
    
    以下是每个软件包的含义
    • xformers:提供多个构建块,用于构建基于 Transformer 的模型。
    • einops:重新整形和缩减多维数组的维度。
    • scipy:解决复杂的数学问题,能够处理和可视化数据。
    • openllm:提供运行 OpenLLM 服务所需的依赖项。
  2. 验证安装。
    bash
    openllm -h
    
    如果安装成功,系统将找到并执行 openllm,并显示其帮助信息。这表明 openllm 已正确安装并被系统识别。如果 openllm 未正确安装,该命令可能会返回错误。

创建 OpenLLM 服务

在本部分中,您将学习如何创建 OpenLLM 服务,该服务在系统启动时自动启动该服务,并运行 Falcon 7B 模型以进行推理。

  1. 获取 openllm 路径。
    bash
    which openllm
    
  2. 复制并粘贴路径到剪贴板。您将在步骤 4 中使用它。
  3. 创建 OpenLLM 服务文件。
    bash
    nano /etc/systemd/system/openllm.service
    
  4. 将以下内容粘贴到服务文件中。确保将 UserGroup 值替换为您的实际值。还将 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
    
  5. 启动服务。
    bash
    systemctl start openllm
    
  6. 验证服务的运行状态。
    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
    
  7. 启用服务,使其在系统启动时自动启动。
    bash
    systemctl enable openllm
    

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

Nginx 充当 Web 服务器和客户端之间的反向代理。它根据您的请求配置设置,将传入请求定向到指定的位置。

在本部分中,您将学习如何使用 Nginx 配置 OpenLLM 应用程序以进行反向代理,以实现高效的请求处理和负载均衡。您还将学习如何配置 OpenLLM 本身以实现反向代理功能。

  1. 登录到 Vultr 客户门户
  2. 导航到“产品”页面。
  3. 从侧边菜单中展开“网络”下拉菜单,然后选择“DNS”。
  4. 单击中心中的“添加域名”按钮。
  5. 按照设置过程,通过选择服务器的 IP 地址来添加您的域名。
  6. 将以下主机名设置为域名的主名称服务器和辅助名称服务器,并将它们添加到您的域名注册商。
    • ns1.vultr.com
    • ns2.vultr.com
  7. 安装 Nginx。
    bash
    sudo apt install nginx
    
  8. sites-available 目录中创建一个名为 openllm.conf 的文件。
    bash
    sudo nano /etc/nginx/sites-available/openllm.conf
    
  9. 将以下内容粘贴到 openllm.conf 文件中。确保将 example.com 替换为您的实际域名。
    bash
    server {
            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/
  10. 保存文件,然后退出编辑器。
  11. 通过将 openllm.conf 文件链接到 sites-enabled 目录,激活虚拟主机配置。
    bash
    sudo ln -s /etc/nginx/sites-available/openllm.conf /etc/nginx/sites-enabled/
    
  12. 测试配置以识别错误。
    bash
    sudo nginx -t
    
    如果配置没有错误,您的输出应如下所示
    bash
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
  13. 重新启动 Nginx 服务器。
    bash
    sudo systemctl reload nginx
    
  14. 允许在端口 80 上接收传入连接。
    bash
    sudo ufw allow 80/tcp
    

使用 Certbot 安装 SSL 证书

Certbot 允许您从“Let's Encrypt”获取 SSL 证书,这是一个免费的证书颁发机构。这些 SSL 证书充当加密密钥,可以实现用户和 Web 服务器之间安全的通信。

在本部分中,您将学习如何为您的域名从“Let's Encrypt”请求免费 SSL 证书,并为您的应用程序实现 HTTPS。您还将学习如何在证书过期前的 90 天内自动续订证书。

  1. 允许在端口 443 上接收传入连接,以实现 HTTPS。
    bash
    sudo ufw allow 443/tcp
    
  2. 使用 snap 包管理器安装 certbot 包。
    bash
    sudo snap install --classic certbot
    
  3. 为您的域名请求新的 SSL 证书。确保将 example.com 替换为您的实际域名。
    bash
    sudo certbot --nginx -d example.com -d www.example.com
    
  4. 您可以在以下链接处访问 OpenLLM API 文档
    url
    https://example.com
    

使用 OpenLLM 生成 API 响应

在配置完 Nginx 和 SSL 后,本部分将指导您完成向 OpenLLM 端点发送 API POST 请求,该端点负责根据给定的提示生成响应。

向 API 端点发送 curl 请求。

bash
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 请求的示例输出

json
{
  "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

关注 MDN

订阅 MDN 时事通讯,不错过最新的 Web 开发趋势、技巧和最佳实践。