xDiT adalah library open source yang mempercepat inferensi untuk model Diffusion Transformer (DiT) menggunakan teknik paralelisme dan pengoptimalan. Teknik ini memungkinkan penyiapan multi-GPU yang skalabel untuk workload yang menuntut. Halaman ini menunjukkan cara men-deploy model DiT menggunakan xDiT dan GPU Cloud di Vertex AI.
Untuk mengetahui informasi selengkapnya tentang xDiT, lihat project GitHub xDiT.
Manfaat
Daftar berikut menjelaskan manfaat utama menggunakan xDiT untuk menayangkan model DiT di Vertex AI:
- Pembuatan hingga tiga kali lebih cepat: Buat gambar dan video beresolusi tinggi dalam waktu singkat dibandingkan dengan solusi penayangan lainnya.
- Dukungan multi-GPU yang skalabel: Mendistribusikan beban kerja secara efisien di
beberapa GPU untuk performa yang optimal.
- Paralelisme campuran: 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 bahkan pada
satu GPU.
- Akselerasi GPU: xDiT menggabungkan beberapa metode akselerasi kernel dan menggunakan teknik dari DiTFastAttn untuk mempercepat inferensi pada satu GPU.
- Deployment mudah: Mulai dengan cepat menggunakan deployment sekali klik atau notebook Colab Enterprise di Vertex AI Model Garden.
Model yang didukung
xDiT tersedia untuk arsitektur model DiT tertentu di Vertex AI Model Garden seperti Flux.1 Schnell dan CogVideoX-2b. Untuk melihat apakah model DiT mendukung xDiT di Model Garden, lihat kartu modelnya di Model Garden.
Paralelisme campuran untuk performa multi-GPU:
xDiT menggunakan kombinasi teknik paralelisme untuk memaksimalkan performa pada penyiapan multi-GPU. Teknik ini bekerja sama untuk mendistribusikan beban kerja dan mengoptimalkan penggunaan resource:
- Parallelisme 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 pengklasifikasi, metode umum untuk mengontrol gaya dan konten gambar yang dihasilkan. Hal ini akan melakukan paralelisasi komputasi cabang kondisional dan tidak bersyarat, sehingga menghasilkan inferensi yang lebih cepat.
- Data Parallelism: Metode ini mereplikasi seluruh model di setiap GPU, dengan setiap GPU memproses batch data input yang berbeda, sehingga meningkatkan throughput sistem secara keseluruhan.
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 Vertex AI.
Akselerasi GPU tunggal
Library xDiT memberikan manfaat untuk penayangan satu GPU dengan menggunakan torch.compile dan onediff untuk meningkatkan kecepatan runtime di GPU. Teknik ini juga dapat digunakan bersama dengan paralelisme campuran.
xDiT juga memiliki teknik komputasi perhatian yang efisien, yang disebut DiTFastAttn, untuk mengatasi bottleneck komputasi DiT. Untuk saat ini, teknik ini hanya tersedia untuk digunakan untuk penyiapan GPU tunggal atau bersama dengan paralelisme data.
Memulai di Model Garden
Penampung penayangan Cloud GPU yang dioptimalkan xDiT disediakan dalam Model Garden Vertex AI. Untuk model yang didukung, deployment akan menggunakan penampung 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 di penampung xDiT.
Menggunakan deployment sekali klik
Anda dapat men-deploy endpoint Vertex AI kustom dengan penampung 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 notifikasi email; satu saat model diupload dan satu lagi saat endpoint sudah siap.
Menggunakan notebook Colab Enterprise
Untuk fleksibilitas dan penyesuaian, gunakan contoh notebook Colab Enterprise untuk men-deploy endpoint Vertex AI dengan penampung xDiT menggunakan Vertex AI SDK untuk Python.
Buka halaman kartu model, lalu klik Buka notebook.
Pilih notebook Vertex Serving. Notebook akan terbuka di Colab Enterprise.
Jalankan notebook untuk men-deploy model menggunakan penampung xDiT dan kirim permintaan prediksi ke endpoint. Cuplikan kode untuk deployment adalah sebagai berikut:
XDIT_DOCKER_URI=us-docker.pkg.dev/deeplearning-platform-release/vertex-model-garden/xdit-serve.cu125.0-1.ubuntu2204.py310
serving_env = {
"MODEL_ID": "black-forest-labs/FLUX.1-schnell",
"TASK": "text-to-image",
"DEPLOY_SOURCE": "notebook",
"N_GPUS": "2",
"ULYSSES_DEGREE": "1",
"RING_DEGREE": "2",
"PIPEFUSION_PARALLEL_DEGREE": "1",
"USE_TORCH_COMPILE": "true",
}
model = aiplatform.Model.upload(
display_name=model_name,
serving_container_image_uri=XDIT_DOCKER_URI,
serving_container_ports=[7080],
serving_container_predict_route="/predict",
serving_container_health_route="/health",
serving_container_environment_variables=serving_env,
)
model.deploy(
endpoint=endpoint,
machine_type="a3-highgpu-2g",
accelerator_type="NVIDIA_H100_80GB",
accelerator_count=2,
deploy_request_timeout=1800,
service_account=SERVICE_ACCOUNT,
)
Variabel lingkungan
MODEL_ID
: Menentukan ID model DiT yang akan di-deploy, seperti 'black-forest-labs/FLUX.1-schnell'.TASK
: Menentukan tugas yang dilakukan model, seperti 'text-to-image-flux-xdit'.N_GPUS
: Menetapkan jumlah GPU yang akan digunakan untuk inferensi.ULYSSES_DEGREE
,RING_DEGREE
,PIPEFUSION_PARALLEL_DEGREE
: Mengontrol teknik paralelisme yang digunakan xDiT. Untuk mengetahui detail tentang setiap argumen, lihat argumen xDiT.USE_TORCH_COMPILE
: Mengaktifkan akselerasi GPU tunggal menggunakan torch.compile.
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. Daftar berikut adalah argumen utama yang mungkin perlu Anda konfigurasi:
N_GPUS
(bilangan bulat): Menentukan jumlah GPU yang akan digunakan untuk inferensi. Nilai defaultnya adalah1
.ENABLE_TILING
(Boolean): Mengurangi penggunaan memori GPU dengan mendekode komponen VAE satu kartu sekaligus. Argumen ini berguna untuk gambar atau video yang lebih besar dan untuk mencegah error kehabisan memori. Nilai defaultnya adalahfalse
.ENABLE_SLICING
(Boolean): Mengurangi penggunaan memori GPU dengan membagi tensor input menjadi slice untuk decoding VAE. Nilai defaultnya adalahfalse
.USE_TORCH_COMPILE
(Boolean): Mengaktifkan akselerasi GPU tunggal melalui torch.compile, sehingga meningkatkan kecepatan kompilasi. Nilai defaultnya adalahfalse
.PIPEFUSION_PARALLEL_DEGREE
(bilangan bulat): Menetapkan tingkat paralelisme untuk PipeFusion. Nilai yang lebih tinggi akan meningkatkan paralelisme, tetapi mungkin memerlukan lebih banyak memori. Nilai defaultnya adalah1
.WARMUP_STEPS
(bilangan bulat): Jika PipeFusion diaktifkan, argumen ini menentukan jumlah langkah pemanasan yang diperlukan sebelum inferensi dimulai. Nilai defaultnya adalah0
.ULYSSES_DEGREE
(bilangan bulat): Menetapkan derajat Ulysses. Nilai defaultnya adalah1
.RING_DEGREE
(bilangan bulat): Menetapkan derajat Cincin. Nilai defaultnya adalah1
.USE_CFG_PARALLEL
(Boolean): Mengaktifkan komputasi paralel untuk panduan bebas klasifikasi (CFG), teknik yang digunakan untuk mengontrol output model DiT. Jika diaktifkan, derajat paralelisme konstan adalah 2. Tetapkan ke 'true' saat menggunakan CFG. Nilai defaultnya adalahfalse
.USE_PARALLEL_VAE
(Boolean): Memungkinkan pemrosesan gambar resolusi tinggi yang efisien (lebih besar dari 2048 piksel) dengan melakukan paralelisasi komponen VAE. Nilai defaultnya adalahfalse
.
Untuk mengetahui daftar lengkap argumen, lihat class xFuserArgs
di
project GitHub xDiT.