利用Vertex AI进行Llama 2生成式AI模型的部署和预测

2023年09月08日 由 alex 发表 400 0

本文展示了如何使用T4 GPU在Vertex AI Prediction中部署Llama 2聊天模型(7B参数)。该模型将被下载并嵌入到使用Uvicorn服务器的自定义预测图像中。你将在Vertex AI Predictionn1-standard-4中使用具有 1xT4 NVidia GPU 的机器类型。


还提供了基于Streamlit并部署在Cloud Run中的演示,以便轻松地向部署的模型发出请求。


1


模型:Llama 2


Llama 2是Meta大型语言模型的下一代,以免费许可证发布,用于商业和教育用途。


Llama 2是一个基于Transformer的自回归语言模型,具有多种模型大小。该模型的主要特点是:


1. 使用新的公开可用数据组合进行训练,总共约2T个令牌。


2. 与Llama 1 (2K)相比,模型的上下文长度(4K)增加了一倍。


3. 分组查询注意力。


4. 可用大小:7B, 13B, 34B(仅预训练,不聊天),70B参数。


GGML是一个用C语言编写的深度学习张量库,没有其他已知的深度学习库(如Torch, Transformers, Accelerate)的额外依赖。GGML只需要CUDA/ c++来执行GPU。


GGML实现了一些特征来训练和优化商品硬件上的LLM模型。


CTransformers是GGML的python绑定。


在本文中,我们将使用由TheBloke转换并存储在hugging Face中的GGML权重。本例中使用的模型是2位GGML模型,该模型在GGML中使用了新的k-quant方法。


你必须下载模型并将其存储在predict/llama2-7b-chat-ggml目录中,其内容与下面类似。注意,不需要使用handler.py,因为你不会使用TorchServe:


config.json
dolphin-llama2-7b.ggmlv3.q2_K.bin


构建自定义预测容器映像


需要用于预测的自定义容器映像。Vertex AI中的自定义容器映像要求容器必须运行HTTP服务器。具体来说,容器必须侦听并响应活动检查、运行状况检查和预测请求。


你将使用Uvicorn服务器。你必须构建容器映像并将其推送到Artifact Registry:


gcloud auth configure-docker europe-west4-docker.pkg.dev
gcloud builds submit --tag europe-west4-docker.pkg.dev/argolis-rafaelsanchez-ml-dev/ml-pipelines-repo/llama2-7b-chat-q2 --machine-type=e2-highcpu-8 --timeout="2h" --disk-size=300timeout="2h" --disk-size=300


使用e2-highcpu-8时,此构建过程应该花费不到20分钟。


将模型部署到Vertex AI Prediction


使用提供的脚本上传并部署图像到Vertex AI Prediction: python3 upload_custom.py。


上传和部署过程可能需要45分钟,请注意参数deploy_request_timeout,以避免部署过程中出现504 Deadline Exceeded错误:


DEPLOY_IMAGE = 'europe-west4-docker.pkg.dev/argolis-rafaelsanchez-ml-dev/ml-pipelines-repo/llama2-7b-chat-q2' 
HEALTH_ROUTE = "/health"
PREDICT_ROUTE = "/predict"
SERVING_CONTAINER_PORTS = [7080]
model = aiplatform.Model.upload(
    display_name=f'llama2-7B-chat-q2',    
    description=f'llama2-7B-chat-q2 with Uvicorn and FastAPI',
    serving_container_image_uri=DEPLOY_IMAGE,
    serving_container_predict_route=PREDICT_ROUTE,
    serving_container_health_route=HEALTH_ROUTE,
    serving_container_ports=SERVING_CONTAINER_PORTS,
)
print(model.resource_name)
# Retrieve a Model on Vertex
model = aiplatform.Model(model.resource_name)
# Deploy model
endpoint = model.deploy(
    machine_type='n1-standard-4', 
    accelerator_type= "NVIDIA_TESLA_T4",
    accelerator_count = 1,
    traffic_split={"0": 100}, 
    min_replica_count=1,
    max_replica_count=1,
    traffic_percentage=100,
    deploy_request_timeout=1200,
    sync=True,
)
endpoint.wait()


Vertex Prediction 端点 (24x7) 的成本分为vCPU成本(以 vCPU 小时为单位)、RAM 成本(以 GB 小时为单位)和GPU 成本(以小时为单位)。在本例中,我们将使用n1-standard-4with 1xT4 GPUin europe-west4,估计成本为(0.4370 + 0.02761*4 + 0.0037*16)*24*30 = 436.78 USD per month


Streamlit 演示UI


现在可以对部署的模型进行预测了。你可以使用REST API或python SDK,但在本例中,你将使用Streamlit构建一个简单的演示UI。还有许多其他类似的UI库,如Gradio,但这次让我们使用Streamlit。


Streamlit应用程序是基于Cloud Run开发的。你需要首先构建docker,将其上传到Artifact注册表,然后在Cloud Run中部署:


gcloud builds submit --tag europe-west4-docker.pkg.dev/argolis-rafaelsanchez-ml-dev/ml-pipelines-repo/llama2-7b-chat-streamlit 
gcloud run deploy llama2-7b-chat-streamlit --port 8501 --image europe-west4-docker.pkg.dev/argolis-rafaelsanchez-ml-dev/ml-pipelines-repo/llama2-7b-chat-streamlit --allow-unauthenticated --region=europe-west4 --platform=managed


Streamlit应用程序现在部署在Cloud Run中。你可以测试所提供的示例来尝试你的示例。请注意,本文的目的不是评估Llama 2-7B聊天模型的性能,而是展示如何在Vertex AI和Cloud Run中部署这样的模型。使用更高量子化版本或更大的模型(如Llama 2-13B)可能会得到更好的结果。


结论


本文展示了如何在Vertex AI中部署最新的Llama 2模型。它使用单个GPU的顶点AI预测,并通过Streamlit应用程序公开模型。

文章来源:https://medium.com/google-cloud/generative-ai-deploy-and-inference-of-llama-2-in-vertex-ai-prediction-97fae2472dd5
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消