Seiring perkembangan teknologi, ukuran file yang digunakan oleh model aplikasi AI semakin besar. Namun, masalah latensi tinggi dan cold start dapat terjadi ketika file besar ditarik dari layanan penyimpanan seperti Object Storage Service (OSS) dan File Storage NAS (NAS). Anda dapat menggunakan Fluid untuk mempercepat penarikan file model dan mengoptimalkan kinerja layanan inferensi, terutama layanan inferensi yang diterapkan menggunakan KServe. Topik ini menjelaskan cara mempercepat model dengan menggunakan Fluid di KServe. Contoh ini menggunakan model Qwen-7B-Chat-Int8 dengan GPU NVIDIA V100.
Prasyarat
Klaster Container Service for Kubernetes (ACK) Pro telah dibuat dan tidak menjalankan sistem operasi ContainerOS. Klaster ACK Pro harus menjalankan Kubernetes versi 1.22 atau lebih baru dan memiliki setidaknya tiga node, masing-masing dengan minimal 3 GB memori bebas. Untuk informasi lebih lanjut, lihat Buat Klaster ACK Pro.
Suite AI cloud-native telah diinstal, termasuk komponen ack-fluid. Untuk informasi lebih lanjut, lihat Terapkan Suite AI Cloud-Native.
Klien Arena versi 0.9.15 atau lebih baru telah diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan Klien Arena.
Komponen ack-kserve telah diinstal. Untuk informasi lebih lanjut, lihat Instal ack-kserve.
OSS telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan OSS.
Langkah 1: Siapkan data model dan unggah data model ke bucket OSS
Unduh model. Contoh ini menggunakan model Qwen-7B-Chat-Int8.
Jalankan perintah berikut untuk menginstal Git:
sudo yum install gitJalankan perintah berikut untuk menginstal plug-in Large File Support (LFS):
sudo yum install git-lfsJalankan perintah berikut untuk mengkloning repositori Qwen-7B-Chat-Int8 dari komunitas ModelScope ke host lokal Anda:
GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat-Int8.gitJalankan perintah berikut untuk masuk ke direktori tempat repositori Qwen-7B-Chat-Int8 disimpan:
cd Qwen-7B-Chat-Int8Jalankan perintah berikut untuk mengunduh file besar yang dikelola oleh LFS dari direktori tempat repositori Qwen-7B-Chat-Int8 disimpan:
git lfs pull
Unggah file Qwen-7B-Chat-Int8 yang telah diunduh ke bucket OSS.
Masuk ke konsol OSS dan catat nama bucket OSS yang telah Anda buat.
Untuk informasi lebih lanjut tentang cara membuat bucket OSS, lihat Buat Bucket.
Instal dan konfigurasikan ossutil. Untuk informasi lebih lanjut, lihat Instal ossutil.
Jalankan perintah berikut untuk membuat direktori bernama Qwen-7B-Chat-Int8 di bucket OSS:
ossutil mkdir oss://<your-bucket-name>/Qwen-7B-Chat-Int8Jalankan perintah berikut untuk mengunggah file model ke bucket OSS:
ossutil cp -r ./Qwen-7B-Chat-Int8 oss://<Your-Bucket-Name>/Qwen-7B-Chat-Int8
Langkah 2: Buat dataset dan JindoRuntime
Dataset digunakan untuk mengorganisir dan memproses data secara efisien. JindoRuntime meningkatkan akses data melalui kebijakan cache. Keduanya dapat digunakan bersama untuk meningkatkan kinerja pemrosesan data dan model.
Jalankan perintah berikut untuk membuat Secret guna menyimpan pasangan AccessKey yang digunakan untuk mengakses bucket OSS:
kubectl apply -f-<<EOF apiVersion: v1 kind: Secret metadata: name: oss-secret stringData: fs.oss.accessKeyId: <YourAccessKey ID> fs.oss.accessKeySecret: <YourAccessKey Secret> EOFPada kode sebelumnya, parameter
fs.oss.accessKeyIdmenentukan ID AccessKey dan parameterfs.oss.accessKeySecretmenentukan rahasia AccessKey. Untuk informasi lebih lanjut tentang cara mendapatkan pasangan AccessKey, lihat Dapatkan Pasangan AccessKey.Output yang diharapkan:
secret/oss-secret createdBuat file bernama resource.yaml dan salin konten berikut untuk membuat dataset dan JindoRuntime. Untuk informasi lebih lanjut tentang konfigurasi dataset dan JindoRuntime, lihat Gunakan JindoFS untuk Mempercepat Akses ke OSS.
Dataset digunakan untuk menentukan informasi tentang dataset di penyimpanan jarak jauh dan sistem file dasar (UFS).
JindoRuntime digunakan untuk memulai klaster JindoFS untuk caching data.
Jalankan perintah berikut untuk membuat dataset dan JindoRuntime:
kubectl apply -f resource.yamlOutput yang diharapkan:
dataset.data.fluid.io/qwen-7b-chat-int8 created jindoruntime.data.fluid.io/qwen-7b-chat-int8 created
Langkah 3: Terapkan model vLLM sebagai layanan inferensi
Jalankan perintah berikut untuk menerapkan layanan inferensi berbasis KServe:
Kode sampel berikut menerapkan model Qwen-7B-Chat-Int8 sebagai layanan inferensi menggunakan Vetorized Large Language Model (vLLM) dan KServe:
arena serve kserve \ --name=qwen-fluid \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \ --gpus=1 \ --cpu=4 \ --memory=12Gi \ --data="qwen-7b-chat-int8:/mnt/models/Qwen-7B-Chat-Int8" \ "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen-7B-Chat-Int8 --gpu-memory-utilization 0.95 --quantization gptq --max-model-len=6144"Output yang diharapkan:
inferenceservice.serving.kserve.io/qwen-fluid created INFO[0002] Job qwen-fluid telah dikirimkan dengan sukses INFO[0002] Anda dapat menjalankan `arena serve get qwen-fluid --type kserve -n default` untuk memeriksa status jobOutput menunjukkan bahwa layanan inferensi telah berhasil diterapkan.
Langkah 4: Periksa hasil percepatan penarikan data
Jalankan perintah berikut untuk melihat informasi tentang dataset:
kubectl get dataset qwen-7b-chat-int8Output yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE qwen-7b-chat-int8 17.01GiB 10.46MiB 18.00GiB 0.1% Bound 23hJalankan perintah berikut untuk memeriksa waktu yang dikonsumsi hingga server aplikasi siap:
# Filter pod yang namanya mengandung qwen-fluid dari semua pod, ekstrak nama pod, dan tetapkan nama pod yang diekstrak ke variabel POD_NAME. POD_NAME=$(kubectl get po |grep qwen-fluid|awk -F " " '{print $1}') Periksa jumlah waktu yang dikonsumsi hingga server aplikasi siap. kubectl logs $POD_NAME |grep -i "server ready takes"Output yang diharapkan:
server ready takes 25.875763 sOutput menunjukkan bahwa 25,875763 detik dikonsumsi hingga server aplikasi siap setelah menggunakan Fluid untuk mempercepat penarikan data. Efek percepatan bervariasi berdasarkan aplikasi, ukuran dataset, dan konfigurasi lingkungan. Data dalam topik ini hanya untuk referensi.
Untuk informasi lebih lanjut tentang efek percepatan berdasarkan JindoRuntime, lihat bagian Langkah 3: Buat Aplikasi untuk Menguji Percepatan Data dari topik "Gunakan JindoFS untuk Mempercepat Akses ke OSS".
Referensi
Untuk informasi lebih lanjut tentang Fluid, lihat Dataset Elastis.