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

更新时间:
复制为 MD 格式

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

工作原理

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

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

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

配置OSS Connector

  1. 创建配置文件。

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

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: connector-config
    data:
      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
            }
        }

    参数

    说明

    logLevel

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

    logPath

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

    auditPath

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

    expireTimeSec

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

    prefetch.vcpus

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

    prefetch.workers

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

  2. 创建OSS Secret。

    apiVersion: v1
    kind: Secret
    metadata:
      name: access-key-oss
    stringData:
      fs.oss.accessKeyId: <YOUR-BUCKET-AK> # 阿里云账号或者RAM用户的AccessKey ID
      fs.oss.accessKeySecret: <YOUR-BUCKET-SK> # 阿里云账号或者RAM用户的AccessKey Secret
      fs.oss.endpoint: <YOUR-BUCKET-ENDPOINT> # 指定OSS服务Endpoint,请修改为实际Endpoint,如oss-cn-beijing-internal.aliyuncs.com
      fs.oss.path: oss://<YOUR-BUCKET-NAME>/qwen/Qwen3-8B/ # 指定OSS模型所在目录,请修改为实际目录 

安装OSS Connector

  1. 选择安装方式。

    .deb

    wget https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.deb
    dpkg -i oss-connector-lib-1.1.0rc7.x86_64.deb

    .rpm

    yum install -y https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.rpm
    以上安装方式同样适用于在基础镜像中安装OSS Connector
  2. 以使用.deb方式为例,通过修改启动命令,安装并使用OSS Connector。

    安装命令后还需添加LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1以启用OSS Connector。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: my-deployment
      name: qwen-oss-connector
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-deployment
      template:
        metadata:
          labels:
            alibabacloud.com/compute-class: gpu
            alibabacloud.com/gpu-model-series: L20
            app: my-deployment
        spec:
          containers:
          - command:
            - sh
            - -c
            # 修改启动命令,安装OSS Connector,并添加 LD_PRELOAD 和 ENABLE_CONNECTOR 环境变量 
            - wget https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.deb;
              dpkg -i oss-connector-lib-1.1.0rc7.x86_64.deb;
              LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 python3 -m vllm.entrypoints.openai.api_server
              --model /tmp/model --trust-remote-code --tensor-parallel-size 1 --disable-custom-all-reduce
            env:
            - name: OSS_ENDPOINT
              valueFrom:
                secretKeyRef:
                  name: access-key-oss
                  key: fs.oss.endpoint
            - name: OSS_PATH
              valueFrom:
                secretKeyRef:
                  name: access-key-oss
                  key: fs.oss.path
            - name: MODEL_DIR
              value: /tmp/model
            - name: OSS_ACCESS_KEY_ID
              valueFrom:
                secretKeyRef:
                  name: access-key-oss
                  key: fs.oss.accessKeyId
            - name: OSS_ACCESS_KEY_SECRET
              valueFrom:
                secretKeyRef:
                  name: access-key-oss
                  key: fs.oss.accessKeySecret
            #示例镜像,请替换为实际镜像地址
            image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04 
            imagePullPolicy: IfNotPresent
            name: my-deployment
            ports:
            - containerPort: 8000
              name: pytorch
              protocol: TCP
            resources:
              limits:
                cpu: "8"
                memory: 64Gi
                nvidia.com/gpu: "1"
              requests:
                cpu: "8"
                memory: 64Gi
                nvidia.com/gpu: "1"

    环境变量env配置说明:

    环境变量 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 Connector?

可参考以下示例Dockerfile构建镜像。

FROM egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04
WORKDIR /
RUN wget https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.deb
RUN dpkg -i oss-connector-lib-1.1.0rc7.x86_64.deb
对于基于Red Hat系列的Linux发行版的基础镜像,可使用.rpm方式。