OSS Connector for AI/ML 提供免改造、无侵入的模型加载方案,通过 LD_PRELOAD 实现高性能OSS直读,支持预取与缓存,显著提升模型加载速度,适用于容器及主流推理框架。
高性能
OSS Connector for AI/ML能显著提升从OSS加载大模型的性能。在带宽充足的条件下,吞吐量可超过10 GB/s。有关性能详情,请参见性能测试。
工作原理
OSS Connector for AI/ML旨在解决云环境下加载大型模型时的性能瓶颈,尤其是模型存储在OSS中的场景。
传统基于FUSE的POSIX挂载方案,往往无法充分发挥OSS的高带宽优势,导致模型加载速度缓慢。OSS Connector通过拦截推理框架的I/O请求,并将其直接转换为对 OSS 的 HTTP(s) 请求,有效提升了数据访问效率。
采用 LD_PRELOAD 机制,无需对推理应用程序进行任何代码修改,即可将模型数据预取并缓存到内存中,从而显著加快模型加载速度。
部署环境
操作系统:Linux x86-64
glibc:>=2.17
安装OSS Connector
下载完整安装包。
oss-connector-lib-1.1.0rc7.x86_64.rpm:适用于Red Hat系列的Linux发行版
https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.rpm
oss-connector-lib-1.1.0rc7.x86_64.deb:适用于Debian系列的Linux发行版
https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.deb
安装OSS Connector。
通过 .rpm 或 .deb 安装包安装OSS Connector,动态库文件libossc_preload.so会自动安装到
/usr/local/lib/
目录下。安装oss-connector-lib-1.1.0rc7.x86_64.rpm
yum install -y oss-connector-lib-1.1.0rc7.x86_64.rpm
安装oss-connector-lib-1.1.0rc7.x86_64.deb
dpkg -i oss-connector-lib-1.1.0rc7.x86_64.deb
安装后检查/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 } }
参数
说明
logLevel
日志级别,控制日志输出的详细程度。
logPath
日志文件路径,指定运行日志的输出位置。
auditPath
审计日志文件路径,记录操作审计信息,便于安全合规追踪。
expireTimeSec
缓存文件的延迟释放时间(秒),无引用时延迟释放,默认120秒。
prefetch.vcpus
预取时使用的虚拟CPU数(并发CPU核心数),默认值16。
prefetch.workers
每个vCPU下的协程(worker)数量,用于提升并发度,默认值16。
配置环境变量
环境变量 KEY
说明
OSS_ACCESS_KEY_ID
阿里云账号或者RAM用户的AccessKey ID和AccessKey Secret。
使用临时访问令牌进行权限配置时,请设置为临时访问凭证的AccessKey ID和AccessKey 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 ID和AccessKey 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案例。
启动模型服务
单节点启动
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
多节点启动
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 环境部署 POD时,要求提前构建好安装了Connector的镜像,并推送到指定仓库。以下是一个 Kubernetes Pod 部署示例:
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
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: model-connector-deployment
spec:
selector:
matchLabels:
app: model-connector
template:
metadata:
labels:
app: model-connector
spec:
imagePullSecrets:
- name: acr-credential-beijing
hostNetwork: true
containers:
- name: container-name
image: {IMAGE_ADDRESS}
imagePullPolicy: Always
resources:
requests:
cpu: "24"
memory: "700Gi"
limits:
cpu: "128"
memory: "900Gi"
command:
- bash
- -c
- ENABLE_CONNECTOR=1 python3 -m vllm.entrypoints.openai.api_server --model /var/model --trust-remote-code --tensor-parallel-size 1 --disable-custom-all-reduce
env:
- name: LD_PRELOAD
value: "/usr/local/lib/libossc_preload.so"
- name: OSS_ENDPOINT
value: "oss-cn-beijing-internal.aliyuncs.com"
- name: OSS_REGION
value: "cn-beijing"
- name: OSS_PATH
value: "oss://examplebucket/qwen/Qwen1.5-7B-Chat/"
- name: MODEL_DIR
value: "/var/model/"
- name: OSS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: oss-access-key-connector
key: key
- name: OSS_ACCESS_KEY_SECRET
valueFrom:
secretKeyRef:
name: oss-access-key-connector
key: secret
volumeMounts:
- name: connector-config
mountPath: /etc/oss-connector/
terminationGracePeriodSeconds: 10
volumes:
- name: connector-config
configMap:
name: connector-config
性能测试
单节点模型加载测试
测试环境
指标 | 说明 |
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 |