OSS Connector for AI/ML menawarkan solusi pemuatan model non-intrusif yang tidak memerlukan perubahan kode. Solusi ini menggunakan LD_PRELOAD untuk pembacaan langsung berkinerja-tinggi dari OSS, serta mendukung pra-ambil (prefetching) dan cache guna meningkatkan kecepatan pemuatan model secara signifikan. Solusi ini kompatibel dengan kontainer dan framework inferensi utama.
Berkinerja-tinggi
OSS Connector for AI/ML secara signifikan meningkatkan kinerja saat memuat model besar dari OSS. Dengan bandwidth yang mencukupi, throughput dapat melebihi 10 GB/s. Untuk informasi lebih lanjut, lihat Pengujian kinerja.
Cara kerja
OSS Connector for AI/ML mengatasi hambatan kinerja yang terjadi saat Anda memuat model besar dari OSS di lingkungan cloud.
-
Solusi mount tradisional berbasis Filesystem in Userspace (FUSE) sering kali tidak dapat memanfaatkan bandwidth tinggi OSS secara optimal, sehingga menyebabkan pemuatan model menjadi lambat. OSS Connector meningkatkan efisiensi akses data dengan mencegat permintaan I/O dari framework inferensi dan mengonversinya langsung menjadi permintaan HTTP(S) ke OSS.
-
Solusi ini menggunakan mekanisme LD_PRELOAD untuk melakukan pra-ambil dan menyimpan data model dalam memori. Pendekatan ini tidak memerlukan perubahan kode pada aplikasi inferensi Anda dan secara signifikan mempercepat pemuatan model.
Lingkungan penerapan
-
Sistem operasi: Linux x86-64
-
glibc: >=2.17
Instal OSS Connector
-
Unduh paket instalasi lengkap.
-
oss-connector-lib-1.1.0rc7.x86_64.rpm: Untuk distribusi Linux berbasis Red Hat
https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.rpm -
oss-connector-lib-1.1.0rc7.x86_64.deb: Untuk distribusi Linux berbasis Debian
https://gosspublic.alicdn.com/oss-connector/oss-connector-lib-1.1.0rc7.x86_64.deb
-
-
Instal OSS Connector.
Gunakan paket .rpm atau .deb yang telah diunduh untuk instalasi. File pustaka dinamis libossc_preload.so akan otomatis diinstal ke direktori
/usr/local/lib/.-
Instal oss-connector-lib-1.1.0rc7.x86_64.rpm
yum install -y oss-connector-lib-1.1.0rc7.x86_64.rpm -
Instal oss-connector-lib-1.1.0rc7.x86_64.deb
dpkg -i oss-connector-lib-1.1.0rc7.x86_64.deb
-
-
Setelah instalasi, verifikasi bahwa /usr/local/lib/libossc_preload.so ada dan versinya benar.
nm -D /usr/local/lib/libossc_preload.so | grep version
Konfigurasikan OSS Connector
-
File konfigurasi
Anda dapat menggunakan file konfigurasi untuk mengontrol output log, kebijakan cache, dan konkurensi pra-ambil. Pengaturan parameter ini secara tepat dapat meningkatkan kinerja dan kemudahan pemeliharaan sistem.
File konfigurasi terletak di
/etc/oss-connector/config.json. Paket instalasi mencakup file konfigurasi default, seperti ditunjukkan di bawah ini:{ "logLevel": 1, "logPath": "/var/log/oss-connector/connector.log", "auditPath": "/var/log/oss-connector/audit.log", "expireTimeSec": 120, "prefetch": { "vcpus": 16, "workers": 16 } }Parameter
Deskripsi
logLevel
Tingkat log. Mengontrol tingkat detail output log.
logPath
Jalur file log. Menentukan lokasi output log waktu proses.
auditPath
Jalur file log audit. Mencatat informasi audit untuk pelacakan keamanan dan kepatuhan.
expireTimeSec
Waktu penundaan pelepasan file cache dalam detik. File dilepaskan setelah jeda ketika tidak ada referensi. Nilai default adalah 120 detik.
prefetch.vcpus
Jumlah CPU virtual (core CPU konkuren) yang digunakan untuk pra-ambil. Nilai default adalah 16.
prefetch.workers
Jumlah korutin (worker) per vCPU. Digunakan untuk meningkatkan konkurensi. Nilai default adalah 16.
-
Konfigurasikan variabel lingkungan
Variabel Lingkungan KEY
Deskripsi
OSS_ACCESS_KEY_ID
ID AccessKey dan Rahasia AccessKey dari Akun Alibaba Cloud atau Pengguna Resource Access Management (RAM).
Saat Anda mengonfigurasi izin dengan token akses temporary, atur nilai ini ke ID AccessKey dan Rahasia AccessKey dari kredensial akses temporary tersebut.
OSS Connector memerlukan izin `oss:ListObjects` untuk direktori bucket target. Jika bucket dan file yang Anda akses mendukung akses anonim, Anda dapat membiarkan variabel lingkungan `OSS_ACCESS_KEY_ID` dan `OSS_ACCESS_KEY_SECRET` tidak diatur atau diatur ke string kosong.
OSS_ACCESS_KEY_SECRET
OSS_SESSION_TOKEN
Token akses temporary. Anda harus mengatur parameter ini saat menggunakan kredensial akses temporary dari Security Token Service (STS) untuk mengakses OSS.
Saat Anda menggunakan ID AccessKey dan Rahasia AccessKey dari Akun Alibaba Cloud atau Pengguna RAM untuk konfigurasi izin, atur field ini ke string kosong.
OSS_ENDPOINT
Menentukan Endpoint layanan OSS. Contoh:
http://oss-cn-beijing-internal.aliyuncs.com. Jika Anda tidak menentukan protokol, HTTPS digunakan secara default. Kami merekomendasikan penggunaan protokol HTTP di lingkungan aman, seperti jaringan internal, untuk kinerja yang lebih baik.OSS_REGION
Menentukan ID Region OSS. Contoh: cn-beijing. Jika tidak ditentukan, otentikasi mungkin gagal.
OSS_PATH
Direktori model OSS. Formatnya adalah `oss://bucketname/path/`. Contoh:
oss://examplebucket/qwen/Qwen3-8B/.MODEL_DIR
Direktori model lokal yang diteruskan ke vllm atau framework inferensi lainnya. Kami merekomendasikan mengosongkan direktori terlebih dahulu. Data sementara diunduh selama penggunaan dan dapat dihapus setelahnya.
Catatan-
Jalur `MODEL_DIR` harus konsisten dengan jalur model framework inferensi, seperti parameter `--model` untuk vllm atau parameter `--model-path` untuk sglang.
-
`MODEL_DIR` memerlukan izin baca dan tulis. Struktur direktori `MODEL_DIR` sesuai dengan `OSS_PATH`.
-
Selama pemuatan model, file model dipra-ambil dan di-cache dalam memori. Cache dilepaskan setelah jeda ketika model dimuat. Waktu tunda default adalah 120 detik. Anda dapat menyesuaikannya dengan parameter `expireTimeSec` dalam file konfigurasi.
-
Gunakan direktori model lokal hanya untuk memuat model dengan connector. Direktori ini tidak boleh digunakan untuk tujuan lain.
-
Jangan membuat direktori model lokal pada titik pemasangan OSS lainnya, seperti titik pemasangan ossfs.
LD_PRELOAD
Jalur pustaka dinamis yang akan dipraload, biasanya
/usr/local/lib/libossc_preload.so. Kami merekomendasikan mengonfigurasi ini menggunakan variabel lingkungan sementara. Contoh:LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ./myappENABLE_CONNECTOR
Mengatur peran proses OSS Connector. Gunakan variabel lingkungan sementara agar berlaku.
-
`ENABLE_CONNECTOR=1`: Peran connector utama.
-
`ENABLE_CONNECTOR=2`: Peran connector sekunder.
Satu instans yang berjalan hanya dapat memiliki satu proses connector utama. Kami merekomendasikan menetapkan peran utama ke proses utama, seperti entrypoint. Semua proses lain yang menggunakan connector harus diberi peran connector sekunder. Untuk informasi lebih lanjut, lihat contoh ray+vllm untuk startup multi-node.
-
Jalankan layanan model
Startup single-node
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
Startup Multi-node
ray+vllm
Variabel lingkungan umum:
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
Variabel OSS_PATH dan MODEL_DIR harus saling berkorespondensi. Misalnya, jika jalur model di OSS adalah oss://examplebucket/qwen/Qwen2___5-72B/, maka direktori model lokal adalah /tmp/models/qwen/Qwen2___5-72B/.
Pod A menjalankan 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 menjalankan ray dan bergabung ke kluster:
LD_PRELOAD=/usr/local/lib/libossc_preload.so ENABLE_CONNECTOR=1 ray start --address='172.24.176.137:6379' --block // 172.24.176.137 adalah IP pod. Ubah ini ke alamat IP pod head. Perintah untuk bergabung ke kluster disediakan dalam output setelah Anda menjalankan `ray start` di Pod A.
Jalankan 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
Konfigurasikan variabel lingkungan untuk proses sglang di setiap node.
Startup node utama:
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
Startup node sekunder:
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
Penerapan Kubernetes
Untuk menerapkan pod di lingkungan Kubernetes, pertama-tama buat image dengan connector yang telah diinstal dan dorong image tersebut ke repositori. File YAML berikut merupakan contoh penerapan pod Kubernetes:
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
Pengujian kinerja
Pengujian pemuatan model single-node
Lingkungan pengujian
|
Metrik |
Deskripsi |
|
OSS |
Beijing, bandwidth unduh jaringan internal 250 Gbps |
|
Node pengujian |
ecs.g7nex.32xlarge, lebar pita jaringan 160 Gbps (80 Gbps × 2) |
Metrik statistik
|
Metrik |
Deskripsi |
|
Pengunduhan model |
Waktu dari awal hingga selesai pengunduhan file model menggunakan connector. |
|
End-to-end |
Waktu yang dibutuhkan server API vllm versi CPU untuk mulai berjalan dan siap digunakan. |
Hasil pengujian
|
Nama model |
Ukuran model (GB) |
Waktu pengunduhan model (detik) |
Waktu end-to-end (detik) |
|
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 |