生成式人工智能潛力的釋放:軟件工程師的MLOps和LLM部署策略
譯文譯者 | 李睿
審校 | 重樓
生成式人工智能最近的爆發(fā)標志著機器學(xué)習(xí)模型的能力發(fā)生了翻天覆地的變化。像DALL-E 2、GPT-3和Codex這樣的人工智能系統(tǒng)表明,人工智能系統(tǒng)在未來可以模仿人類獨特的技能,例如創(chuàng)作藝術(shù)、進行對話,甚至編寫軟件。然而,有效地部署和管理這些新興的大型語言模型(LLM)給組織帶來了巨大的挑戰(zhàn)。
本文將為軟件工程師提供支持研究的解決方案策略,通過利用機器學(xué)習(xí)運營(MLOps)最佳實踐來順利集成生成式人工智能,并詳細介紹經(jīng)過驗證的技術(shù)以部署LLM以優(yōu)化效率,在生產(chǎn)中對其進行監(jiān)控,不斷更新以提高性能,并確保它們在各種產(chǎn)品和應(yīng)用程序中協(xié)同工作。通過遵循所提出的方法,人工智能從業(yè)者可以規(guī)避常見的陷阱,并成功地利用生成式人工智能的力量來創(chuàng)造商業(yè)價值并讓用戶受益。
生成式人工智能時代
生成式人工智能是人工智能進步的證明,標志著與傳統(tǒng)模型的重大背離。這種方法的重點是根據(jù)從大量數(shù)據(jù)中識別出的模式生成新的內(nèi)容,無論是文本、圖像還是聲音。這種能力具有深遠的含義。
由于生成式人工智能的應(yīng)用,從生命科學(xué)行業(yè)到娛樂行業(yè),各行各業(yè)都在見證著革命性的變化。無論是開發(fā)新的藥物還是創(chuàng)作音樂,這項技術(shù)的影響是不可否認的,并將繼續(xù)塑造許多行業(yè)的未來發(fā)展軌跡。
理解大型語言模型(LLM)
大型語言模型通常稱為LLM,是人工智能模型的一個子集,旨在理解和生成類似人類的文本。它們處理和產(chǎn)生大量連貫和場景相關(guān)的文本的能力使其與眾不同。然而,LLM具有革命性的特性也帶來了復(fù)雜性。考慮到這些模型的大小和計算需求,有效地部署和服務(wù)這些模型需要一種細致入微的方法。將LLM集成到應(yīng)用程序中的復(fù)雜性強調(diào)了對專門策略和工具的需求。
LLM部署框架
1.AI-Optimized vLLM
AI-Optimized vLLM是一個專門的框架,旨在滿足當(dāng)代人工智能應(yīng)用的需求。這一架構(gòu)經(jīng)過精心設(shè)計以處理大量數(shù)據(jù)集,能夠確保即使在困難的條件下也能快速響應(yīng)。
(1)關(guān)鍵特性
- 高效的數(shù)據(jù)處理:能夠處理大型數(shù)據(jù)集,沒有明顯的延遲
- 快速響應(yīng)時間:優(yōu)化周轉(zhuǎn)過程,確保及時交付結(jié)果
- 靈活集:旨在與各種應(yīng)用程序和平臺兼容
(2)優(yōu)點
- 可擴展性:可以輕松處理不斷增加的數(shù)據(jù)負載,而不會影響性能
- 用戶友好界:簡化模型集成和預(yù)測過程
(3)缺點
- 資源密集型:這可能需要大量的計算資源來實現(xiàn)最佳性能。
- 學(xué)習(xí)曲線:雖然用戶友好,但對于入門的新手可能需要時間來充分利用它的功能。
(4)示例代碼
離線批量服務(wù):
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服務(wù)器:
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文本推理是一個在處理基于語言的任務(wù)時以其適應(yīng)性和效率而表現(xiàn)突出的框架。它提供了一種精簡的文本生成方法,強調(diào)速度和連貫性。
(1)關(guān)鍵特性
- 自適應(yīng)文本生成:能夠生成場景相關(guān)和連貫的文本
- 優(yōu)化架構(gòu):完成快速文本生成任務(wù)
- 多功能應(yīng)用:適用于各種基于文本的人工智能任務(wù),而不僅僅是生成
(2)優(yōu)點
- 高質(zhì)量輸出:始終如一地生成連貫且與場景相關(guān)的文本
- 易于集成:簡化的API和功能使其易于集成到項目中
(3)缺點
- 專用性:雖然對于文本任務(wù)非常出色,但對于非文本人工智能操作可能不太通用。
- 資源要求:最佳性能可能需要相當(dāng)大的計算能力。
與Docker集成的Web服務(wù)器示例代碼
(1)Web服務(wù)器代碼(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)構(gòu)建和運行Docker容器:要構(gòu)建Docker鏡像并運行容器,通常會使用以下命令:
Shell
docker build -t genai_web_server .
docker run -p 5000:5000 genai_web_server
(4)API調(diào)用:一旦服務(wù)器啟動并在Docker容器中運行,API調(diào)用就可以使用curl或任何HTTP客戶端工具對/generate_text端點進行調(diào)用:
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量身定制的。它的設(shè)計理念促進了LLM在各種環(huán)境中的無縫部署、管理和擴展。
(1)關(guān)鍵特性
- 可擴展架構(gòu):用于處理小規(guī)模應(yīng)用程序和企業(yè)級系統(tǒng)的需求
- 直觀的API:簡化的接口,減少學(xué)習(xí)曲線,提高開發(fā)人員的生產(chǎn)力
- 優(yōu)化LLM:專門的組件迎合大型語言模型的獨特要求
(2)優(yōu)點
- 多功能性:適用于許多應(yīng)用程序,從聊天機器人到內(nèi)容生成系統(tǒng)
- 效率:簡化操作,確??焖夙憫?yīng)時間和高吞吐量
- 社區(qū)支持:由一個充滿活力的社區(qū)支持,有助于持續(xù)改進
(3)缺點
- 初始設(shè)置的復(fù)雜性:雖然平臺是用戶友好的,但初始設(shè)置可能需要更深入的了解。
- 資源強度:對于更大的模型,平臺可能需要大量的計算資源。
Web服務(wù)器代碼(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調(diào)用:在服務(wù)器活動運行的情況下,API調(diào)用可以定向到/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生態(tài)系統(tǒng)的一個重要組成部分,在開發(fā)人員和研究人員中越來越受歡迎。它是一個模型服務(wù)系統(tǒng),從頭開始設(shè)計,可以快速將機器學(xué)習(xí)模型(包括大型語言模型)投入生產(chǎn)。
(1)關(guān)鍵特性
- 無縫擴展:RayServe可以從一臺機器擴展到一個大型集群,而無需修改代碼。
- 框架不可知:它支持任何機器學(xué)習(xí)框架的模型,沒有約束。
- 批處理和調(diào)度:高級功能,如自適應(yīng)批處理和調(diào)度是內(nèi)置的,優(yōu)化服務(wù)管道。
(2)優(yōu)點
- 靈活性:RayServe可以同時服務(wù)于多個模型,甚至同一模型的多個版本。
- 性能:高性能設(shè)計,確保低延遲和高吞吐量。
與Ray生態(tài)系統(tǒng)集成:作為Ray生態(tài)系統(tǒng)的一部分,它受益于Ray的功能,例如分布式訓(xùn)練和細粒度并行性。
(3)缺點
- 學(xué)習(xí)曲線:雖然功能強大,但由于其廣泛的功能,新手最初可能會覺得具有挑戰(zhàn)性。
- 資源管理:在集群環(huán)境中,謹慎的資源分配對于防止瓶頸至關(guān)重要。
Web服務(wù)器代碼(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調(diào)用的查詢:隨著RayServe服務(wù)器的運行,API查詢可以被分派到/generate端點。下面是使用curl命令的示例:
Shell
curl -X POST -H "Content-Type: application/json" -d '{"prompt":"The intricacies of RayServe"}' http://localhost:8000/generate
軟件工程師的注意事項
隨著技術(shù)的發(fā)展,軟件工程師發(fā)現(xiàn)自己處于創(chuàng)新和實用性的十字路口。部署大型語言模型(LLM)也不例外。由于這些模型具有強大的功能,它們帶來了挑戰(zhàn)和顧慮,工程師必須解決這些挑戰(zhàn)和顧慮,以充分利用它們的潛力。
部署LLM的技巧和最佳實踐:
- 資源分配:考慮到LLM的計算量,確保足夠的資源分配是必不可少的。這包括內(nèi)存和處理能力,以確保模型運行最佳。
- 模型版本控制:隨著LLM的發(fā)展,維護一個透明的版本控制系統(tǒng)可以幫助跟蹤變化,調(diào)試問題,并確??稍佻F(xiàn)性。
- 監(jiān)控和記錄:密切關(guān)注模型的性能指標和記錄異常情況,可以先發(fā)制人,確保順利操作。
- 安全協(xié)議:考慮到LLM可能處理的數(shù)據(jù)的敏感性,實施強大的安全措施是不可協(xié)商的。這包括數(shù)據(jù)加密、安全API端點和定期漏洞評估。
CI/CD在MLOps中的作用
持續(xù)集成和持續(xù)部署(CI/CD)是MLOps實現(xiàn)的支柱。它們的意義是多方面的:
- 簡化更新:隨著LLM的不斷發(fā)展,CI/CD管道確保更新,改進或錯誤修復(fù)無縫集成和部署,而不會中斷現(xiàn)有服務(wù)。
- 自動化測試:在任何部署之前,自動化測試可以驗證模型的性能,確保任何新的更改不會對其功能產(chǎn)生不利影響。
- 一致性:CI/CD確保了從開發(fā)到生產(chǎn)的一致環(huán)境,減輕了“它在我的機器上工作”綜合癥。
- 快速反饋循環(huán):任何問題,無論是模型還是基礎(chǔ)設(shè)施,都可以快速識別和糾正,從而使系統(tǒng)更具彈性。
總之,對于踏上LLM部署之路的軟件工程師來說,將最佳實踐與CI/CD的健壯性相結(jié)合,可以為在不斷發(fā)展的MLOps環(huán)境中取得成功鋪平道路。
原文標題:Generative AI Unleashed: MLOps and LLM Deployment Strategies for Software Engineers