基于开源本地知识库问答项目Langchain-Chatchat, 集成了阿里云推理引擎DeepGPU-LLM,AnalyticDB for PostgreSQL向量数仓等产品,快速构建检索增强生成(RAG)大模型知识库项目。
阿里云不对第三方模型的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。您应自觉遵守第三方模型的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。
- 已创建ACK GPU集群。具体操作,请参见如何创建GPU集群。
- GPU机型需要为V100、A10系列,不支持vgpu。为避免显存不足,建议GPU机型显存大于等于24G。
Langchain-chatchat由Chat及LLM组成。
- Chat:ChatBot应用,支持LLM问答和知识库问答。Database用于存储知识库Embedding后的向量。Database支持
faiss
及ADB
两种类型。 - LLM:模型推理服务,基于开源的FastChat项目部署LLM模型。默认使用DeepGPU-LLM加速推理的qwen-7b-chat-aiacc模型。支持替换为其他开源模型或DeepGPU-LLM加速模型,替换模型可通过pvc挂载到容器中。
- 登录容器服务管理控制台,在左侧导航栏选择集群。
- 在集群列表页面,单击目标集群名称,选择工作负载 > 无状态。
- 在无状态列表页面,选择Langchain-chatchat部署的命名空间,等待Pod就绪,即容器组数量变为1/1。( 注意:镜像拉取大约需要10-20分钟)
- 在左侧导航栏,选择网络 > 服务。查看Langchain-chatchat部署的服务名称,service名称格式为chat-{releaseName}。
- 将服务转发到本地,将占用本地的8501端口,参考port-forward。
# 将chat-langchain替换为具体service的名称
kubectl port-forward service/chat-langchain 8501:8501
命令执行成功后,输出内容如下。
Forwarding from 127.0.0.1:8501 -> 8501
Forwarding from [::1]:8501 -> 8501
- 在本地通过浏览器访问服务http://localhost:8501。
参数 | 描述 | 默认值 |
---|---|---|
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)。 |
ecs |
chat.kbPVC | 已存在的PVC,用于保存本地知识库文件 | 无 |
db.dbType | 向量数据库类型,支持faiss, adb | faiss |
db.embeddingModel | embedding模型 | text2vec-bge-large-chinese |
组件 | 端口 | 描述 |
---|---|---|
chat | 8501 | Web UI 页面 |
chat | 7861 | FastAPI Docs 页面 |
llm | 8888 | 模型推理接口 |
修改参数配置,将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
annotation, 否则会导致应用因为资源不足无法启动。
ECI Pod方式部署不支持DeepGPU-LLM,需使用开源模型。
设置llm.pod.replicas
为需要的推理服务副本数量。
设置chat.pod.replicas
为需要的应用服务副本数量。
faiss是由facebook开源的一款内存向量库,项目地址https://github.com/facebookresearch/faiss。
faiss内存数据库部署在chat pod中,受chat pod的资源约束。如果使用faiss向量数据库,建议增加chat pod的内存资源。
云原生数据仓库AnalyticDB
PostgreSQL版是一种大规模并行处理(MPP)数据仓库服务,可提供海量数据在线分析服务。产品简介请参考文档什么是云原生数据仓库。
Langchain-chatchat项目中使用的ADB需要满足以下条件:
- 需开启向量引擎优化功能
- 计算节点规格>=4C16G
应用内置的embedding模型为text2vec-bge-large-chinese,详情请参考hugging face文档。
chat应用默认使用CPU运行embedding模型,可通过在chat.pod.resources
中申请GPU资源来提高文本向量化速度。
模型类型 | 模型名称 | 容器内模型文件路径 |
---|---|---|
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 |
DeepGPU-LLM是阿里云研发的基于GPU云服务器的大语言模型(Large Language Model,LLM)推理引擎,旨在优化大语言模型在GPU云服务器上的推理过程,通过优化和并行计算等技术手段,提供免费的高性能、低延迟推理服务。DeepGPU-LLM使用方式请参考文档使用DeepGPU-LLM实现大语言模型在GPU上的推理优化。
Langchain-chatchat项目已安装DeepGPU-LLM,默认使用DeepGPU-LLM加速后的模型qwen-7b-chat-aiacc。
如想要使用DeepGPU-LLM对其他开源LLM模型进行推理优化,您需要先将huggingface格式的开源模型转换为DeepGPU-LLM支持的格式,然后才能使用DeepGPU_LLM进行模型的推理优化服务。以qwen-7b-chat为例,可使用如下命令在容器中进行模型格式转换:
#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
- 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>" # oss-cn-hangzhou.aliyuncs.com
otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other"
path: "/"
- 执行以下命令创建静态卷PVC。
kubectl create -f pvc-oss.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静态存储卷。
- NAS模型
- 执行以下命令创建静态卷PV。
kubectl create -f model-nas.yaml
以下为创建静态卷PV的model-nas.yaml示例文件,需要指定NAS服务地址和路径。
apiVersion: v1
kind: PersistentVolume
metadata:
name: model-nas
labels:
alicloud-pvname: model-nas
spec:
capacity:
storage: 30Gi
accessModes:
- ReadWriteMany
csi:
driver: nasplugin.csi.alibabacloud.com
volumeHandle: model-nas
volumeAttributes:
server: "<your nas server>"
path: "<your model path>"
mountOptions:
- nolock,tcp,noresvport
- vers=3
- 执行以下命令创建静态卷PVC。
kubectl create -f model-pvc.yaml
以下为创建静态卷PVC的model-pvc.yaml示例文件。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: model-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 30Gi
selector:
matchLabels:
alicloud-pvname: model-nas
参数配置可参考使用NAS静态存储卷。
- 登陆容器服务控制台,选择对应的ACK集群。
- 点击左侧菜单栏,选择应用->Helm,找到部署的LLM服务
- 点击右侧更新按钮,更改
llm.model
为新的模型名称,llm.modelPVC
为存储新模型的pvc名称。模型名称及模型挂载路径参考支持的模型列表。
版本号 | 变更时间 | 变更内容 |
---|---|---|
0.1.0 |
2023年12月26日 | 支持阿里云推理引擎DeepGPU-LLM,AnalyticDB for PostgreSQL向量数仓 |