通过阿里云容器服务ACK集成推理引擎DeepGPU-LLM、云原生数据仓库AnalyticDB PostgreSQL等产品,基于开源本地知识库问答项目Langchain-Chatchat,快速构建检索增强生成(RAG)大模型知识库项目。
背景信息
DeepGPU-LLM是阿里云研发的基于GPU云服务器的大语言模型(Large Language Model,LLM)推理引擎,在处理大语言模型任务时,该推理引擎可以为您提供高性能的大模型推理服务。更多信息,请参见什么是推理引擎DeepGPU-LLM。
AnalyticDB PostgreSQL版基于开源项目Greenplum构建,由阿里云深度扩展,兼容ANSI SQL 2003,兼容PostgreSQL/Oracle数据库生态,支持行存储和列存储模式。既提供高性能离线数据处理,也支持高并发在线分析查询。更多信息,请参见AnalyticDB PostgreSQL版产品概述。
开源本地知识库问答项目Langchain-Chatchat相关信息,请参见Langchain-Chatchat。
阿里云不对第三方模型的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。
您应自觉遵守第三方模型的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。
前提条件
创建ACK Pro集群或创建ACK Serverless集群,且集群需要满足以下条件。
需要为集群添加GPU节点。GPU机型需要为V100、A10系列,不支持vGPU。为避免显存不足,建议GPU机型的显存≥24 GiB。
需要为集群配置NAT网关,使您的集群节点和应用具有公网访问能力。
费用说明
如果您在使用ACK集群Pro版或ACK Serverless集群过程中创建了其他的阿里云的云产品资源(例如为集群添加GPU节点和配置NAT网关),您需要根据相应产品的计费规则为您使用的这些资源付费。详细信息,请参见计费说明。
步骤一:部署LangChain-Chatchat应用
登录容器服务管理控制台,在左侧导航栏选择 。
在应用市场页面,搜索langchain-chatchat,然后单击该应用。
在应用详情页面,单击右上角的一键部署,然后按照页面提示进行部署。
在基本信息页面,填写目标集群、命名空间和发布名称后,单击下一步。
在参数配置页面,将参数配置完成后,单击确定。
以下为参数说明。本文以通义千问模型为示例。
参数
说明
默认值
llm.model
llm模型名称。
qwen-7b-chat-aiacc
llm.load8bit
llm模型int8量化。
true
llm.modelPVC
模型存储PVC,挂载到容器内/llm-model目录。
true
llm.pod.replicas
模型推理服务副本数量。
1
llm.pod.instanceType
模型推理服务部署方式,取值:
ecs:部署到ECS节点上。
eci:部署到ECI上。ACK Serverless集群请取值为
eci
。
ecs
chat.pod.replicas
应用服务副本数量。
1
chat.pod.instanceType
应用部署方式,取值:
ecs:部署到ECS节点上。
eci:部署到ECI上。ACK Serverless集群请取值为
eci
。ACK Serverless集群如何使用GPU实例,请参见使用GPU实例。
ecs
chat.kbPVC
知识库本地存储PVC,用于保存知识库文件。挂载到容器内/root/Langchain-Chatchat/knowledge_base目录。
无
db.dbType
向量数据库类型,支持faiss、adb。
faiss
db.embeddingModel
embedding模型。
text2vec-bge-large-chinese
在目标集群的左侧导航栏,选择工作负载 > 无状态,然后选择langchain-chatchat所部署的命名空间,等待Pod就绪,即容器组数量变为1/1。
说明镜像拉取大约需要10~20分钟。
步骤二:访问服务
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在服务页面,查看langchain-chatchat部署的服务名称,服务名称格式为
chat-{releaseName}
。通过浏览器查看langchain-chatchat应用。
执行如下命令,将集群中的chat服务映射到本地8501端口。
# 将chat-chatchat替换为实际service的名称,aigc替换为实际service所在的命名空间。 kubectl port-forward service/chat-chatchat 8501:8501 -n aigc
预期输出:
Forwarding from 127.0.0.1:8501 -> 8501 Forwarding from [::1]:8501 -> 8501 Handling connection for 8501
在浏览器输入
http://localhost:8501
访问服务。预期输出如下所示。
常见问题
如何更换模型?
下载模型。
如需使用其他开源大模型,需自行从Huggingface或Modelscope下载模型,并存储到OSS或NAS中。例如,支持更换以下模型列表。具体支持的模型类型,请以langchain-chatchat页面为准。
模型类型
模型名称
容器内模型文件路径
DeepGPU-LLM转换模型
qwen-7b-chat-aiacc
/llm-model/qwen-7b-chat-aiacc
DeepGPU-LLM转换模型
qwen-14b-chat-aiacc
/llm-model/qwen-14b-chat-aiacc
DeepGPU-LLM转换模型
chatglm2-6b-aiacc
/llm-model/chatglm2-6b-aiacc
DeepGPU-LLM转换模型
baichuan2-7b-chat-aiacc
/llm-model/baichuan2-7b-chat-aiacc
DeepGPU-LLM转换模型
baichuan2-13b-chat-aiacc
/llm-model/baichuan2-13b-chat-aiacc
DeepGPU-LLM转换模型
llama-2-7b-hf-aiacc
/llm-model/llama-2-7b-hf-aiacc
DeepGPU-LLM转换模型
llama-2-13b-hf-aiacc
/llm-model/llama-2-13b-hf-aiacc
开源模型
qwen-7b-chat
/llm-model/Qwen-7B-Chat
开源模型
qwen-14b-chat
/llm-model/Qwen-14B-Chat
开源模型
chatglm2-6b
/llm-model/chatglm2-6b
开源模型
chatglm2-6b-32k
/llm-model/chatglm2-6b-32k
开源模型
baichuan2-7b-chat
/llm-model/Baichuan2-7B-Chat
开源模型
baichuan2-13b-chat
/llm-model/Baichuan2-13B-Chat
开源模型
llama-2-7b-hf
/llm-model/Llama-2-7b-hf
开源模型
llama-2-13b-hf
/llm-model/Llama-2-13b-hf
(可选)转换模型。
本文的Langchain-chatchat项目已安装DeepGPU-LLM转换模型,默认使用DeepGPU-LLM加速后的模型
qwen-7b-chat-aiacc
。如需使用DeepGPU-LLM对其他开源LLM模型进行推理优化,您需要先将huggingface格式的开源模型转换为DeepGPU-LLM支持的格式,然后才能使用DeepGPU-LLM进行模型的推理优化服务。
以qwen-7b-chat为例,您可以使用以下命令在容器中进行模型格式转换;也可以在安装推理引擎DeepGPU-LLM后,使用DeepGPU-LLM进行模型格式转换。具体操作,请参见安装并使用DeepGPU-LLM。
# qwen-7b weight convert huggingface_qwen_convert \ -in_file /llm-model/Qwen-7B-Chat \ -saved_dir /llm-model/qwen-7b-chat-aiacc \ -infer_gpu_num 1 \ -weight_data_type fp16 \ -model_name qwen-7b
创建静态PV及PVC。
以OSS为例,模型下载完成后,执行以下命令,创建Secret。
kubectl create -f oss-secret.yaml
以下为创建Secret的oss-secret.yaml示例文件,需要指定akId和akSecret。
apiVersion: v1 kind: Secret metadata: name: oss-secret namespace: default stringData: akId: <your AccessKeyID> akSecret: <your AccessKeySecret>
执行以下命令,创建静态卷PV。
kubectl create -f model-oss.yaml
以下为创建静态卷PV的model-oss.yaml示例文件,需要指定Bucket、URL等参数。
apiVersion: v1 kind: PersistentVolume metadata: name: model-oss labels: alicloud-pvname: model-oss spec: capacity: storage: 30Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: model-oss nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: "<Your_Bucket_Name>" url: "<Your_OSS_Endpoint>" # 本文的URL为oss-cn-hangzhou.aliyuncs.com。 otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: "/"
执行以下命令,创建静态卷PVC。
kubectl create -f model-pvc.yaml
以下为创建静态卷PVC的model-pvc.yaml示例文件。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: model-pvc spec: accessModes: - ReadOnlyMany resources: requests: storage: 30Gi selector: matchLabels: alicloud-pvname: model-oss
具体参数配置,请参见使用OSS静态存储卷。
更新Helm Value。
如何使用ECI Pod方式部署?
修改参数配置,将llm.pod.instanceType
和chat.pod.instanceType
设置为eci
。ECI类型默认的Annotation及Label配置如下。您可以参考文档ECI Pod Annotation查看Annotation的详细信息。
annotations:
k8s.aliyun.com/eci-use-specs: ecs.gn6i-c8g1.2xlarge,ecs.gn6i-c16g1.4xlarge,ecs.gn6v-c8g1.8xlarge,ecs.gn7i-c8g1.2xlarge,ecs.gn7i-c16g1.4xlarge
k8s.aliyun.com/eci-extra-ephemeral-storage: "50Gi"
labels:
alibabacloud.com/eci: "true"
如果您更改了镜像或者模型,则需要修改注解k8s.aliyun.com/eci-use-specs
及k8s.aliyun.com/eci-extra-ephemeral-storage
,否则会产生因资源不足应用无法启动的问题。ECI产品计费请参考计费概述。
如何加快文本向量化速度?
应用内置的embedding模型为text2vec-bge-large-chinese
,详细信息,请参见text2vec-bge-large-chinese。
chat应用默认使用CPU运行embedding模型,可通过在chat.pod.resources
中申请GPU资源来提高文本向量化速度。
resources:
limits:
nvidia.com/gpu: "1"
requests:
cpu: "4"
memory: 8Gi
nvidia.com/gpu: "1"
如何指定向量数据库类型?
支持的向量数据库包括faiss和阿里云云原生数据仓库AnalyticDB PostgreSQL。
faiss是由Facebook开源的一款内存向量库,faiss内存数据库部署在chat pod中,受chat pod的资源约束。如果使用faiss向量数据库,建议增加chat pod的内存资源。
云原生数据仓库AnalyticDB PostgreSQL是一种大规模并行处理(MPP)数据仓库服务,可提供海量数据的在线分析服务。
Langchain-chatchat项目中使用的ADB需要满足以下条件:
需开启向量引擎优化功能。
计算节点规格≥ 4核16 GiB。
修改参数
db.dbType
为adb
,并填写db.adb
中的数据库信息。
db:
dbType: adb
embeddingModel: text2vec-bge-large-chinese
adb:
pgHost: "pg.host.demo.com"
pgPort: "5432"
pgDataBase: "langchain"
pgUser: "langchain"
pgPassword: "pg_password"
如何修改服务副本数量?
将llm.pod.replicas
设置为需要的推理服务副本数量。
llm:
model: qwen-7b-chat-aiacc
modelPVC: "" # PVC名称。
load8bit: true
pod:
replicas: 1 # 模型推理服务副本数量。
将chat.pod.replicas
设置为需要的应用服务副本数量。
chat:
kbPVC: ""
pod:
replicas: 1 # 模型应用服务副本数量。
释放资源
使用ACK集群Pro版和ACK Serverless集群所产生的费用包括两部分。一部分是集群管理费用,由容器服务ACK收取。另一部分是所使用的其他阿里云云产品资源费用,按照各云产品规定的计费规则计费,由各云产品收取。完成该实践后,请参考以下场景处理集群。
联系我们
如果您在ACK AIGC教程实践过程中有任何疑问或建议,欢迎您加入钉群(钉群号:31850017754)交流。