OSS Connector for AI/ML 提供免改造、無侵入的模型載入方案,通過 LD_PRELOAD 實現高效能OSS直讀,支援預取與緩衝,顯著提升模型載入速度,適用於容器及主流推理架構。
高效能
OSS Connector for AI/ML能顯著提升從OSS載入大模型的效能。在頻寬充足的條件下,輸送量可超過10 GB/s。有關效能詳情,請參見效能測試。
模型廣播功能支援大量啟動同一模型推理服務時,由單個節點從OSS載入模型,其餘節點利用本機存放區和網路資源通過拓撲結構完成分發,大幅降低回源壓力,提升大規模節點啟動效率。
工作原理
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.2.0.x86_64.rpm:適用於Red Hat系列的Linux發行版
https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.2.0.x86_64.rpmoss-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
安裝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
安裝後檢查/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
審計記錄檔路徑,記錄Action Trail資訊,便於安全合規追蹤。
expireTimeSec
快取檔案的延遲釋放時間(秒),無引用時延遲釋放,預設120秒。
prefetch.vcpus
預取時使用的虛擬CPU數(並發CPU核心數),預設值16。
prefetch.workers
每個vCPU下的協程(worker)數量,用於提升並發度,預設值16。
pretech.maxCacheAdviseGB
預取可以使用的記憶體緩衝大小,預設 -1,即不限制,單位 GB。
配置環境變數
環境變數 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案例。
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_SECRET和OSS_SESSION_TOKEN。
CONNECTOR_CONFIG_PATH
通過環境變數修改設定檔路徑。預設值:
/etc/oss-connector/config.jsonCONNECTOR_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-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 多模型載入
當推理任務涉及多個模型時(如投機採樣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_PATH與MODEL_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/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環境中部署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 |