接上篇,我们提到,可以使用vllm这个框架加载合并后的lora百川模型。
在实际落地中,如果我们有多个微调任务,难道要分别部署多个微调之后的模型吗?这对GPU的消耗也太高了吧!一种很直接的思路是,将多个微调任务整合起来,一次性lora微调多个任务,这样就只需要部署一个微调模型了。
但如果接到了新的微调需求,就需要把所有lora任务都重新训练一遍,以免遗忘。这样很不方便,从前上线的微调任务在融入了新微调训练数据之后又需要重新训练和重新测试。vllm推出了一个很棒的功能,可以分别加载base模型和lora层,并且可以加载多个lora层,通过指定lora层名字确定到底调用哪一个。这种特性是非常有价值的:同时加载N套微调参数,这样做不会影响大模型原有能力,通过选择微调层可以提供给用户不同的专项微调能力,而且可以实现权限管控,防止敏感信息泄露,此外更多新微调能力的接入也非常方便。可以说,vllm这项设计将使得它显著胜出其他不具备这种能力的LLM加速推理框架。
下面给出一个openshift上部署vllm 单基座多lora的例子
kind: Deployment
apiVersion: apps/v1
metadata:
name: YOUR-APP-NAME
namespace: YOU-NAMESPACE
spec:
replicas: 0
selector:
matchLabels:
app: YOUR-APP-NAME
template:
metadata:
creationTimestamp: null
labels:
app: YOUR-APP-NAME
spec:
restartPolicy: Always
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
nodeName: YOUR-COMPUTE-NODE
securityContext:
runAsUser: 0
containers:
- resources:
limits:
cpu: '6'
memory: 64Gi
nvidia.com/gpu: '2'
requests:
cpu: 200m
memory: 16Gi
nvidia.com/gpu: '2'
terminationMessagePath: /dev/termination-log
name: vllm-container
env:
- name: HUGGING_FACE_HUB_TOKEN
value: <secret>
- name: NVIDIA_VISIBLE_DEVICES
value: all
- name: CUDA_VISIBLE_DEVICES
value: '0'
ports:
- containerPort: 8000
protocol: TCP
imagePullPolicy: IfNotPresent
volumeMounts:
- name: model-volume
mountPath: /models/Qwen1.5-14B-Chat
subPath: Qwen1.5-14B-Chat
- name: model-volume
mountPath: /models/finetune-qwen-14b-risk
subPath: finetune-qwen-14b-risk
- name: model-volume
mountPath: /models/finetune-qwen-14b-test
subPath: finetune-qwen-14b-test
terminationMessagePolicy: File
image: 'vllm-openai:v0.4.0.post1'
args:
- '--model'
- /models/Qwen1.5-14B-Chat
- '--gpu-memory-utilization'
- '0.55'
- '--trust-remote-code'
- '--chat-template'
- /models/Qwen1.5-14B-Chat/qwen1_5_14B_template.jinja
- '--dtype'
- float16
- '--max-model-len'
- '1000'
- '--max-num-seqs'
- '10'
- '--lora-modules'
- lora1=/models/finetune-qwen-14b-risk
- lora2=/models/finetune-qwen-14b-test
- '--enable-lora'
- '--max-lora-rank'
- '64'
volumes:
- name: model-volume
persistentVolumeClaim:
claimName: gpu-g2-pvc
dnsPolicy: ClusterFirst
tolerations:
- key: nvidia.com/gpu
effect: NoSchedule
多卡部署
记得升级nccl
args部分增加
- '--tensor-parallel-size=2'
- '--disable-custom-all-reduce'
- '--max-context-len-to-capture=300000'