
AIBrix Engine Runtime 深度指南推理容器的统一管理边车【免费下载链接】aibrixCost-efficient and pluggable Infrastructure components for GenAI inference项目地址: https://gitcode.com/GitHub_Trending/ai/aibrixAI Engine Runtime简称 AIRuntime是 AIBrix 为推理容器打造的统一管理层它以 sidecar 形式与推理引擎同 Pod 运行对外提供指标标准化、模型下载、LoRA 适配器管理与引擎生命周期管理等能力向上为 AIBrix 控制平面LoRA 适配器控制器、自动扩缩器、冷启动管理器等提供稳定的交互 API。读完本文你将掌握 AIRuntime 的架构定位、注入与安装方式、指标标准化规则、多源模型下载以及完整的 HTTP API 与配置项并理解它为何与 Istio sidecar 截然不同。为什么需要 AI Engine Runtime在 AIBrix 中控制平面Control Plane与推理 Pod 之间需要一个稳定、统一的通信通道。不同推理引擎vLLM、SGLang、TRT-LLM 等的 API 千差万别若控制平面直接与每种引擎耦合任何新引擎的接入都会带来大量适配成本。AI Engine Runtime 正是为了解决这一痛点而设计承担三方面职责控制平面集成 API保证控制平面与推理 Pod 之间无缝通信使 LoRA 适配器控制器、自动扩缩器、冷启动管理器等组件能够以云原生方式动态管理推理容器中的资源抽象厂商专属推理引擎将模型加载/卸载、适配器配置、性能监控等关键操作抽象为统一接口新推理后端接入时摩擦最小化可观测性为不同推理引擎提供统一的监控接口实现一致的性能追踪与问题排查。注意AI Engine Runtime 与 Istio sidecar 有本质区别——数据平面流量不会经过该 runtimeEnvoy 直接将推理请求转发给引擎容器。它只提供控制平面交互所需的管理能力详见 features/runtime 文档。网关与 runtime 的唯一接触点是为休眠中的 ModelClaim 引擎发起 wake 调用。从当前定位看该组件主要服务于LoRA 模型动态部署与多引擎支持场景。大多数部署场景并不强制安装 runtime当使用动态 LoRA 加载ModelAdapter或 ModelClaim 时才需要它。随着对更多推理引擎的支持与冷启动管理等能力的丰富runtime 的价值会进一步放大。下图是设计文档中给出的运行时总体架构示意ai-engine-runtime-overview.png工作原理runtime 如何与引擎协作从 features/runtime.rst 的架构图与说明可以梳理出三条核心数据通路控制平面ModelAdapter / ModelClaim 控制器通过:8080HTTP 访问aibrix-runtimesidecarPrometheus / 自动扩缩器通过/metrics :8080拉取指标runtime 再经由/metrics、/v1/load_lora_adapter等路径访问引擎默认:8000。关键实现细节如下runtime 监听8080端口通过INFERENCE_ENGINE_ENDPOINT默认http://localhost:8000访问引擎控制器管理器的--enable-runtime-sidecar标志只影响 ModelAdapterLoRA控制器开启后当 Pod 中存在名为aibrix-runtime的容器时该控制器使用8080上的 runtime API否则回退到引擎自身的8000API关闭默认时始终直连引擎。ModelClaim 控制器与网关的 wake 路径无论标志如何始终使用8080上的 runtime指标在每次抓取时实时处理runtime 抓取引擎指标页按INFERENCE_ENGINE对应的标准化规则处理后对外提供。代码中已存在sglang与trtllm的规则集但当前 runtime只以INFERENCE_ENGINEvllm启动——启动时初始化的引擎客户端会拒绝其他任何取值模型管理 API/v1/lora_adapter/*、/v1/models为vLLM 0.6.1 及以上版本实现其他引擎暂不支持这些端点。安装与注入方式AIBrix Runtime 可以通过 Webhook 自动注入推荐也可以手动添加到 Deployment 清单中。方式一Webhook 自动注入推荐只需在 Deployment 或 StormService 上添加注解即可启用apiVersion: apps/v1 kind: Deployment metadata: name: vllm-server annotations: model.aibrix.ai/sidecar-injection: true # Enable automatic runtime injection spec: template: spec: containers: - name: vllm image: vllm/vllm-openai:latest # Your container configuration...Webhook 会自动在 Pod 中注入aibrix-runtimesidecar。注入的内容包括名为aibrix-runtime的容器以aibrix_runtime --port 8080启动镜像为aibrix/runtime:v0.5.0可用下面的镜像注解覆盖INFERENCE_ENGINE取自工作负载上的model.aibrix.ai/engine注解设置时否则从引擎容器镜像名推断vllm、sglang、tgi、triton、llamacpp其余为unknown并设置INFERENCE_ENGINE_ENDPOINThttp://localhost:8000。只有vllm能让 runtime 正常启动因此请只对 vLLM 工作负载注入名为metrics的容器端口8080、/healthz存活探针与/ready就绪探针挂载于/tmp/aibrix/adapters的adapter-storage卷用于存放下载的适配器资源请求100mCPU /256Mi内存上限500m/512Mi。Webhook 以failurePolicy: Ignore注册于Deployment与StormService因此 Webhook 故障不会阻塞工作负载创建只会导致 sidecar 未注入。注入相关的注解与常量定义见 pkg/webhook/sidecar_injection.goSidecarInjectionAnnotation、SidecarInjectionRuntimeImageAnnotation、SidecarName aibrix-runtime、SidecarPort 8080。StormService 场景注入同样适用于 StormService 自定义资源sidecar 会注入到每个 role 的 Pod 模板中apiVersion: orchestration.aibrix.ai/v1alpha1 kind: StormService metadata: name: my-service annotations: model.aibrix.ai/sidecar-injection: true spec: template: spec: roles: - name: worker template: spec: containers: - name: vllm image: vllm/vllm-openai:latest # ...自定义 runtime 镜像apiVersion: apps/v1 kind: Deployment metadata: name: vllm-server annotations: model.aibrix.ai/sidecar-injection: true model.aibrix.ai/sidecar-runtime-image: aibrix/runtime:v0.5.0 # Custom image spec: # ...启用全局 runtime 标志让控制器改用 runtime sidecar API./bin/controller-manager --enable-runtime-sidecartrue其检测逻辑为EnableRuntimeSidecar false控制器始终使用直连引擎 API8000 端口即使注入了 sidecarEnableRuntimeSidecar true控制器检测 Pod 是否包含aibrix-runtime容器——存在则用 runtime API8080不存在则回退直连引擎 API8000。该设计保证有无 runtime sidecar 功能均可工作提供最大灵活性。方式二手动注入containers: - name: vllm image: vllm/vllm-openai:latest # Your main container configuration... - name: aibrix-runtime image: aibrix/runtime:v0.5.0 command: - aibrix_runtime - --port - 8080 env: - name: INFERENCE_ENGINE value: vllm # only vllm is supported - name: INFERENCE_ENGINE_ENDPOINT value: http://localhost:8000 ports: - containerPort: 8080 protocol: TCP volumeMounts: - mountPath: /models name: model-hostpath volumes: - name: model-hostpath hostPath: path: /root/models type: DirectoryOrCreate方式三独立安装Kubernetes 之外若要在非 Kubernetes 场景单独使用 runtimepython3 -m pip install aibrix如需 nightly 版本可从源码安装cd $AIBRIX_HOME/python/aibrix python3 -m pip install -e .指标标准化多引擎统一监控不同推理引擎暴露的指标各不相同AI Runtime 会将其标准化。先在容器环境变量中定义引擎侧信息例如 vLLM 在http://localhost:8000/metrics提供指标服务则按如下命令启动 runtimeINFERENCE_ENGINEvllm INFERENCE_ENGINE_ENDPOINThttp://localhost:8000 aibrix_runtime --port 8080runtime 在http://localhost:8080/metrics上提供服务。引擎暴露的每个指标原样透传对于存在标准化规则的指标runtime 额外以引擎无关的aibrix:前缀名再输出一份副本。下表为完整的标准化映射SGLang 与 TRT-LLM 列为代码中已存在的规则集当前因 runtime 仅支持vllm而无法启用标准名vLLM 源指标SGLang 源指标TRT-LLM 源指标aibrix:queue_sizevllm:num_requests_waitingsglang:num_queue_reqsN/Aaibrix:gpu_cache_usage_percvllm:gpu_cache_usage_percN/AN/Aaibrix:kv_cache_usage_percvllm:kv_cache_usage_percN/Akv_cache_utilizationaibrix:token_usageN/Asglang:token_usageN/Aaibrix:prompt_tokens_totalvllm:prompt_tokens_totalsglang:prompt_tokens_totalN/Aaibrix:generation_tokens_totalvllm:generation_tokens_totalsglang:generation_tokens_totalN/Aaibrix:generation_throughputN/Asglang:gen_throughputN/Aaibrix:time_to_first_token_secondsvllm:time_to_first_token_secondssglang:time_to_first_token_secondstime_to_first_token_secondsaibrix:time_per_output_token_secondsvllm:time_per_output_token_secondssglang:time_per_output_token_secondstime_per_output_token_secondsaibrix:e2e_request_latency_secondsvllm:e2e_request_latency_secondssglang:e2e_request_latency_secondse2e_request_latency_secondsaibrix:request_success_totalvllm:request_success_totalN/Arequest_success_totalaibrix:cache_hit_rateN/Asglang:cache_hit_rateN/Aaibrix:kv_cache_hit_rateN/AN/Akv_cache_hit_rate设置METRICS_RAW_PASSTHROUGH_MODE1或METRICS_ENABLE_TRANSFORMATION0可跳过副本、原样输出引擎指标。若某次抓取中规则执行失败runtime 会记录错误并对该次抓取回退为原始透传而不是丢弃指标。需要说明的是features 文档中给出的 vLLM 输出样例采集于aibrix:命名引入之前仅展示了透传指标当前版本还会输出上表列出的标准化副本。相关环境变量解析实现见 python/aibrix/aibrix/envs.pyMETRIC_SCRAPE_PATH、METRICS_ENABLE_TRANSFORMATION、METRICS_RAW_PASSTHROUGH_MODE、PROMETHEUS_MULTIPROC_DIR等。模型下载HuggingFace / S3 / TOSAI Engine Runtime 支持从 HuggingFace、S3 与 TOS 下载模型当控制平面需要与 Pod 交互动态加载新模型时尤为有用。从 HuggingFace 下载# General settings export DOWNLOADER_ALLOW_FILE_SUFFIXjson, safetensors export DOWNLOADER_NUM_THREADS16 # HuggingFace settings export HF_ENDPOINThttps://hf-mirror.com # set it when env is in CN regionpython -m aibrix.downloader \ --model-uri deepseek-ai/deepseek-coder-6.7b-instruct \ --local-dir /tmp/aibrix/models_hf/从 S3 下载# General settings export DOWNLOADER_ALLOW_FILE_SUFFIXjson, safetensors export DOWNLOADER_NUM_THREADS16 # AWS settings export AWS_ACCESS_KEY_IDINPUT YOUR AWS ACCESS KEY ID export AWS_SECRET_ACCESS_KEYINPUT YOUR AWS SECRET ACCESS KEY export AWS_ENDPOINT_URLINPUT YOUR AWS ENDPOINT URL # e.g. https://s3.us-west-2.amazonaws.com export AWS_REGIONINPUT YOUR AWS REGION # e.g. us-west-2python -m aibrix.downloader \ --model-uri s3://aibrix-model-artifacts/deepseek-coder-6.7b-instruct/ \ --local-dir /tmp/aibrix/models_s3/从 TOS 下载# General settings export DOWNLOADER_ALLOW_FILE_SUFFIXjson, safetensors export DOWNLOADER_NUM_THREADS16 # AWS settings export TOS_ACCESS_KEYINPUT YOUR TOS ACCESS KEY export TOS_SECRET_KEYINPUT YOUR TOS SECRET KEY export TOS_ENDPOINTINPUT YOUR TOS ENDPOINT # e.g. https://tos-s3-cn-beijing.volces.com export TOS_REGIONINPUT YOUR TOS REGION # e..g cn-beijingpython -m aibrix.downloader \ --model-uri tos://aibrix-model-artifacts/deepseek-coder-6.7b-instruct/ \ --local-dir /tmp/aibrix/models_tos/下载器的核心配置在 python/aibrix/aibrix/envs.py 中解析DOWNLOADER_LOCAL_DIR默认/tmp/aibrix/models/、DOWNLOADER_NUM_THREADS默认 32、DOWNLOADER_PART_THRESHOLD/DOWNLOADER_PART_CHUNKSIZE默认 67108864即 64MB超过该大小的文件分块拉取、DOWNLOADER_ALLOW_FILE_SUFFIX逗号分隔的允许后缀、DOWNLOADER_FORCE_DOWNLOAD与DOWNLOADER_CHECK_FILE_EXIST控制是否强制/跳过已存在文件URI 前缀s3://与tos://用于识别存储后端。模型配置 API动态 LoRA 加载前置条件引擎需以--enable-lora启动并设置环境变量export VLLM_ALLOW_RUNTIME_LORA_UPDATINGtrue详见 vLLM 官方文档 Dynamically serving LoRA Adapters。假设已有基础模型与 runtime 部署现在要向其中加载一个 LoRA 适配器# start the engine VLLM_ALLOW_RUNTIME_LORA_UPDATINGtrue vllm serve Qwen/Qwen2.5-Coder-1.5B-Instruct --enable-lora # start the runtime INFERENCE_ENGINEvllm INFERENCE_ENGINE_ENDPOINThttp://localhost:8000 aibrix_runtime --port 8080加载适配器curl -X POST http://localhost:8080/v1/lora_adapter/load \ -H Content-Type: application/json \ -d {lora_name: lora-2, lora_path: bharati2324/Qwen2.5-1.5B-Instruct-Code-LoRA-r16v2}卸载适配器curl -X POST http://localhost:8080/v1/lora_adapter/unload \ -H Content-Type: application/json \ -d {lora_name: lora-1}查看引擎当前模型列表curl -X GET http://localhost:8000/v1/models | jq返回结果中基础模型Qwen/Qwen2.5-Coder-1.5B-Instruct的parent为null而加载成功的lora-1、lora-2的root指向 LoRA 源仓库、parent指向基础模型二者max_model_len均为null表明它们作为适配器挂载在基础模型之上。这里对load请求有两点说明lora_path会原样传给引擎因此必须是引擎可打开的路径请求体还有第二种形式{lora_name: ..., artifact_url: ...}由 runtime 先下载工件再加载——这正是 ModelAdapter 控制器所发送的形式。runtime 侧的路由实现见 python/aibrix/aibrix/runtime/model_runtime_api.py/v1/lora_adapter/load、/v1/lora_adapter/unload等端点。配置参考命令行参数aibrix_runtime支持--host默认0.0.0.0、--port默认8080与--enable-fastapi-docs提供 OpenAPI schema 与 Swagger UI。环境变量变量默认值含义INFERENCE_ENGINEvllm引擎类型。必须为vllm其他值会导致 runtime 启动失败INFERENCE_ENGINE_VERSION0.6.1引擎版本。vLLM 自0.6.1起启用 LoRA 端点INFERENCE_ENGINE_ENDPOINThttp://localhost:8000引擎基础 URLMETRIC_SCRAPE_PATH/metrics引擎上被抓取的路径METRICS_ENABLE_TRANSFORMATION1应用标准化规则。0强制原始透传METRICS_RAW_PASSTHROUGH_MODE0原样输出引擎指标PROMETHEUS_MULTIPROC_DIR/tmp/aibrix/metrics/Prometheus 客户端临时目录DOWNLOADER_LOCAL_DIR/tmp/aibrix/models/请求未指定目录时模型的下载位置DOWNLOADER_NUM_THREADS32并行下载线程数DOWNLOADER_ALLOW_FILE_SUFFIX全部文件逗号分隔的待下载后缀如json, safetensorsDOWNLOADER_PART_THRESHOLD/DOWNLOADER_PART_CHUNKSIZE67108864超过该字节数按分块下载以及分块大小DOWNLOADER_FORCE_DOWNLOAD0即使本地已存在也重新下载DOWNLOADER_CHECK_FILE_EXIST1跳过本地已存在文件HF_TOKEN、HF_ENDPOINT、HF_REVISION未设置HuggingFace 凭证、镜像端点与 revisionAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_ENDPOINT_URL、AWS_REGION未设置S3 凭证与端点。DOWNLOADER_S3_MAX_IO_QUEUE100与DOWNLOADER_S3_IO_CHUNKSIZE16777216调优传输TOS_ACCESS_KEY、TOS_SECRET_KEY、TOS_ENDPOINT、TOS_REGION未设置TOS 凭证与端点。DOWNLOADER_TOS_VERSIONv2选择客户端 APITOS_ENABLE_CRC启用校验和注解与标志设置含义model.aibrix.ai/sidecar-injection: true注解请求 Webhook 向Deployment或StormService注入 runtimemodel.aibrix.ai/sidecar-runtime-image注解替代默认镜像的 runtime 镜像--enable-runtime-sidecar控制器管理器标志默认false当存在aibrix-runtime容器时允许控制器使用 runtime APIHTTP API 参考所有端点默认在 runtime 端口8080上提供服务端点说明GET /healthz存活检查。进程启动后恒为200GET /ready就绪检查。注入时用作 Pod 就绪探针GET /metricsPrometheus 格式的标准化引擎指标POST /v1/lora_adapter/load请求体{lora_name: ..., lora_path: ...}在引擎上加载适配器。lora_path原样传给引擎必须是引擎可打开的路径。第二种请求体形式{lora_name: ..., artifact_url: ...}由 runtime 先下载工件这是 ModelAdapter 控制器发送的形式POST /v1/lora_adapter/unload请求体{lora_name: ...}GET /v1/models引擎当前服务的模型列表从引擎代理POST /v1/model/download请求体{model_uri: ..., local_dir: ..., model_name: ..., download_extra_config: {...}}仅model_uri必填GET /v1/model/list列出本地目录中的模型。可选 JSON 请求体{local_dir: ...}注意虽然是 GET但使用请求体而非查询参数不传则列出 runtime 默认下载目录/v1/runtime/models/*与GET /v1/runtime/snapshot实验性引擎生命周期端点activate、deactivate、sleep、wake、kv-limit供 ModelClaim 使用不建议直接调用其中实验性生命周期端点已在此仓库的 runtime 实现中落地见 model_runtime_api.py/v1/runtime/models/activate、/deactivate、/kv-limit、/sleep、/wake、GET /v1/runtime/models与/v1/runtime/snapshot。此外runtime 侧还包含一个崩溃安全的本地引擎注册表engine_registry.py它以{version, engines}的 JSON 结构将 runtime 托管的引擎元数据持久化到 Pod 本地文件写入时采用同目录临时文件加os.replace的原子替换方式并在重启后据此收养存活下来的引擎进程——这与设计文档中Kubernetes 是期望状态权威、本地文件为重启后的 sidecar 提供证据的定位一致。设计边界与适用场景总结综合设计文档与功能文档可以得出 AIBrix Engine Runtime 的适用边界它是管理通道不是数据通道推理流量永远直连引擎runtime 不参与转发当前仅支持 vLLM 引擎INFERENCE_ENGINE必须为vllm模型管理 API 面向 vLLM 0.6.1SGLang / TRT-LLM 的标准化规则集已存在于代码中但暂不可选按需安装大多数部署无需 runtime仅在需要动态 LoRA 加载或 ModelClaim 生命周期管理时安装与控制器配合灵活--enable-runtime-sidecar标志提供了有无 sidecar 均可工作的回退能力webhook 以failurePolicy: Ignore注册保证了注入失败不影响工作负载创建。对于正在使用 AIBrix 动态 LoRA 或 ModelClaim 功能的开发者将 runtime 作为标准管理边车注入 vLLM 工作负载即可获得统一的指标、模型下载与适配器管理能力。【免费下载链接】aibrixCost-efficient and pluggable Infrastructure components for GenAI inference项目地址: https://gitcode.com/GitHub_Trending/ai/aibrix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考