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.rpmoss-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
審計記錄檔路徑,記錄Action Trail資訊,便於安全合規追蹤。
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 ./myappENABLE_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-reducesglang 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/modelsOSS_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 --blockPod 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 32sglang
為每個節點的 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 |