xDiT adalah library open source yang mempercepat inferensi untuk model Diffusion Transformer (DiT) dengan menggunakan teknik paralelisme dan pengoptimalan. Teknik ini memungkinkan penyiapan multi-GPU yang dapat diskalakan untuk workload yang menuntut. Halaman ini menunjukkan cara men-deploy model DiT menggunakan xDiT dan GPU Cloud di Platform Agen Gemini Enterprise.
Untuk mengetahui informasi selengkapnya tentang xDiT, lihat project GitHub xDiT.
Manfaat
Daftar berikut menjelaskan manfaat utama menggunakan xDiT untuk menayangkan model DiT di Platform Agen:
- Pembuatan hingga tiga kali lebih cepat: Buat gambar dan video beresolusi tinggi dalam waktu yang jauh lebih singkat dibandingkan dengan solusi penayangan lainnya.
- Dukungan multi-GPU yang skalabel: Mendistribusikan workload secara efisien di beberapa GPU untuk performa yang optimal.
- Paralelisme hibrida: xDiT mendukung berbagai pendekatan pemrosesan paralel, seperti paralelisme urutan terpadu, PipeFusion, paralelisme CFG, dan paralelisme data. Metode ini dapat digabungkan dalam resep unik untuk mengoptimalkan performa.
- Performa GPU tunggal yang dioptimalkan: xDiT memberikan inferensi yang lebih cepat meskipun pada GPU tunggal.
- Akselerasi GPU: xDiT menggabungkan beberapa metode akselerasi kernel dan menggunakan teknik dari DiTFastAttn untuk mempercepat inferensi pada satu GPU.
- Deployment yang mudah: Mulai dengan cepat menggunakan deployment sekali klik atau notebook Colab Enterprise di Model Garden Gemini Enterprise Agent Platform.
Model yang didukung
xDiT tersedia untuk arsitektur model DiT tertentu di Model Garden Platform Agen Gemini Enterprise seperti Flux.1 Schnell, CogVideoX-2b, dan varian model text-to-video Wan2.1. Untuk melihat apakah model DiT mendukung xDiT di Model Garden, lihat kartu modelnya di Model Garden.
Paralelisme hybrid untuk performa multi-GPU:
xDiT menggunakan kombinasi teknik paralelisme untuk memaksimalkan performa pada konfigurasi multi-GPU. Teknik ini bekerja sama untuk mendistribusikan workload dan mengoptimalkan pemanfaatan resource:
- Paralelisme urutan terpadu: Teknik ini membagi data input (seperti membagi gambar menjadi patch) di beberapa GPU, sehingga mengurangi penggunaan memori dan meningkatkan skalabilitas.
- PipeFusion: PipeFusion membagi model DiT menjadi beberapa tahap dan menetapkan setiap tahap ke GPU yang berbeda, sehingga memungkinkan pemrosesan paralel dari berbagai bagian model.
- Paralelisme CFG: Teknik ini secara khusus mengoptimalkan model dengan menggunakan panduan bebas klasifikasi, metode umum untuk mengontrol gaya dan konten gambar yang dihasilkan. Hal ini memparalelkan komputasi cabang bersyarat dan tidak bersyarat, sehingga menghasilkan inferensi yang lebih cepat.
- Paralelisme Data: Metode ini mereplikasi seluruh model di setiap GPU, dengan setiap GPU memproses batch data input yang berbeda, sehingga meningkatkan throughput keseluruhan sistem.
Untuk mengetahui informasi selengkapnya tentang peningkatan performa, lihat laporan xDiT tentang Flux.1 Schnell atau CogVideoX-2b. Google dapat mereproduksi hasil ini di Model Garden Gemini Enterprise Agent Platform.
Akselerasi GPU tunggal
Library xDiT memberikan manfaat untuk penayangan GPU tunggal dengan menggunakan torch.compile dan onediff untuk meningkatkan kecepatan runtime di GPU. Teknik ini juga dapat digunakan bersama dengan paralelisme hibrida.
xDiT juga memiliki teknik komputasi perhatian yang efisien, yang disebut DiTFastAttn, untuk mengatasi hambatan komputasi DiT. Untuk saat ini, teknik ini hanya tersedia untuk digunakan pada penyiapan GPU tunggal atau bersamaan dengan paralelisme data.
Mulai menggunakan Model Garden
Container penayangan GPU Cloud yang dioptimalkan xDiT disediakan dalam Model Garden Gemini Enterprise Agent Platform. Untuk model yang didukung, deployment menggunakan container ini saat Anda menggunakan deployment sekali klik atau contoh notebook Colab Enterprise.
Contoh berikut menggunakan model Flux.1-schnell untuk menunjukkan cara men-deploy model DiT pada container xDiT.
Menggunakan deployment sekali klik
Anda dapat men-deploy endpoint Platform Agen kustom dengan container xDiT menggunakan kartu model.
Buka halaman kartu model, lalu klik Deploy.
Untuk variasi model yang akan digunakan, pilih jenis mesin yang akan digunakan untuk deployment Anda.
Klik Deploy untuk memulai proses deployment. Anda akan menerima dua email notifikasi; satu saat model diupload dan satu lagi saat endpoint siap.
Menggunakan notebook Colab Enterprise
Untuk fleksibilitas dan penyesuaian, gunakan contoh notebook Colab Enterprise untuk men-deploy endpoint Agent Platform dengan penampung xDiT menggunakan Agent Platform SDK untuk Python.
Buka halaman kartu model, lalu klik Buka notebook.
Pilih notebook Vertex Serving. Notebook akan dibuka di Colab Enterprise.
Jalankan notebook untuk men-deploy model menggunakan container xDiT dan mengirim permintaan prediksi ke endpoint. Cuplikan kode untuk deployment adalah sebagai berikut:
import vertexai
from vertexai import model_garden
vertexai.init(project=<YOUR_PROJECT_ID>, location=<REGION>)
model = model_garden.OpenModel("black-forest-labs/FLUX.1-schnell")
endpoint = model.deploy()
Argumen xDiT
xDiT menawarkan berbagai argumen server yang dapat dikonfigurasi untuk mengoptimalkan performa untuk kasus penggunaan tertentu. Argumen ini ditetapkan sebagai variabel lingkungan selama deployment. Berikut adalah argumen utama yang mungkin perlu Anda konfigurasi:
Konfigurasi Model
MODEL_ID(string): Menentukan ID model yang akan dimuat. Nama ini harus cocok dengan nama model di registri atau jalur Anda.
Argumen Pengoptimalan Runtime
N_GPUS(integer): Menentukan jumlah GPU yang akan digunakan untuk inferensi. Nilai defaultnya adalah 1.WARMUP_STEPS(integer): Jumlah langkah pemanasan yang diperlukan sebelum inferensi dimulai. Hal ini sangat penting saat PipeFusion diaktifkan untuk memastikan performa yang stabil. Nilai default adalah 1.USE_PARALLEL_VAE(boolean): Memungkinkan pemrosesan gambar beresolusi tinggi (lebih dari 2048 piksel) yang efisien dengan memparalelkan komponen VAE di seluruh perangkat. Hal ini mencegah masalah OOM untuk gambar berukuran besar. Nilai defaultnya adalah false.USE_TORCH_COMPILE(boolean): Mengaktifkan akselerasi GPU tunggal melalui torch.compile, yang memberikan pengoptimalan tingkat kernel untuk meningkatkan performa. Nilai defaultnya adalah false.USE_ONEDIFF(boolean): Mengaktifkan teknologi akselerasi kompilasi OneDiff untuk mengoptimalkan kecepatan eksekusi kernel GPU. Nilai defaultnya adalah false.
Argumen Paralel Data
DATA_PARALLEL_DEGREE(integer): Menetapkan tingkat paralelisme data. Biarkan kosong untuk menonaktifkan atau menyetel ke tingkat paralel yang dipilih.USE_CFG_PARALLEL(boolean): Mengaktifkan komputasi paralel untuk panduan bebas klasifikasi (CFG), yang juga dikenal sebagai Batch Terpisah. Jika diaktifkan, tingkat paralelisme konstan adalah 2. Disetel ke benar saat menggunakan CFG untuk mengontrol gaya dan konten output. Nilai defaultnya adalah false.
Argumen Paralel Urutan (USP - Unified Sequence Parallelism)
ULYSSES_DEGREE(integer): Menetapkan derajat Ulysses untuk pendekatan paralel urutan terpadu, yang menggabungkan DeepSpeed-Ulysses dan Ring-Attention. Setelan ini mengontrol pola komunikasi semua-ke-semua. Biarkan kosong untuk menggunakan setelan default.RING_DEGREE(integer): Menetapkan derajat Ring untuk komunikasi peer-to-peer dalam paralelisme berurutan. Berfungsi bersama dengan ULYSSES_DEGREE untuk membentuk mesh proses 2D. Biarkan kosong untuk menggunakan default.
Argumen Paralel Tensor
TENSOR_PARALLEL_DEGREE(integer): Menetapkan tingkat paralelisme tensor, yang membagi parameter model di seluruh perangkat di sepanjang dimensi fitur untuk mengurangi biaya memori per perangkat. Biarkan kosong untuk menonaktifkan.SPLIT_SCHEME(string): Menentukan cara membagi tensor model di seluruh perangkat (misalnya, menurut head perhatian, dimensi tersembunyi). Biarkan kosong untuk skema pemisahan default.
Argumen yang Didistribusikan Ray
USE_RAY(boolean): Mengaktifkan framework eksekusi terdistribusi Ray untuk menskalakan komputasi di beberapa node. Nilai defaultnya adalah false.RAY_WORLD_SIZE(integer): Jumlah total proses dalam cluster Ray. Nilai defaultnya adalah 1.VAE_PARALLEL_SIZE(integer): Jumlah proses yang dikhususkan untuk pemrosesan paralel VAE saat menggunakan Ray. Nilai defaultnya adalah 0.DIT_PARALLEL_SIZE(integer): Jumlah proses yang dikhususkan untuk pemrosesan paralel backbone DiT saat menggunakan Ray. Nilai defaultnya adalah 0.
Argumen Paralel PipeFusion
PIPEFUSION_PARALLEL_DEGREE(bilangan bulat): Menetapkan tingkat paralelisme untuk PipeFusion, paralelisme pipeline tingkat urutan yang memanfaatkan karakteristik redundansi temporal input model difusi. Nilai yang lebih tinggi meningkatkan paralelisme, tetapi memerlukan lebih banyak memori. Nilai default adalah 1.NUM_PIPELINE_PATCH(integer): Jumlah patch untuk membagi urutan menjadi untuk pemrosesan pipeline. Biarkan kosong untuk penentuan otomatis.ATTN_LAYER_NUM_FOR_PP(string): Menentukan lapisan perhatian mana yang akan digunakan untuk paralelisme pipeline. Dapat dipisahkan dengan koma (misalnya, "10,9") atau spasi (misalnya, "10 9"). Biarkan kosong untuk menggunakan semua lapisan.
Argumen Pengoptimalan Memori
ENABLE_MODEL_CPU_OFFLOAD(boolean): Mengalihkan bobot model ke memori CPU saat tidak digunakan, sehingga mengurangi penggunaan memori GPU dengan biaya peningkatan latensi. Nilai defaultnya adalah salah (false).ENABLE_SEQUENTIAL_CPU_OFFLOAD(boolean): Secara berurutan memindahkan lapisan model ke CPU selama penerusan, sehingga memungkinkan inferensi model yang lebih besar daripada memori GPU. Nilai defaultnya adalah false.ENABLE_TILING(boolean): Mengurangi penggunaan memori GPU dengan mendekode komponen VAE satu petak dalam satu waktu. Argumen ini berguna untuk gambar atau video yang lebih besar dan untuk mencegah error kehabisan memori. Nilai defaultnya adalah false.ENABLE_SLICING(boolean): Mengurangi penggunaan memori GPU dengan membagi tensor input menjadi slice untuk decoding VAE. Nilai defaultnya adalah false.
Argumen DiTFastAttn (Pengoptimalan Perhatian)
USE_FAST_ATTN(boolean): Mengaktifkan akselerasi DiTFastAttn untuk inferensi GPU tunggal, yang memanfaatkan Pengurangan Temporal Input untuk mengurangi kompleksitas komputasi. Nilai defaultnya adalah false.N_CALIB(integer): Jumlah sampel kalibrasi untuk pengoptimalan DiTFastAttn. Nilai default-nya adalah 8.THRESHOLD(float): Nilai minimum kesamaan untuk Pengurangan Kesamaan Temporal di DiTFastAttn. Nilai defaultnya adalah 0,5.WINDOW_SIZE(bilangan bulat): Ukuran jendela untuk Window Attention dengan Residual Caching untuk mengurangi redundansi spasial. Nilai defaultnya adalah 64.COCO_PATH(string): Jalur ke set data COCO untuk kalibrasi DiTFastAttn. Wajib diisi jika USE_FAST_ATTN benar. Biarkan kosong jika tidak digunakan.
Argumen Pengoptimalan Cache
USE_CACHE(boolean): Mengaktifkan mekanisme caching umum untuk mengurangi komputasi yang berlebihan. Nilai defaultnya adalah false.USE_TEACACHE(boolean): Mengaktifkan metode pengoptimalan TeaCache untuk menyimpan dalam cache hasil sementara. Nilai defaultnya adalah false.USE_FBCACHE(boolean): Mengaktifkan metode pengoptimalan First-Block-Cache. Nilai defaultnya adalah salah (false).
Argumen Pengoptimalan Presisi
USE_FP8_T5_ENCODER(boolean): Mengaktifkan presisi FP8 (floating point 8 bit) untuk encoder teks T5, sehingga mengurangi penggunaan memori dan berpotensi meningkatkan throughput dengan dampak kualitas minimal. Nilai defaultnya adalah false.
Penyesuaian Penayangan
Model Garden menyediakan konfigurasi paralelisme xDiT default untuk model yang didukung. Anda dapat memeriksa setelan default ini menggunakan Agent Platform SDK untuk Python.
Untuk melihat konfigurasi deployment default untuk model, seperti "black-forest-labs/FLUX.1-schnell", Anda dapat menjalankan cuplikan kode berikut:
import vertexai
from vertexai import model_garden
vertexai.init(project=<YOUR_PROJECT_ID>, location=<REGION>)
model = model_garden.OpenModel("black-forest-labs/FLUX.1-schnell")
deploy_options = model.list_deploy_options()
# Example Response
# ['black-forest-labs/flux1-schnell@flux.1-schnell']
# [model_display_name: "Flux1-schnell"
# container_spec {
# image_uri: "us-docker.pkg.dev/deeplearning-platform-release/vertex-model-garden/xdit-serve.cu125.0-2.ubuntu2204.py310"
# env {
# name: "DEPLOY_SOURCE"
# value: "UI_NATIVE_MODEL"
# }
# env {
# name: "MODEL_ID"
# value: "gs://vertex-model-garden-restricted-us/black-forest-labs/FLUX.1-schnell"
# }
# env {
# name: "TASK"
# value: "text-to-image"
# }
# env {
# name: "N_GPUS"
# value: "2"
# }
# env {
# name: "USE_TORCH_COMPILE"
# value: "true"
# }
# env {
# name: "RING_DEGREE"
# value: "2"
# }
# ..........]
Metode list_deploy_options() menampilkan spesifikasi penampung, termasuk variabel lingkungan (env) yang menentukan konfigurasi xDiT.
Untuk menyesuaikan strategi paralelisme, Anda dapat mengganti variabel lingkungan ini saat men-deploy model. Contoh berikut menunjukkan cara mengubah RING_DEGREE dan ULYSSES_DEGREE untuk penyiapan 2 GPU, dengan mengubah pendekatan paralelisme:
import vertexai
from vertexai import model_garden
# Replace with your project ID and region
vertexai.init(project="<YOUR_PROJECT_ID>", location="<REGION>")
model = model_garden.OpenModel("black-forest-labs/FLUX.1-schnell")
# Custom environment variables to override default settings
# This example sets N_GPUS as 2, so RING_DEGREE * ULYSSES_DEGREE must equal 2
container_env_vars = {
"N_GPUS": "2",
"RING_DEGREE": "1",
"ULYSSES_DEGREE": "2"
# Add other environment variables to customize here
}
machine_type = "a3-highgpu-2g"
accelerator_type = "NVIDIA_H100_80GB"
accelerator_count = 2
# Deploy the model with the custom environment variables
endpoint = model.deploy(
machine_type=machine_type,
accelerator_type=accelerator_type,
accelerator_count=accelerator_count,
container_env_vars=container_env_vars
)
Jangan lupa untuk membaca bagian "Memahami argumen khusus xDiT" untuk mengetahui detail setiap variabel lingkungan. Pastikan produk derajat paralelisme (misalnya, PIPEFUSION_PARALLEL_DEGREE,ULYSSES_DEGREE, RING_DEGREE, dan USE_CFG_PARALLEL) sama dengan jumlah total GPU (N_GPUS).
Untuk contoh lainnya tentang menyajikan resep dan konfigurasi untuk berbagai model, lihat dokumentasi resmi xDiT. Untuk informasi tambahan tentang Model Garden SDK, lihat dokumentasi.