译者 | 李睿
审校 | 重楼
生成式人工智能最近的爆发标志着机器学习模型的能力发生了翻天覆地的变化。像DALL-E 2、GPT-3和Codex这样的人工智能系统表明,人工智能系统在未来可以模仿人类独特的技能,例如创作艺术、进行对话,甚至编写软件。然而,有效地部署和管理这些新兴的大型语言模型(LLM)给组织带来了巨大的挑战。
本文将为软件工程师提供支持研究的解决方案策略,通过利用机器学习运营(MLOps)最佳实践来顺利集成生成式人工智能,并详细介绍经过验证的技术以部署LLM以优化效率,在生产中对其进行监控,不断更新以提高性能,并确保它们在各种产品和应用程序中协同工作。通过遵循所提出的方法,人工智能从业者可以规避常见的陷阱,并成功地利用生成式人工智能的力量来创造商业价值并让用户受益。
生成式人工智能时代
生成式人工智能是人工智能进步的证明,标志着与传统模型的重大背离。这种方法的重点是根据从大量数据中识别出的模式生成新的内容,无论是文本、图像还是声音。这种能力具有深远的含义。
由于生成式人工智能的应用,从生命科学行业到娱乐行业,各行各业都在见证着革命性的变化。无论是开发新的药物还是创作音乐,这项技术的影响是不可否认的,并将继续塑造许多行业的未来发展轨迹。
理解大型语言模型(LLM)
大型语言模型通常称为LLM,是人工智能模型的一个子集,旨在理解和生成类似人类的文本。它们处理和产生大量连贯和场景相关的文本的能力使其与众不同。然而,LLM具有革命性的特性也带来了复杂性。考虑到这些模型的大小和计算需求,有效地部署和服务这些模型需要一种细致入微的方法。将LLM集成到应用程序中的复杂性强调了对专门策略和工具的需求。
LLM部署框架
1.AI-Optimized vLLM
AI-Optimized vLLM是一个专门的框架,旨在满足当代人工智能应用的需求。这一架构经过精心设计以处理大量数据集,能够确保即使在困难的条件下也能快速响应。
(1)关键特性
- 高效的数据处理:能够处理大型数据集,没有明显的延迟
- 快速响应时间:优化周转过程,确保及时交付结果
- 灵活集:旨在与各种应用程序和平台兼容
(2)优点
- 可扩展性:可以轻松处理不断增加的数据负载,而不会影响性能
- 用户友好界:简化模型集成和预测过程
(3)缺点
- 资源密集型:这可能需要大量的计算资源来实现最佳性能。
- 学习曲线:虽然用户友好,但对于入门的新手可能需要时间来充分利用它的功能。
(4)示例代码
离线批量服务:
Python
# Install the required library
# pip install ai_vllm_library
from ai_vllm import Model, Params, BatchService
# Load the model
model = Model.load("ai_model/llm-15b")
# Define parameters
params = Params(temp=0.9, max_tokens=150)
# Create a batch of prompts
prompts = ["AI future", "Generative models", "MLOps trends", "Future of robotics"]
# Use the BatchService for offline batch predictions
batch_service = BatchService(model, params)
results = batch_service.predict_batch(prompts)
# Print the results
for prompt, result in zip(prompts, results):
print(f"Prompt: {prompt}\nResult: {result}\n")
API服务器:
Python
# Install the required libraries
# pip install ai_vllm_library flask
from ai_vllm import Model, Params
from flask import Flask, request, jsonify
app = Flask(__name__)
# Load the model
model = Model.load("ai_model/llm-15b")
# Define parameters
params = Params(temp=0.9, max_tokens=150)
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
prompt = data.get('prompt', '')
result = model.predict([prompt], params)
return jsonify({"result": result[0]})
if __name__ == '__main__':
app.run(port=5000)
2.GenAI文本推理
GenAI文本推理是一个在处理基于语言的任务时以其适应性和效率而表现突出的框架。它提供了一种精简的文本生成方法,强调速度和连贯性。
(1)关键特性
- 自适应文本生成:能够生成场景相关和连贯的文本
- 优化架构:完成快速文本生成任务
- 多功能应用:适用于各种基于文本的人工智能任务,而不仅仅是生成
(2)优点
- 高质量输出:始终如一地生成连贯且与场景相关的文本
- 易于集成:简化的API和功能使其易于集成到项目中
(3)缺点
- 专用性:虽然对于文本任务非常出色,但对于非文本人工智能操作可能不太通用。
- 资源要求:最佳性能可能需要相当大的计算能力。
与Docker集成的Web服务器示例代码
(1)Web服务器代码(app.py)
Python
# Install the required library
# pip install genai_inference flask
from flask import Flask, request, jsonify
from genai_infer import TextGenerator
app = Flask(__name__)
# Initialize the TextGenerator
generator = TextGenerator("genai/llm-15b")
@app.route('/generate_text', methods=['POST'])
def generate_text():
data = request.json
prompt = data.get('prompt', '')
response = generator.generate(prompt)
return jsonify({"generated_text": response})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
(2)Dockerfile
Dockerfile
# Use an official Python runtime as the base image
FROM python:3.8-slim
# Set the working directory in the container
WORKDIR /app
# Copy the current directory contents into the container
COPY . /app
# Install the required libraries
RUN pip install genai_inference flask
# Make port 5000 available to the world outside this container
EXPOSE 5000
# Define environment variable for added security
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
(3)构建和运行Docker容器:要构建Docker镜像并运行容器,通常会使用以下命令:
Shell
docker build -t genai_web_server .
docker run -p 5000:5000 genai_web_server
(4)API调用:一旦服务器启动并在Docker容器中运行,API调用就可以使用curl或任何HTTP客户端工具对/generate_text端点进行调用:
Shell
curl -X POST -H "Content-Type: application/json" -d '{"prompt":"The future of AI"}' http://localhost:5000/g
3.MLOps OpenLLM平台:深入研究
MLOps OpenLLM平台是人工智能框架海洋中的一个灯塔,特别是为LLM量身定制的。它的设计理念促进了LLM在各种环境中的无缝部署、管理和扩展。
(1)关键特性
- 可扩展架构:用于处理小规模应用程序和企业级系统的需求
- 直观的API:简化的接口,减少学习曲线,提高开发人员的生产力
- 优化LLM:专门的组件迎合大型语言模型的独特要求
(2)优点
- 多功能性:适用于许多应用程序,从聊天机器人到内容生成系统
- 效率:简化操作,确保快速响应时间和高吞吐量
- 社区支持:由一个充满活力的社区支持,有助于持续改进
(3)缺点
- 初始设置的复杂性:虽然平台是用户友好的,但初始设置可能需要更深入的了解。
- 资源强度:对于更大的模型,平台可能需要大量的计算资源。
Web服务器代码(Server .py):
Python
# Install the required library
# pip install openllm flask
from flask import Flask, request, jsonify
from openllm import TextGenerator
app = Flask(__name__)
# Initialize the TextGenerator from OpenLLM
generator = TextGenerator("openllm/llm-15b")
@app.route('/generate', methods=['POST'])
def generate():
data = request.json
prompt = data.get('prompt', '')
response = generator.generate_text(prompt)
return jsonify({"generated_text": response})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
进行API调用:在服务器活动运行的情况下,API调用可以定向到/generate端点。下面是一个使用curl命令的简单示例:
Shell
curl -X POST -H "Content-Type: application/json" -d '{"prompt":"The evolution of MLOps"}' http://localhost:8080/gene
4.RayServe:一个具有见地的检查
RayServe是Ray生态系统的一个重要组成部分,在开发人员和研究人员中越来越受欢迎。它是一个模型服务系统,从头开始设计,可以快速将机器学习模型(包括大型语言模型)投入生产。
(1)关键特性
- 无缝扩展:RayServe可以从一台机器扩展到一个大型集群,而无需修改代码。
- 框架不可知:它支持任何机器学习框架的模型,没有约束。
- 批处理和调度:高级功能,如自适应批处理和调度是内置的,优化服务管道。
(2)优点
- 灵活性:RayServe可以同时服务于多个模型,甚至同一模型的多个版本。
- 性能:高性能设计,确保低延迟和高吞吐量。
与Ray生态系统集成:作为Ray生态系统的一部分,它受益于Ray的功能,例如分布式训练和细粒度并行性。
(3)缺点
- 学习曲线:虽然功能强大,但由于其广泛的功能,新手最初可能会觉得具有挑战性。
- 资源管理:在集群环境中,谨慎的资源分配对于防止瓶颈至关重要。
Web服务器代码(Server .py):
Python
# Install the required library
# pip install ray[serve]
import ray
from ray import serve
from openllm import TextGenerator
ray.init()
client = serve.start()
def serve_model(request):
generator = TextGenerator("ray/llm-15b")
prompt = request.json.get("prompt", "")
return generator.generate_text(prompt)
client.create_backend("llm_backend", serve_model)
client.create_endpoint("llm_endpoint", backend="llm_backend", route="/generate")
if __name__ == "__main__":
ray.util.connect("localhost:50051")
API调用的查询:随着RayServe服务器的运行,API查询可以被分派到/generate端点。下面是使用curl命令的示例:
Shell
curl -X POST -H "Content-Type: application/json" -d '{"prompt":"The intricacies of RayServe"}' http://localhost:8000/generate
软件工程师的注意事项
随着技术的发展,软件工程师发现自己处于创新和实用性的十字路口。部署大型语言模型(LLM)也不例外。由于这些模型具有强大的功能,它们带来了挑战和顾虑,工程师必须解决这些挑战和顾虑,以充分利用它们的潜力。
部署LLM的技巧和最佳实践:
- 资源分配:考虑到LLM的计算量,确保足够的资源分配是必不可少的。这包括内存和处理能力,以确保模型运行最佳。
- 模型版本控制:随着LLM的发展,维护一个透明的版本控制系统可以帮助跟踪变化,调试问题,并确保可再现性。
- 监控和记录:密切关注模型的性能指标和记录异常情况,可以先发制人,确保顺利操作。
- 安全协议:考虑到LLM可能处理的数据的敏感性,实施强大的安全措施是不可协商的。这包括数据加密、安全API端点和定期漏洞评估。
CI/CD在MLOps中的作用
持续集成和持续部署(CI/CD)是MLOps实现的支柱。它们的意义是多方面的:
- 简化更新:随着LLM的不断发展,CI/CD管道确保更新,改进或错误修复无缝集成和部署,而不会中断现有服务。
- 自动化测试:在任何部署之前,自动化测试可以验证模型的性能,确保任何新的更改不会对其功能产生不利影响。
- 一致性:CI/CD确保了从开发到生产的一致环境,减轻了“它在我的机器上工作”综合症。
- 快速反馈循环:任何问题,无论是模型还是基础设施,都可以快速识别和纠正,从而使系统更具弹性。
总之,对于踏上LLM部署之路的软件工程师来说,将最佳实践与CI/CD的健壮性相结合,可以为在不断发展的MLOps环境中取得成功铺平道路。
原文标题:Generative AI Unleashed: MLOps and LLM Deployment Strategies for Software Engineers