使用阿里云服务网格高效管理LLM流量:(一)流量路由

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
NLP自然语言处理_高级版,每接口累计50万次
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: ASM支持通过LLMProvider和LLMRoute资源管理大型语言模型流量。LLMProvider负责注册LLM服务,LLMRoute负责设定流量规则,应用可灵活切换模型,满足不同场景需求。

【阅读原文】戳:使用阿里云服务网格高效管理LLM流量:(一)流量路由

人工智能领域由于大型语言模型(LLM)的出现而迎来了飞速发展。这些先进的人工智能模型能够和人类通过自然语言的方式顺畅沟通,并且具有一定的推理能力,已经完全改变了人类获取信息以及处理文本数据的方式。国内外厂商相继推出了自己的大模型服务,并且提供了适应特定行业需求的领域模型。越来越多的应用正在接入LLM。

 

HTTP协议一直以来都是服务网格中的一等公民,现有的LLM提供商也都以HTTP请求的方式向用户提供服务。ASM在HTTP协议的基础上,专门针对LLM请求协议进行了增强,目前已经支持常见的LLM提供商的协议标准,能够为用户提供简单高效的接入体验,可以实现LLM的灰度接入、按比例路由以及多种可观测能力。应用使用ASM接入LLM之后,可以进一步将应用与LLMProvider解耦,提升整个链路的健壮性和可维护性。

 

本系列文档将从流量路由、可观测,安全三个角度介绍如何在ASM中管理LLM流量。本文为该系列第一篇,重点介绍流量路由能力。

 

 

 

功能概述

 

 

在服务网格中,如果要将普通的外部HTTP服务注册到集群中,需要首先配置ServiceEntry,然后通过VirtualService配置相应的路由规则,之后便可以通过网关或者业务Pod调用这个外部服务。如果不注册直接调用,将无法享受到服务网格提供的流量管理、可观测以及安全能力。

 

 

然而原生的ServiceEntry只能处理普通的TCP以及HTTP协议的流量,LLM请求在HTTP协议之上有一些特定的高级参数,普通的ServiceEntry无法直接支持。在这种情况下,ASM提出了两种新的资源:

 

LLMProvider:对应HTTP协议的ServiceEntry。用户可以使用该资源将外部的LLM服务提供商注册到集群中来,并且可以在此处配置LLM提供商的Host、APIKey以及其他模型参数。

 

LLMRoute:对应HTTP协议的VirtualService。用户可以使用LLMRoute配置流量规则,将流量按照比例或者一定的匹配条件分发给特定的LLMProvider。

 

 

本文将通过两个示例,演示如何使用LLMProvider和LLMRoute管理集群中的LLM流量。

 

 

 

使用前提

 

 

已添加集群到ASM实例[1],且ASM实例版本为v1.21.6.88及以上。

 

已启用Sidecar注入。具体操作,请参见配置Sidecar注入策略[2]

 

已经开通模型服务灵积,并且获取了可用的API_KEY。具体操作,请参见如何开通DashScope并创建API-KEY_模型服务灵积(DashScope)-阿里云帮助中心[3]

 

本文的第二个示例要求开通Moonshot的API服务,并且获取了可用的API_KEY。具体操作,参见Moonshot AI 开放平台[4]

 

 

 

步骤一:创建测试应用sleep

 

 

使用ACK集群的kubeconfig,应用如下YAML,创建sleep应用。

 

apiVersion: v1
kind: ServiceAccount
metadata:
  name: sleep
---
apiVersion: v1
kind: Service
metadata:
  name: sleep
  labels:
    app: sleep
    service: sleep
spec:
  ports:
  - port: 80
    name: http
  selector:
    app: sleep
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sleep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sleep
  template:
    metadata:
      labels:
        app: sleep
    spec:
      terminationGracePeriodSeconds: 0
      serviceAccountName: sleep
      containers:
      - name: sleep
        image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/curl:asm-sleep
        command: ["/bin/sleep", "infinity"]
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - mountPath: /etc/sleep/tls
          name: secret-volume
      volumes:
      - name: secret-volume
        secret:
          secretName: sleep-secret
          optional: true
---

 

 

 

步骤二:创建灵积模型服务的LLMProvider

 

 

使用ASM集群的Kubeconfig,创建如下资源:

 

apiVersion: istio.alibabacloud.com/v1beta1
kind: LLMProvider
metadata:  
  name: dashscope-qwen
spec:
  host: dashscope.aliyuncs.com # 不同provider之间不能重复
  path: /compatible-mode/v1/chat/completions
  configs:
    defaultConfig:
      openAIConfig:
        model: qwen-1.8b-chat  # 默认使用开源大模型
        stream: false
        apiKey: ${dashscope的API_KEY}

 

创建完成之后,可以在sleep pod中直接以HTTP协议访问dashscope.aliyuncs.com。ASM的Sidecar会自动将请求转换成符合OpenAI LLM协议的格式(模型服务灵积兼容OpenAI的LLM协议),给请求添加上APIKey,并且将HTTP协议升级为HTTPS,最终发送给集群外部的LLM提供商服务器。

 

使用ACK的kubeconfig执行以下命令进行测试:

 

kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
--header 'Content-Type: application/json' \
--data '{
    "messages": [
        {"role": "user", "content": "请介绍你自己"}
    ]
}'
{"choices":[{"message":{"role":"assistant","content":"我是来自阿里云的大规模语言模型,我叫通义千问。我的主要功能是回答用户的问题、提供信息和进行对话交流。我可以理解用户的提问,并基于自然语言生成相应的答案或建议。我也可以学习新的知识,并将其应用于各种场景中。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":3,"completion_tokens":72,"total_tokens":75},"created":1720680044,"system_fingerprint":null,"model":"qwen-1.8b-chat","id":"chatcmpl-1c33b950-3220-9bfe-9066-xxxxxxxxxxxx"}

 

 

 

步骤三:创建LLMRoute,实现不同类型的用户使用不同的模型

 

 

上一步我们使用的模型是由灵积服务提供的qwen-1.8b-chat,它是通义千问开源系列模型中参数量比较小的一个。本小节要实现的功能是:普通用户发起调用,默认使用qwen-1.8b-chat;订阅用户调用时,使用更加强大的qwen-turbo模型。订阅用户的请求上会有一个特殊的header来标识用户身份。

 

 

使用ASM集群的kubeconfig,创建如下LLMRoute:

 

apiVersion: istio.alibabacloud.com/v1beta1
kind: LLMRoute
metadata:  
  name: dashscope-route
spec:
  host: dashscope.aliyuncs.com # 不同provider之间不能重复
  rules:
  - name: vip-route
    matches:
    - headers:
        user-type:
          exact: subscriber  # 订阅用户专用的路由项,后面会在provider中提供专用的配置。
    backendRefs:
    - providerHost: dashscope.aliyuncs.com
  - backendRefs:
    - providerHost: dashscope.aliyuncs.com

 

该配置会让携带了user-type:subscriber的请求走vip-route这条路由规则。

 

使用ASM集群的kubeconfig修改LLMProvider,增加路由级别配置:

 

apiVersion: istio.alibabacloud.com/v1beta1
kind: LLMProvider
metadata:  
  name: dashscope-qwen
spec:
  host: dashscope.aliyuncs.com
  path: /compatible-mode/v1/chat/completions
  configs:
    defaultConfig:
      openAIConfig:
        model: qwen-1.8b-chat  # 默认使用开源模型
        stream: false
        apiKey: ${dashscope的API_KEY}
    routeSpecificConfigs:
      vip-route:  # 订阅用户的专用路由项
        openAIConfig:
          model: qwen-turbo  # 订阅用户使用qwen-turbo模型
          stream: false
          apiKey: ${dashscope的API_KEY}

 

使用ACK集群的kubeconfig执行测试:

 

kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
--header 'Content-Type: application/json' \
--data '{
    "messages": [
        {"role": "user", "content": "请介绍你自己"}
    ]
}'
{"choices":[{"message":{"role":"assistant","content":"我是来自阿里云的大规模语言模型,我叫通义千问。我的主要功能是回答用户的问题、提供信息和进行对话交流。我可以理解用户的提问,并基于自然语言生成相应的答案或建议。我也可以学习新的知识,并将其应用于各种场景中。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":3,"completion_tokens":72,"total_tokens":75},"created":1720682745,"system_fingerprint":null,"model":"qwen-1.8b-chat","id":"chatcmpl-3d117bd7-9bfb-9121-9fc2-xxxxxxxxxxxx"}

 

kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
--header 'Content-Type: application/json' \
--header 'user-type: subscriber' \
--data '{
    "messages": [
        {"role": "user", "content": "请介绍你自己"}
    ]
}'
{"choices":[{"message":{"role":"assistant","content":"你好,我是来自阿里云的大规模语言模型,我叫通义千问。作为一个AI助手,我的目标是帮助用户获得准确、有用的信息,解决他们的问题和困惑。我可以提供各种领域的知识,进行对话交流,甚至创作文字,但请注意,我所提供的所有内容都是基于我所训练的数据,可能无法包含最新的事件或个人信息。如果你有任何问题,欢迎随时向我提问!"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":11,"completion_tokens":85,"total_tokens":96},"created":1720683416,"system_fingerprint":null,"model":"qwen-turbo","id":"chatcmpl-9cbc7c56-06e9-9639-a50d-xxxxxxxxxxxx"}

 

可以看到订阅用户使用了qwen-turbo模型。

 

 

 

步骤四:按比例分发流量

 

 

在生产环境中,由于业务的变动,可能需要切换不同的LLMProvider。ASM也提供了在不同的LLMProvider之间按比例路由的能力。此处我们演示将50%的流量分发给Moonshot,50%的流量分发给灵积服务。

 

 

demo-llm-server是集群中一个普通的service,没有对应任何endpoint。

 

首先需要新创建一个LLMProvider,使用ASM的kubeconfig,创建如下资源:

 

apiVersion: istio.alibabacloud.com/v1beta1
kind: LLMProvider
metadata:  
  name: moonshot
spec:
  host: api.moonshot.cn # 不同provider之间不能重复
  path: /v1/chat/completions
  configs:
    defaultConfig:
      openAIConfig:
        model: moonshot-v1-8k
        stream: false
        apiKey: ${Moonshot的API_KEY}

 

接下来使用ACK的kubeconfig创建一个Service,客户端访问这个Service,通过我们配置的路由规则,流量会被按比例分发给不同的LLMProvider。

 

apiVersion: v1
kind: Service
metadata:
  name: demo-llm-server
  namespace: default
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: none
  type: ClusterIP

 

配置LLMRoute,将访问demo-llm-server的请求按照比例路由给灵积服务以及Moonshot。使用ASM集群的kubeconfig应用如下配置:

 

apiVersion: istio.alibabacloud.com/v1beta1
kind: LLMRoute
metadata:
  name: demo-llm-server
  namespace: default
spec:
  host: demo-llm-server
  rules:
  - backendRefs:
    - providerHost: dashscope.aliyuncs.com
      weight: 50
    - providerHost: api.moonshot.cn
      weight: 50
    name: migrate-rule

 

使用ACK集群的kubeconfig多次执行下面的测试,可以看到请求大约有50%被发送给Moonshot,50%被发送给灵积服务。

 

kubectl exec deployment/sleep -it -- curl --location 'http://demo-llm-server' \
--header 'Content-Type: application/json' \
--data '{
    "messages": [
        {"role": "user", "content": "请介绍你自己"}
    ]
}'

 

示例输出:

 

{"id":"cmpl-cafd47b181204cdbb4a4xxxxxxxxxxxx","object":"chat.completion","created":1720687132,"model":"moonshot-v1-8k","choices":[{"index":0,"message":{"role":"assistant","content":"你好!我是Mina,一个AI语言模型。我的主要功能是帮助人们生成类似人类的文本。我可以写文章、回答问题、提供建议等等。我是由大量文本数据训练出来的,所以我可以生成各种各样的文本。我的目标是帮助人们更有效地沟通和解决问题。"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":59,"total_tokens":70}}
{"choices":[{"message":{"role":"assistant","content":"我是来自阿里云的大规模语言模型,我叫通义千问。我的主要功能是回答用户的问题、提供信息和进行对话交流。我可以理解用户的提问,并基于自然语言生成相应的答案或建议。我也可以学习新的知识,并将其应用于各种场景中。如果您有任何问题或需要帮助,请随时告诉我,我会尽力为您提供支持。"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":3,"completion_tokens":72,"total_tokens":75},"created":1720687164,"system_fingerprint":null,"model":"qwen-1.8b-chat","id":"chatcmpl-2443772b-4e41-9ea8-9bed-xxxxxxxxxxxx"}

 

 

 

总结

 

 

本文主要介绍了如何在ASM中使用LLMProvider和LLMRoute管理大语言模型流量。通过相关配置可以让应用与大模型进一步解耦。应用只需要在请求中提供业务有关的信息即可,ASM会根据LLMRoute和LLMProvider配置,动态的选择路由目的地,添加预先配置好的请求参数,然后发送给对应的Provider。基于此,您可以快速变更Provider配置、根据请求特征选择不同模型、在Provider之间灰度流量等,极大降低了大模型接入集群的成本。此外,本文提到的所有LLM相关的能力,不仅可以在Sidecar上生效,同样可以在ASM出口网关和入口网关上使用。

 

相关链接:

 

[1] 已添加集群到ASM实例

https://help.aliyun.com/zh/asm/getting-started/add-a-cluster-to-an-asm-instance-1

 

[2] 配置Sidecar注入策略

https://help.aliyun.com/zh/asm/user-guide/configuring-a-sidecar-injection-policy

 

[3] 如何开通DashScope并创建API-KEY_模型服务灵积(DashScope)-阿里云帮助中心

https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key?spm=a2c4g.11186623.0.0.7eaa5b78kNMzpk

 

[4] Moonshot AI开放平台

https://platform.moonshot.cn/docs/intro


我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。

欢迎关注 “阿里云基础设施”同名微信微博知乎

获取关于我们的更多信息~

相关文章
|
3月前
|
弹性计算 自然语言处理 开发工具
通过阿里云 Milvus 和 LangChain 快速构建 LLM 问答系统
本文介绍如何通过整合阿里云Milvus、阿里云DashScope Embedding模型与阿里云PAI(EAS)模型服务,构建一个由LLM(大型语言模型)驱动的问题解答应用,并着重演示了如何搭建基于这些技术的RAG对话系统。
通过阿里云 Milvus 和 LangChain 快速构建 LLM 问答系统
|
7天前
|
人工智能 Prometheus 监控
使用NVIDIA NIM在阿里云ACK中加速LLM推理
介绍在阿里云ACK集群上结合AI套件能力快速部署NVIDIA NIM模型推理服务,同时提供全面的监控指标和实现弹性伸缩。
|
2月前
|
Cloud Native 容器 Kubernetes
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
本文简要讨论了使用流量泳道来实现全链路流量灰度管理的场景与方案,并回顾了阿里云服务网格 ASM 提供的严格与宽松两种模式的流量泳道、以及这两种模式各自的优势与挑战。接下来介绍了一种基于 OpenTelemetry 社区提出的 baggage 透传能力实现的无侵入式的宽松模式泳道,这种类型的流量泳道同时具有对业务代码侵入性低、同时保持宽松模式的灵活特性的特点。同时,我们还介绍了新的基于权重的流量引流策略,这种策略可以基于统一的流量匹配规则,将匹配到的流量以设定好的比例分发到不同的流量泳道。
73489 16
基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道
|
1月前
|
机器学习/深度学习 自然语言处理 数据挖掘
RouteLLM:高效LLM路由框架,可以动态选择优化成本与响应质量的平衡
新框架提出智能路由选择在强弱语言模型间,利用用户偏好的学习来预测强模型胜率,基于成本阈值做决策。在大规模LLMs部署中,该方法显著降低成本而不牺牲响应质量。研究显示,经过矩阵分解和BERT等技术训练的路由器在多个基准上提升性能,降低强模型调用,提高APGR。通过数据增强,如MMLU和GPT-4评审数据,路由器在GSM8K、MMLU等测试中展现出色的性能提升和成本效率。未来将测试更多模型组合以验证迁移学习能力。该框架为LLMs部署提供了成本-性能优化的解决方案。
45 2
|
1月前
|
Cloud Native 测试技术 开发者
阿里云服务网格ASM多集群实践(二):高效按需的应用多环境部署与全链路灰度发布
介绍服务网格ASM提出的一种多集群部署下的多环境部署与全链路灰度发布解决方案。
|
4天前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
7天前
|
云安全 弹性计算 安全
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器不仅提供了一些基础防护,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为大家介绍一下阿里云服务器的基础安全防护有哪些,以及阿里云的一些安全防护类云产品。
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
|
6天前
|
机器学习/深度学习 弹性计算 人工智能
阿里云第八代云服务器ECSg8i实例深度解析:性能及适用场景参考
目前企业对云服务器的性能、安全性和AI能力的要求日益提高。阿里云推出的第八代云服务器ECS g8i实例,以其卓越的性能、增强的AI能力和全面的安全防护,除了适用于通用互联网应用和在线音视频应用等场景之外,也广泛应用于AI相关应用。本文将深入解析ECS g8i实例的技术特性、产品优势、适用场景及与同类产品的对比,以供参考。
阿里云第八代云服务器ECSg8i实例深度解析:性能及适用场景参考
|
19天前
|
弹性计算 运维 搜索推荐
阿里云建站方案参考:云服务器、速成美站、企业官网区别及选择参考
随着数字化转型的浪潮不断推进,越来越多的企业和公司开始将业务迁移到云端,而搭建一个专业、高效的企业官网成为了上云的第一步。企业官网不仅是展示公司形象、产品和服务的重要窗口,更是与客户沟通、传递价值的关键渠道。随着阿里云服务器和建站产品的知名度越来越高,越来越多的用户选择阿里云的产品来搭建自己的官网。本文将深入探讨在阿里云平台上,如何选择最适合自己的建站方案:云服务器建站、云·速成美站还是云·企业官网。
103 13
阿里云建站方案参考:云服务器、速成美站、企业官网区别及选择参考
|
13天前
|
编解码 分布式计算 Linux
最新阿里云服务器、轻量应用服务器、GPU云服务器活动价格参考
阿里云服务器产品包含云服务器、轻量应用服务器、GPU云服务器等,本文汇总了这些云服务器当下最新的实时活动价格情况,包含经济型e实例云服务器价格、通用算力型u1实例云服务器价格、第七代云服务器价格、轻量应用服务器最新价格、GPU云服务器价格,以供大家参考。
最新阿里云服务器、轻量应用服务器、GPU云服务器活动价格参考

热门文章

最新文章