基于AutoDL云服务器的VLLM大模型部署以及本地调用

基于AutoDL云服务器的VLLM大模型部署以及本地调用

引言

随着人工智能技术的快速发展,大语言模型(LLM)在自然语言处理(NLP)领域的应用日益广泛。VLLM(Vectorized Language Model)作为一种高效的大模型实现方式,因其能够显著提升推理速度和降低资源消耗,受到了开发者的广泛关注。然而,对于许多开发者和企业来说,如何在有限的硬件资源下部署和调用VLLM大模型,仍然是一个挑战。AutoDL云服务器作为一种灵活、高效的AI计算平台,为VLLM大模型的部署提供了理想的解决方案。本文将详细介绍如何基于AutoDL云服务器完成VLLM大模型的部署,并实现本地的高效调用。

一、AutoDL云服务器概述

AutoDL云服务器是一种专为AI开发设计的计算平台,它提供了高性能的GPU资源、灵活的资源配置选项以及便捷的管理界面。与传统的本地服务器相比,AutoDL云服务器具有以下优势:

  1. 弹性扩展:根据项目需求,可以随时调整GPU资源的数量和类型,满足不同规模的模型训练和推理需求。
  2. 成本效益:按需付费的模式,避免了高昂的硬件购置和维护成本,特别适合中小型企业和个人开发者。
  3. 易于管理:通过Web界面或API,可以轻松管理服务器实例、监控资源使用情况,以及进行数据备份和恢复。

二、VLLM大模型部署准备

在开始部署VLLM大模型之前,需要完成以下准备工作:

  1. 选择合适的AutoDL实例:根据VLLM模型的规模和性能需求,选择具有足够GPU内存和计算能力的AutoDL实例。例如,对于大型VLLM模型,可能需要选择配备NVIDIA A100或V100 GPU的实例。
  2. 安装必要的软件和库:在AutoDL实例上安装Python、CUDA、cuDNN以及VLLM所需的深度学习框架(如PyTorch或TensorFlow)。
  3. 准备模型文件:获取VLLM模型的预训练权重文件,并确保其格式与所选深度学习框架兼容。

三、VLLM大模型部署步骤

1. 创建AutoDL实例

登录AutoDL云服务平台,根据需求选择合适的实例类型和配置,创建新的GPU实例。确保实例的操作系统与所选深度学习框架兼容(如Ubuntu 20.04)。

2. 配置环境

通过SSH连接到AutoDL实例,安装必要的软件和库。以下是一个基于Ubuntu 20.04和PyTorch的安装示例:

  1. # 更新系统包
  2. sudo apt-get update
  3. sudo apt-get upgrade -y
  4. # 安装Python和pip
  5. sudo apt-get install -y python3 python3-pip
  6. # 安装CUDA和cuDNN(根据实例配置选择合适的版本)
  7. # 这里假设已经通过AutoDL的镜像或手动安装了CUDA和cuDNN
  8. # 安装PyTorch
  9. pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
  10. # 安装VLLM相关的其他库(如transformers、tokenizers等)
  11. pip3 install transformers tokenizers

3. 上传模型文件

将VLLM模型的预训练权重文件上传到AutoDL实例。可以使用scp命令或通过AutoDL的文件管理界面完成上传。

4. 编写部署脚本

编写一个Python脚本,用于加载VLLM模型并进行推理。以下是一个简单的示例:

  1. import torch
  2. from transformers import AutoModelForCausalLM, AutoTokenizer
  3. # 加载模型和分词器
  4. model_path = "/path/to/vllm_model" # 替换为实际的模型路径
  5. tokenizer = AutoTokenizer.from_pretrained(model_path)
  6. model = AutoModelForCausalLM.from_pretrained(model_path)
  7. # 将模型设置为评估模式
  8. model.eval()
  9. # 定义推理函数
  10. def infer(text):
  11. inputs = tokenizer(text, return_tensors="pt")
  12. with torch.no_grad():
  13. outputs = model.generate(**inputs, max_length=50)
  14. return tokenizer.decode(outputs[0], skip_special_tokens=True)
  15. # 示例调用
  16. input_text = "Hello, VLLM!"
  17. output_text = infer(input_text)
  18. print(f"Input: {input_text}")
  19. print(f"Output: {output_text}")

5. 运行部署脚本

在AutoDL实例上运行部署脚本,验证模型是否能够正确加载并进行推理。

  1. python3 deploy_vllm.py

四、本地调用VLLM大模型

完成VLLM大模型在AutoDL云服务器上的部署后,可以通过以下方式实现本地调用:

1. 使用REST API

将AutoDL实例配置为一个Web服务,通过REST API接收本地发送的推理请求,并返回推理结果。可以使用Flask或FastAPI等框架快速搭建Web服务。

示例Flask应用

  1. from flask import Flask, request, jsonify
  2. from your_deploy_script import infer # 假设infer函数在deploy_vllm.py中定义
  3. app = Flask(__name__)
  4. @app.route('/infer', methods=['POST'])
  5. def infer_route():
  6. data = request.json
  7. text = data.get('text', '')
  8. result = infer(text)
  9. return jsonify({'result': result})
  10. if __name__ == '__main__':
  11. app.run(host='0.0.0.0', port=5000)

本地调用示例

  1. import requests
  2. url = "http://<AutoDL_instance_IP>:5000/infer"
  3. data = {"text": "Hello, VLLM!"}
  4. response = requests.post(url, json=data)
  5. print(response.json())

2. 使用gRPC

对于需要更高性能和更低延迟的场景,可以使用gRPC协议实现本地与AutoDL实例之间的通信。gRPC基于HTTP/2协议,支持多种编程语言,并提供了高效的序列化机制。

定义gRPC服务

使用Protocol Buffers定义gRPC服务接口,并生成客户端和服务端代码。

  1. syntax = "proto3";
  2. service VLLMService {
  3. rpc Infer (InferRequest) returns (InferResponse);
  4. }
  5. message InferRequest {
  6. string text = 1;
  7. }
  8. message InferResponse {
  9. string result = 1;
  10. }

实现gRPC服务端(在AutoDL实例上)

  1. from concurrent import futures
  2. import grpc
  3. import vllm_service_pb2
  4. import vllm_service_pb2_grpc
  5. from your_deploy_script import infer
  6. class VLLMServicer(vllm_service_pb2_grpc.VLLMServiceServicer):
  7. def Infer(self, request, context):
  8. result = infer(request.text)
  9. return vllm_service_pb2.InferResponse(result=result)
  10. def serve():
  11. server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
  12. vllm_service_pb2_grpc.add_VLLMServiceServicer_to_server(VLLMServicer(), server)
  13. server.add_insecure_port('[::]:50051')
  14. server.start()
  15. server.wait_for_termination()
  16. if __name__ == '__main__':
  17. serve()

本地gRPC客户端调用示例

  1. import grpc
  2. import vllm_service_pb2
  3. import vllm_service_pb2_grpc
  4. def run():
  5. channel = grpc.insecure_channel('<AutoDL_instance_IP>:50051')
  6. stub = vllm_service_pb2_grpc.VLLMServiceStub(channel)
  7. response = stub.Infer(vllm_service_pb2.InferRequest(text="Hello, VLLM!"))
  8. print("Greeter client received: " + response.result)
  9. if __name__ == '__main__':
  10. run()

五、总结与展望

本文详细介绍了如何基于AutoDL云服务器完成VLLM大模型的部署,并通过REST API和gRPC两种方式实现了本地的高效调用。AutoDL云服务器提供的弹性扩展、成本效益和易于管理等优势,使得VLLM大模型的部署和应用变得更加便捷和高效。未来,随着AI技术的不断发展,AutoDL云服务器和VLLM大模型将在更多领域发挥重要作用,推动人工智能技术的普及和应用。