使用OSS Connector for AI/ML提升模型部署效率

更新时间:
复制为 MD 格式

OSS Connector for AI/ML 提供免改造、无侵入的模型加载方案,通过 LD_PRELOAD 实现高性能OSS直读,支持预取与缓存,显著提升模型加载速度,适用于容器及主流推理框架。

高性能

OSS Connector for AI/ML能显著提升从OSS加载大模型的性能。在带宽充足的条件下,吞吐量可超过10 GB/s。有关性能详情,请参见性能测试

模型广播功能支持批量启动同一模型推理服务时,由单个节点从OSS加载模型,其余节点利用本地存储和网络资源通过拓扑结构完成分发,大幅降低回源压力,提升大规模节点启动效率。

工作原理

OSS Connector for AI/ML旨在解决云环境下加载大型模型时的性能瓶颈,尤其是模型存储在OSS中的场景。

  • 传统基于FUSEPOSIX挂载方案,往往无法充分发挥OSS的高带宽优势,导致模型加载速度缓慢。OSS Connector通过拦截推理框架的I/O请求,并将其直接转换为对 OSS 的 HTTP(s) 请求,有效提升了数据访问效率。

  • 采用 LD_PRELOAD 机制,无需对推理应用程序进行任何代码修改,即可将模型数据预取并缓存到内存中,从而显著加快模型加载速度。

部署环境

  • 操作系统:Linux x86-64

  • glibc:>=2.17

安装OSS Connector

  1. 下载完整安装包。

    • oss-connector-lib-1.2.0.x86_64.rpm:适用于Red Hat系列的Linux发行版

      https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.2.0.x86_64.rpm
    • oss-connector-lib-1.2.0.x86_64.deb:适用于Debian系列的Linux发行版

      https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.2.0.x86_64.deb
  2. 安装OSS Connector。

    通过 .rpm 或 .deb 安装包安装OSS Connector,动态库文件libossc_preload.so会自动安装到 /usr/local/lib/ 目录下。

    • 安装oss-connector-lib-1.2.0.x86_64.rpm

      yum install -y oss-connector-lib-1.2.0.x86_64.rpm
    • 安装oss-connector-lib-1.2.0.x86_64.deb

      dpkg -i oss-connector-lib-1.2.0.x86_64.deb
  3. 安装后检查/usr/local/lib/libossc_preload.so是否存在及版本是否正确。

    nm -D /usr/local/lib/libossc_preload.so | grep version

配置OSS Connector

  • 配置文件

    配置文件主要用于控制OSS Connector的日志输出、缓存策略和预取并发能力。合理设置配置文件的部分参数可以提升系统性能和可维护性。

    配置文件路径为 /etc/oss-connector/config.json,安装包已包含默认配置文件,配置如下:

    {
        "logLevel": 1,
        "logPath": "/var/log/oss-connector/connector.log",
        "auditPath": "/var/log/oss-connector/audit.log",
        "expireTimeSec": 120,
        "prefetch": {
            "vcpus": 16,
            "workers": 16,
            "maxCacheAdviseGB": -1
        }
    }
    

    参数

    说明

    logLevel

    日志级别,控制日志输出的详细程度。

    logPath

    日志文件路径,指定运行日志的输出位置。

    auditPath

    审计日志文件路径,记录操作审计信息,便于安全合规追踪。

    expireTimeSec

    缓存文件的延迟释放时间(秒),无引用时延迟释放,默认120秒。

    prefetch.vcpus

    预取时使用的虚拟CPU数(并发CPU核心数),默认值16。

    prefetch.workers

    每个vCPU下的协程(worker)数量,用于提升并发度,默认值16。

    pretech.maxCacheAdviseGB

    预取可以使用的内存缓存大小,默认 -1,即不限制,单位 GB。

  • 配置环境变量

    环境变量 KEY

    说明

    OSS_ACCESS_KEY_ID

    阿里云账号或者RAM用户的AccessKey IDAccessKey Secret。

    使用临时访问令牌进行权限配置时,请设置为临时访问凭证的AccessKey IDAccessKey Secret。

    使用OSS Connector需要具有目标Bucket对应目录的oss:ListObjects 权限。如果访问的Bucket及文件支持匿名访问,可以不设置 OSS_ACCESS_KEY_ID 和 OSS_ACCESS_KEY_SECRET环境变量,或设置为空字符串。

    OSS_ACCESS_KEY_SECRET

    OSS_SESSION_TOKEN

    临时访问令牌。当使用从STS获取的临时访问凭证访问OSS时,需要设置此参数。

    使用阿里云账号或者RAM用户的AccessKey IDAccessKey Secret进行权限配置时,将该字段设置为空字符串。

    OSS_ENDPOINT

    指定OSS服务Endpoint,示例值为http://oss-cn-beijing-internal.aliyuncs.com。当不指定协议类型时,默认使用HTTPS协议。建议在内网等安全环境中使用HTTP协议,以达到更好的性能。

    OSS_REGION

    指定OSS Region ID,示例值为 cn-beijing。如不指定则可能出现鉴权失败。

    OSS_PATH

    OSS模型目录,格式为 oss://bucketname/path/,示例值为oss://examplebucket/qwen/Qwen3-8B/

    MODEL_DIR

    本地模型目录,传递给vllm 或其他推理框架。建议先清空目录,使用过程中会下载临时数据,使用后可以删除。

    说明
    • MODEL_DIR 路径需与推理框架的模型路径保持一致,例如vllm的--model 参数或sglang的 --model-path 参数。

    • MODEL_DIR 需要有读写权限。MODEL_DIR的目录结构与OSS_PATH相互对应。

    • 模型加载过程中会在内存中预取和缓存模型文件,模型加载后缓存会延迟释放,默认延迟 120 秒。可通过配置文件中的expireTimeSec参数进行调整。

    • 本地模型目录仅限用于Connector加载模型场景,其他用途无效。

    • 本地模型目录不应创建于其他OSS挂载点(如ossfs挂载点)之上。

    LD_PRELOAD

    需预加载的动态库路径,通常为/usr/local/lib/libossc_preload.so。建议使用临时环境变量进行配置。例如LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ./myapp

    ENABLE_CONNECTOR

    设置OSS Connector进程角色。请使用临时环境变量注入方式使其生效。

    • ENABLE_CONNECTOR=1:主Connector角色。

    • ENABLE_CONNECTOR=2 :从Connector角色。

    单个运行实例内有且只能有一个进程为主Connector角色,建议用于主进程(如entrypoint)。其余使用Connector的进程需指定为从Connector角色。使用方法,请参见多节点启动下的ray+vllm案例

    OSS_AUTHORIZATION_FILE_PATH

    JSON格式访问凭证文件路径。

    阿里云账号或者RAM用户的AccessKey ID、AccessKey Secret访问凭证:

    {
      "AccessKeyId": "LTAI************************",
      "AccessKeySecret": "At32************************"
    }

    使用临时访问凭证:

    {
      "AccessKeyId": "STS.L4aB******************",
      "AccessKeySecret": "wyLTSm*************************",
      "SecurityToken": "************",
      "Expiration": "2024-08-15T15:04:05Z"
    }
    说明

    配置优先级高于OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRETOSS_SESSION_TOKEN。

    CONNECTOR_CONFIG_PATH

    通过环境变量修改配置文件路径。默认值:/etc/oss-connector/config.json

    CONNECTOR_UDS_PATH

    通过环境变量设置 Unix域套接字(UDS)文件路径。默认值:/run/modelconnector.sock

    说明

    Connector 主/从进程通过 UDS 通信。

    CONNECTOR_MAX_CACHE_ADVISE_GB

    通过环境变量设置预取可以使用的内存缓存大小,单位 GB。

    说明

    与配置文件中的"pretech.maxCacheAdviseGB"相同功能,但是有更高的优先级。

启动模型服务

单节点启动

vllm API Server

LD_PRELOAD=/usr/local/lib/libossc_preload.so \
ENABLE_CONNECTOR=1 OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \ OSS_ENDPOINT=${OSS_ENDPOINT} \
OSS_REGION=${OSS_REGION} \
OSS_PATH=${OSS_PATH} \
MODEL_DIR=/tmp/model \
python3 -m vllm.entrypoints.openai.api_server --model /tmp/model --trust-remote-code --tensor-parallel-size 1 --disable-custom-all-reduce

sglang API Server

LD_PRELOAD=/usr/local/lib/libossc_preload.so \
ENABLE_CONNECTOR=1 OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \ OSS_ENDPOINT=${OSS_ENDPOINT} \
OSS_REGION=${OSS_REGION} \
OSS_PATH=${OSS_PATH} \
MODEL_DIR=/tmp/model \
python3 -m sglang.launch_server --model-path /tmp/model --port 8000 

多模型加载

当推理任务涉及多个模型时(如投机采样Speculative Decoding),OSS Connector支持同时从OSS加载多个模型。只需将OSS_PATH设置为所有模型的公共父路径,MODEL_DIR设置为对应的本地父目录。

以下示例展示了通过vllm使用Speculative Decoding同时加载目标模型Qwen3-32B和草稿模型Qwen3-0.6B:

export OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID}
export OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET}
export OSS_ENDPOINT=${OSS_ENDPOINT}
export OSS_REGION=${OSS_REGION}
export OSS_PATH=oss://examplebucket/
export MODEL_DIR=/tmp/models

LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 \
python3 -m vllm.entrypoints.openai.api_server \
    --model ${MODEL_DIR}/qwen/Qwen3-32B/ --trust-remote-code \
    --tensor-parallel-size 1 --disable-custom-all-reduce \
    --speculative_config '{"model": "'"${MODEL_DIR}/qwen/Qwen3-0___6B/"'", "num_speculative_tokens": 5}'
说明

OSS_PATHMODEL_DIR存在对应关系。例如OSS上目标模型路径为oss://examplebucket/qwen/Qwen3-32B/,草稿模型路径为oss://examplebucket/qwen/Qwen3-0___6B/,则OSS_PATH应设置为它们的公共父路径oss://examplebucket/,MODEL_DIR设置为/tmp/models。对应的目标模型本地路径为/tmp/models/qwen/Qwen3-32B//tmp/models/qwen/Qwen3-0___6B/

多节点启动

多节点部署场景中,OSS Connector支持模型广播功能。启用模型广播后,仅由单个节点从OSS加载模型数据,其余节点通过链式拓扑结构完成模型数据的分发,避免多节点同时回源带来的带宽压力。有关模型广播的详细信息,请参见模型广播

ray+vllm

公共环境变量:

export OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID}
export OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET}
export OSS_ENDPOINT=${OSS_ENDPOINT}
export OSS_REGION=${OSS_REGION}
export OSS_PATH=oss://examplebucket/
export MODEL_DIR=/tmp/models
重要

OSS_PATH 与 MODEL_DIR存在对应关系,如OSS 上模型地址为 oss://examplebucket/qwen/Qwen2___5-72B/,则本地模型目录为 /tmp/models/qwen/Qwen2___5-72B/。

Pod A 启动 ray head:

LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ray start --head --dashboard-host 0.0.0.0 --block

Pod B 启动 ray 加入集群:

LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ray start --address='172.24.176.137:6379' --block     // 172.24.176.137 是 podip改成head pod ip ,pod A 上 ray start 之后会有输出,加入集群的命令

启动 vllm API Server:

LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=2 python3 -m vllm.entrypoints.openai.api_server --model ${MODEL_DIR}/qwen/Qwen2___5-72B/ --trust-remote-code --served-model-name ds --max-model-len 2048 --gpu-memory-utilization 0.98 --tensor-parallel-size 32

sglang

为每个节点的 sglang 进程配置环境变量。

主节点启动:

LD_PRELOAD=/usr/local/lib/libossc_preload.so \
ENABLE_CONNECTOR=1 OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \ OSS_ENDPOINT=${OSS_ENDPOINT} \
OSS_REGION=${OSS_REGION} \
OSS_PATH=${OSS_PATH} \
MODEL_DIR=/tmp/model \
python3 -m sglang.launch_server --model-path /tmp/model --port 8000 --dist-init-addr 192.168.1.1:20000 --nnodes 2 --node-rank 0 

从节点启动:

LD_PRELOAD=/usr/local/lib/libossc_preload.so \
ENABLE_CONNECTOR=1 OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \ OSS_ENDPOINT=${OSS_ENDPOINT} \
OSS_REGION=${OSS_REGION} \
OSS_PATH=${OSS_PATH} \
MODEL_DIR=/tmp/model \
python3 -m sglang.launch_server --model-path /tmp/model --port 8000 --dist-init-addr 192.168.1.1:20000 --nnodes 2 --node-rank 1 

Kubernetes部署

Kubernetes环境中部署OSS Connector时,可以通过Init Container、启动时动态安装或自定义镜像等方式完成安装。有关Kubernetes部署的详细信息和完整YAML示例,请参见Kubernetes中启用Connector功能

性能测试

单节点模型加载测试

测试环境

指标

说明

OSS

北京,内网下载带宽 250Gbps

测试节点

ecs.g7nex.32xlarge,网络带宽 160Gbps (80Gbps*2)

统计指标

指标

说明

模型下载

模型文件通过 connector 下载开始到结束的时间。

端到端

CPU 版 vllm api server 启动到服务就绪时间。

测试结果

模型名称

模型大小(GB)

模型下载时间(秒)

端到端时间(秒)

Qwen2.5-14B

27.522

1.7721

20.48

Qwen2.5-72B

135.437

10.57

30.09

Qwen3-8B

15.271

0.97

18.88

Qwen3-32B

61.039

3.99

22.97