- Mesin inferensi berbasis Docker untuk menjalankan model bahasa besar di GPU AMD, ditujukan untuk model Hugging Face dan berfokus pada keluarga LLaMA
- Lingkungan eksekusi memerlukan GPU AMD yang mendukung ROCm, Docker, serta driver ROCm 5.4.2 atau versi kompatibel yang terpasang di host
run-docker-amd.sh secara otomatis membangun image Docker dan menjalankan container dengan pengaturan /dev/kfd, /dev/dri, grup video, SYS_PTRACE, dan seccomp=unconfined yang diperlukan untuk akses GPU AMD
- Pengguna dapat mengganti model dengan meneruskan nama repositori Hugging Face dan prompt sebagai argumen; contoh yang diberikan adalah
meta-llama/Llama-2-7b-chat-hf dan facebook/opt-1.3b
- Untuk mengubah perilaku inferensi, perlu memodifikasi
run_inference.py lalu membangun ulang image Docker; jika kehabisan memori, gunakan model yang lebih kecil atau panjang input/output yang lebih pendek
Tujuan proyek dan model target
- Proyek ini adalah mesin inferensi berbasis Docker untuk menjalankan LLM di GPU AMD
- Dirancang untuk menggunakan model dari Hugging Face, dengan fokus khusus pada keluarga model LLaMA
- Menggunakan library Hugging Face Transformers
Lingkungan yang dibutuhkan
- Persyaratan sebelum menjalankan adalah sebagai berikut
- GPU AMD yang mendukung ROCm
- Docker yang terpasang di sistem
- Driver ROCm yang terpasang di sistem host
- Diperlukan versi 5.4.2 atau versi kompatibel
Struktur proyek
- Struktur repositori terdiri dari direktori
src/ serta file eksekusi dan build
src/engine.py
src/model.py
src/model.py
src/utils.py
src/amd_setup.py
Dockerfile
requirements.txt
run_inference.py
run-docker-amd.sh
README.md
Alur eksekusi cepat
- Clone repositori lalu pindah ke direktori proyek
git clone https://github.com/slashml/amd-gpu-inference.git
cd amd-gpu-inference
- Berikan izin eksekusi pada skrip
chmod +x run-docker-amd.sh
- Jalankan mesin inferensi dengan meneruskan nama model dan prompt
./run-docker-amd.sh "meta-llama/Llama-2-7b-chat-hf" "Translate the following English text to French: 'Hello, how are you?'"
"meta-llama/Llama-2-7b-chat-hf" dapat diganti dengan model Hugging Face yang ingin digunakan, dan prompt juga dapat ditentukan sendiri
Cara menjalankan Docker dan ROCm
Aptfile berisi daftar paket ROCm yang akan dipasang di dalam container Docker
- Ini adalah konfigurasi agar driver dan library ROCm yang diperlukan dapat digunakan di dalam container
run-docker-amd.sh secara otomatis membangun image Docker
- Build manual dapat dilakukan dengan perintah berikut
docker build -t amd-gpu-inference .
- Saat menjalankan container secara manual, tentukan perangkat dan opsi izin untuk akses GPU AMD
docker run --rm -it \
--device=/dev/kfd \
--device=/dev/dri \
--group-add=video \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
amd-gpu-inference "model_name" "your prompt here"
- Masukkan nama model Hugging Face pada
"model_name", dan teks input pada "your prompt here"
Kustomisasi dan pemecahan masalah
- Penggantian model ditangani dengan menentukan nama repositori Hugging Face saat eksekusi
./run-docker-amd.sh "facebook/opt-1.3b" "Your prompt here"
- Untuk mengubah logika inferensi, modifikasi file
run_inference.py
- Setelah perubahan, image Docker harus dibangun ulang
- Poin pemecahan masalah adalah sebagai berikut
- Pastikan driver GPU AMD dan ROCm telah terpasang dan dikonfigurasi dengan benar di sistem host
- Jika terjadi error
"out of memory", gunakan model yang lebih kecil atau kurangi panjang input/output
- Untuk masalah spesifik model, lihat dokumentasi model terkait di Hugging Face
Lisensi dan referensi
- Proyek ini dapat menerima kontribusi melalui Pull Request
- ROCm dikembangkan oleh AMD dan disediakan dengan MIT License
- Pertanyaan atau isu dapat dibuka sebagai issue di repositori GitHub
1 komentar
Opini Hacker News
Untuk keperluan inferensi, selama kartunya didukung atau arsitekturnya bisa memakai
HSA_OVERRIDE_GFX_VERSIONdi Linux, hampir semuanya bisa dijalankan dengan PyTorch upstream dantransformersllama.cppjuga sudah setidaknya sekitar 1 tahun dapat dikompilasi tanpa banyak masalah, dan di Windows biasanya rilisnya punya binarywin-hip; kalau tidak, bisa beralih ke build Vulkan meski performanya lebih rendahNamun ROCm 5.4.2 dalam tulisan ini adalah versi hampir 2 tahun lalu dan banyak hal sudah berubah sejak itu, jadi saya penasaran kenapa baru dipublikasikan pada Oktober 2024
Saya baru-baru ini memperbarui dokumen kompatibilitas yang berfokus pada RDNA3 berdasarkan ROCm 6.2, dan bahkan dalam beberapa bulan saja ada banyak perubahan seperti
bitsandbytesupstream,xformersupstream, Flash Attention berbasis Triton, dll.: https://llm-tracker.info/howto/AMD-GPUsJika memakai sesuatu seperti
a1111, jangan percayarequirements.txt; instal torch versi ROCm sesuai panduan di situs PyTorchObsidian juga mirip, dan HIP cukup mudah setidaknya di Arch dan Ubuntu, sementara Fedora masih perlu sedikit penyesuaian
Saya tidak tahu
xformersjuga berjalan; itu kabar bagusYang langsung berjalan hanya Ollama yang punya contoh: https://github.com/ollama/ollama/blob/main/docs/docker.md
llama.cppdankoboldcpppunya image Docker tetapi contoh menjalankannya kurang, dantext-generation-webui-dockerrusak di 7800 XT pada RHEL9: https://github.com/ggerganov/llama.cpp/blob/master/docs/dock..., https://github.com/LostRuins/koboldcpp?tab=readme-ov-file#do..., https://github.com/Atinoda/text-generation-webui-dockerRingkasnya, dengan ROCm 6.2 terbaru, mereka menjalankan Llama 405B untuk inferensi presisi penuh pada satu node berisi 8×MI300X AMD GPU
Saya penasaran seberapa matang ROCm 6.2 dan stack AMD dibandingkan Nvidia
Banyaknya library machine learning yang tampaknya dibuat asal-asalan secara generatif benar-benar mengejutkan
Library ini separuhnya berisi pernyataan
print, dan bagian yang bercabang sebenarnya tidak perlu bercabangIntinya hanya mendefinisikan dua variabel lingkungan dan menyetel dua flag
torchMenurut saya, di tim atau organisasi, pengelolaan ekspektasi adalah bagian yang sangat besar
Memang hampir tidak ada isinya
Sepertinya memakai ROCm 5.4.2 yang sudah lama; itu versi 2 tahun lalu, jadi saya ragu apakah mendukung RX 7900 XTX saya
Secara pribadi, yang paling mudah bagi saya adalah memakai image
rocm/pytorchterbaru dan menjalankan yang diperlukan di sanagfx1100) pertama kali diaktifkan di library matematika sepertirocBLASpada ROCm 5.4, tetapi library AI sepertiMIOpensepertinya belum diaktifkan sampai ROCm 5.5Menurut saya performanya juga meningkat cukup besar pada rilis-rilis berikutnya
Di Ubuntu 24.04 dan Debian Unstable, hanya dengan paket yang disediakan sistem operasi,
llama.cppbisa dijalankan dengan ROCm pada hampir semua GPU AMD diskret sejak VegaTidak perlu Docker maupun
HSA_OVERRIDE_GFX_VERSION; cukup instalhipcc,libhipblas-dev,librocblas-dev,cmake, dll., beri hak grupvideodanrender, lalu build denganGGML_HIPBLAS=ONUntuk pengguna RDNA 3, MI200, dan MI300, paket ROCm dari AMD lebih baik demi performa, dan jika membutuhkan PyTorch juga sebaiknya memakai paket dari AMD karena ada dependensi yang tidak tersedia di paket sistem
Meski begitu, dari sisi kemudahan instalasi dan kompatibilitas hardware lama, paket sistem operasi sulit dikalahkan; tautan rujukannya adalah https://lists.debian.org/debian-ai/2024/07/msg00002.html
Sudah sekitar 8 bulan sejak saya membeli Ryzen 8700G untuk melakukan inferensi neural network dengan NPU, tetapi sampai sekarang akselerasi yang saya dapatkan hanya lewat Vulkan di iGPU, bukan NPU
Saya hanya memakai Linux, dan sisi baiknya, berkat RAM 64GB saya bisa mencoba model yang lebih dari 32GB tanpa masalah
llama.cppyang mendukung backend Vulkan layak dipujillama.cppbisa dicoba menambahkan flagLLAMA_HIP_UMA=1Kalau melihat https://github.com/amd/RyzenAI-SW, ada cukup banyak software untuk bereksperimen dengan NPU, tetapi karena Phoenix hanya 16 TOPS, saya tidak tertarik mengujinya sendiri
Di workstation NixOS, cukup menambahkan ini saja
Aktifkan
hardware.graphics.enable = true;dan diservices.ollamaaturacceleration = "rocm";,ROC_ENABLE_PRE_VEGA = "1";,HSA_OVERRIDE_GFX_VERSION = "11.0.0";Dulu saya hampir memasang AMD ROCm setelah melihat kesederhanaan
llamafileTapi hasil
sudo apt install rocmadalah 203 paket yang akan diinstal, unduhan sekitar 2,37GB, dan ruang yang dibutuhkan 35,7GBSaya tidak paham bagaimana 36GB bisa dibenarkan untuk sesuatu yang pada dasarnya mirip driver GPU
Di dalamnya ada berbagai tool dan library
CUDA toolkit juga, kalau diunduh sebagai satu file, unduhannya saja lebih dari 4GB, jadi dari sisi mana pun hasilnya terlihat tidak masuk akal besarnya
Ini terlihat seperti wrapper buatan AI di atas wrapper dari wrapper dari wrapper
Ada komentar seperti
# Other AMD-specific optimizations can be added here,# For example, you might want to set specific flags or use AMD-optimized libraries, jadi saya tidak tahu sebenarnya apa yang dilakukan di sinirequirementsbesar dan Dockerfile, sisanya kebanyakan helper scriptGPU AMD yang value-for-money saat ini apa?
Saya baru saja membeli dua 3090 bekas refurb di eBay sekitar 750 dolar masing-masing, dan penasaran orang lain memakai apa untuk menjalankan LLM secara lokal
32GB HBM2, dan di benchmark dasar Flash Attention 2 sekitar 0–5% lebih cepat daripada 3090, tetapi performa aplikasi nyata naik-turun
Banyak proyek belum dioptimalkan untuk matrix core CDNA, dan meskipun ada pekerjaan untuk RDNA, sering kali itu tidak langsung berlanjut ke CDNA
Menyebalkan juga bahwa
llama.cppmenutup PR Flash Attention untuk AMD dengan alasan library header-only menambahkan dependensi yang tidak perlu: https://github.com/ggerganov/llama.cpp/pull/7011Dengan
xformerspada default SDXL, hasilnya sekitar 4,5–5it/s, kira-kira di antara 3090 dan 4090; diexllamav2, Qwen 72B 3bpw sekitar 7t/s, lebih lambat daripada 3090, tetapi 3090 harus memakai presisi yang lebih rendah agar muatSaya kurang tahu proyek ini memberi apa lagi untuk pengguna AMD dibanding pilihan yang sudah ada seperti
llama.cpp,exllamav2,mlc-ai, dan belakangan kebanyakan proyek relatif mudah dijalankanxformers, atau Ollama, jadi nilainya tidak terlalu terasaDengan Nvidia, tidur malam rasanya lebih tenang
Ada HBM2 dan bandwidth memori 1TB/s yang sama seperti 4090
Namun VRAM-nya hanya 16GB
24GB RAM seharga 1.000 dolar
Orang sering mengatakan “berbasis Docker”, tetapi arti sebenarnya adalah mendistribusikan
$SOFTWAREsebagai image DockerKalau disebut “berbasis Docker”, kesannya seolah inferensi di kartu AMD dilakukan dengan Docker, dan itu terasa seperti ungkapan yang tidak masuk akal
OpenAI juga menjalankan cluster K8s seperti ini, dan AMD juga punya dokumentasi
Namun di sisi AMD AI, Anda butuh kartu yang tepat, versi ROCm yang tepat, dan keberuntungan murni
AMD menyediakan image Docker dengan dukungan ROCm, jadi jika itu dijadikan base layer, digabungkan dengan aplikasi, lalu GPU diteruskan ke container, itu bisa berjalan
Pada akhirnya, ini mengurangi satu variabel yang perlu diperhatikan saat deployment, jadi secara harfiah memang melakukan inferensi di AMD dengan Docker
Kalau melihat skripnya, GPU di-mount: https://github.com/slashml/amd_inference/blob/main/run-docke...