Analisis latensi dan memori model transformator untuk pelatihan dan inferensi
LLMAnalysis Banyak formula atau persamaan mengambang di dalam makalah, blog, dll., Tentang cara menghitung pelatihan atau inferensi latensi dan memori untuk model bahasa besar (LLM) atau transformer. Daripada melakukan matematika pada kertas atau mengetik di lembar excel, let's automate the boring stuff with llm-analysis !
Mengingat model yang ditentukan, GPU, tipe data, dan konfigurasi paralelisme, analisis LLM memperkirakan latensi dan penggunaan memori LLM untuk pelatihan atau inferensi. Dengan analisis LLM, orang dapat dengan mudah mencoba berbagai pelatihan/penyiapan inferensi secara teoritis, dan lebih memahami kinerja sistem untuk skenario yang berbeda.
Analisis LLM membantu menjawab pertanyaan seperti:
feasible (tidak mendapatkan oom) dan optimal (memaksimalkan throughput dengan kendala latensi) untuk pelatihan atau inferensitime yang dibutuhkan dengan pengaturan yang diberikan untuk melakukan pelatihan atau inferensi dan cost (GPU-jam)modeling change , hardware improvement , quantization , parallelism , dll.)Periksa contoh kasus penggunaan. Dengan analisis LLM, Anda dapat melakukan analisis seperti itu dalam hitungan menit!
Untuk menginstal analisis LLM dari PYPI:
pip install llm-analysisUntuk menginstal pembangunan pengembangan terbaru:
pip install --upgrade git+https://github.com/cli99/llm-analysis.git@main Untuk menginstal dari sumber, klon Repo dan jalankan pip install . atau poetry install (instal puisi oleh pip install poetry ).
LLMAnalysis Untuk mengintegrasikan analisis LLM dalam kode Anda, gunakan kelas LLMAnalysis . Lihat Doc Llmanalysis untuk detailnya.
LLMAnalysis dibangun dengan kegagalan dan angka efisiensi memori dan kelas konfigurasi berikut:
ModelConfig mencakup informasi model, panjang urutan urutan maksimal, jumlah lapisan transformator, jumlah kepala perhatian, dimensi tersembunyi, ukuran kosa kataGPUConfig mencakup spesifikasi komputasi dan memori GPUDtypeConfig mencakup jumlah bit yang digunakan untuk berat model, aktivasi, dan penyematanParallelismConfig mencakup Tensor Parallelism ( tp ), Pipeline Parallelism ( pp ), Sequence Parallelism ( sp ), Parallelism Expert ( ep ), dan Data Parallelism ( dp ). Kemudian LLMAnalysis dapat ditanya dengan berbagai argumen melalui metode pelatihan dan inferensi.
LLM-analisis menyediakan dua fungsi masuk, kereta api dan infer, untuk kemudahan penggunaan melalui antarmuka baris perintah. Berlari
python -m llm_analysis.analysis train --helpatau
python -m llm_analysis.analysis infer --helpuntuk memeriksa opsi atau membaca dokumen yang ditautkan. Lihat contoh untuk melihat bagaimana mereka digunakan.
train dan infer Gunakan pemetaan nama-ke-konfigurasi yang telah ditentukan sebelumnya ( model_configs , gpu_configs , dtype_configs ) dan argumen input pengguna lainnya untuk membangun LLMAnalysis dan melakukan permintaan.
Pemetaan yang telah ditentukan sebelumnya diisi pada runtime dari model model json model, GPU, dan tipe data di bawah model_configs, GPU_Configs, dan dtype_configs. Untuk menambahkan model baru, GPU atau tipe data ke pemetaan untuk kueri, cukup tambahkan file deskripsi json ke folder yang sesuai.
LLM-Analysis juga mendukung pengambilan ModelConfig dari jalur file json config model atau wajah memeluk dengan nama model.
python -m llm_analysis.analysis train --model_name=local_example_model.json . Periksa konfigurasi model di bawah folder model_configs.EleutherAI/gpt-neox-20b sebagai model_name saat memanggil train atau infer fungsi entri. python -m llm_analysis.analysis train --model_name=EleutherAI/gpt-neox-20b --total_num_gpus 32 --ds_zero 3 . Dengan metode ini, analisis LLM bergantung pada transformers untuk menemukan konfigurasi model yang sesuai di huggingface.co/models, yang berarti informasi model yang lebih baru hanya ada setelah versi tertentu dari perpustakaan Transformers. Untuk mengakses model terbaru melalui nama mereka, perbarui paket transformers yang diinstal. Daftar perintah praktis disediakan untuk menanyakan pemetaan yang telah ditentukan sebelumnya serta memeluk wajah, atau untuk membuang konfigurasi. Jalankan python -m llm_analysis.config --help untuk detailnya.
Beberapa contoh:
python -m llm_analysis.config get_model_config_by_name EleutherAI/gpt-neox-20b Mendapat ModelConfig dari pemetaan yang dihuni dengan nama, jika tidak ditemukan, LLM-analisis mencoba untuk mendapatkannya dari Huggingface.
Perhatikan bahwa model LLAMA membutuhkan setidaknya transformers-4.28.1 untuk mengambil, baik memperbarui ke perpustakaan transformers nanti, atau menggunakan ModelConfig yang telah ditentukan untuk model LLAMA ( / dalam nama model diganti dengan _ ).
python -m llm_analysis.config list_gpu_configsmencantumkan nama semua konfigurasi GPU yang telah ditentukan sebelumnya, maka Anda dapat meminta
python -m llm_analysis.config get_gpu_config_by_name a100-sxm-80gb untuk menunjukkan GPUConfig yang sesuai.
Mengatur kegagalan dan efisiensi memori ke 1 (default) memberikan batas bawah pelatihan atau latensi inferensi, karena mengasumsikan kinerja perangkat keras puncak (yang tidak pernah terjadi). Kejut dekat atau efisiensi memori dapat ditemukan dengan membandingkan dan profil menggunakan dimensi input dalam model.
Jika seseorang harus membuat asumsi, untuk efisiensi jepit, literatur melaporkan hingga 0.5 untuk pelatihan model skala besar, dan hingga 0.7 untuk inferensi; 0.9 dapat menjadi target agresif untuk efisiensi memori.
LLM-analisis bertujuan untuk memberikan estimasi lower-bound dari penggunaan memori dan latensi.
Analisis LLM saat ini mencakup Tensor Parallelism (TP), Pipeline Parallelism (PP), Sequence Parallelism (SP), Parallelism Expert (EP), dan Data Parallelism (DP).
TP, PP, dan SP mengadopsi gaya paralelisasi yang digunakan dalam Megatron-LM untuk pelatihan dan FasterTransformer untuk inferensi
Dalam analisis pelatihan, DP Sharding mengasumsikan menggunakan DeepSpeed ZeRO atau FSDP . ds_zero digunakan untuk menentukan strategi dp sharding
| ds_zero | Nol kecepatan deep | FSDP | Sharding |
|---|---|---|---|
| 0 | dengan disabilitas | No_shard | Tidak ada sharding |
| 1 | Tahap 1 | N/a | Negara Bagian Shard Optimizer |
| 2 | Tahap 2 | Shard_grad_op | Gradien shard dan status pengoptimal |
| 3 | Tahap 3 | Full_shard | Gradien Shard, Status Pengoptimal, Parameter Model |
EP memparalelkan jumlah ahli MLP di seluruh perangkat ep_size , yaitu jumlah ahli per GPU adalah total number of experts / ep_size . Dengan demikian untuk modul MLP, jumlah perangkat untuk dimensi paralelisasi lainnya dibagi dengan ep_size dibandingkan dengan bagian lain dari model.
Komunikasi TP dihitung sebagai menggunakan ring allreduce . Komunikasi EP dihitung sebagai menggunakan alltoall . Waktu komunikasi DP dengan berat model yang tidak bergambar saat menggunakan FSDP atau Deep -kecepatan nol diperkirakan dan dibandingkan dengan latensi komputasi, nilai yang lebih besar dari keduanya digunakan untuk latensi keseluruhan. Komunikasi DP dan PP lainnya diabaikan untuk saat ini, yaitu dengan asumsi perhitungan yang sempurna dan komunikasi yang tumpang tindih, yang tidak benar ketika komunikasi tidak dapat tumpang tindih dengan komputasi karena ketergantungan, atau ketika komunikasi terlalu lama untuk disembunyikan karena interkoneksi yang lambat atau volume data yang besar.
Analisis LLM mendukung komputasi aktivasi penuh dan selektif.
| Activation_recomputation | Apa yang dicentang dan dihitung ulang |
|---|---|
| 0 | Tidak ada komputasi aktivasi; membutuhkan jumlah memori terbanyak |
| 1 | Pos Pemeriksaan Perhitungan perhatian (matriks qk^t Multiply, softmax, softmax dropout, dan perhatian atas V.) dalam modul perhatian lapisan transformator; Seperti yang dijelaskan dalam mengurangi rekomputasi aktivasi dalam model transformator besar. |
| 2 | Pos pemeriksaan input ke modul perhatian di lapisan transformator; membutuhkan perhatian ekstra ke depan. |
| 3 | Pos pemeriksaan input ke urutan modul (layernom-attention-layernom) di lapisan transformator; Membutuhkan izin ke depan tambahan (layernom-attention-layernom). |
| 4 | Rekomputasi aktivasi penuh menyimpan input ke lapisan transformator; membutuhkan jumlah memori paling sedikit; membutuhkan umpan ke depan ekstra dari seluruh lapisan. |
Jenis data dinyatakan dengan jumlah bit, hanya 32 (FP32, TF32), 16 (FP16, BF16), 8 (int8), dan 4 (int4) tipe data bit dimodelkan untuk saat ini.
Fine-tuning dimodelkan sama (dikendalikan oleh total_num_tokens yang diteruskan ke fungsi entri train ) sebagai pra-pelatihan, sehingga mengasumsikan fine-tuning penuh (semua parameter model). Parameter-efisien fine-tuning (PEFT) berada dalam dukungan di masa mendatang.
Inferensi mengasumsikan tumpang tindih sempurna dari operasi komputasi dan memori saat menghitung latensi, dan penggunaan kembali memori maksimum saat menghitung penggunaan memori.
Periksa Todos di bawah ini untuk apa selanjutnya dan tetaplah disini?! Kontribusi atau umpan balik apa pun sangat diterima!
Jika Anda menggunakan analisis LLM dalam pekerjaan Anda, silakan kutip:
Cheng Li. (2023). LLM-Analysis: Latency and Memory Analysis of Transformer Models for Training and Inference. GitHub repository, https://github.com/cli99/llm-analysis.
atau
@misc{llm-analysis-chengli,
author = {Cheng Li},
title = {LLM-Analysis: Latency and Memory Analysis of Transformer Models for Training and Inference},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/cli99/llm-analysis}},
}
Kontribusi dan saran dipersilakan.
Analisis LLM menggunakan pra-komit untuk memastikan pemformatan kode konsisten. Untuk permintaan tarik dengan kontribusi kode, silakan instal pra-komit ( pip install pre-commit ) serta kait yang digunakan ( pip install di repo), dan format kode (berjalan secara otomatis sebelum setiap komit git) sebelum mengirimkan PR.