- AMD GPU üzerinde büyük dil modellerini çalıştırmak için Docker tabanlı bir çıkarım motoru; Hugging Face modellerini hedefler ve LLaMA ailesine odaklanır
- Çalışma ortamı ROCm destekli AMD GPU, Docker ve ana makinede kurulu ROCm sürücüsü 5.4.2 veya uyumlu bir sürüm gerektirir
run-docker-amd.sh, Docker imajını otomatik olarak derler ve AMD GPU erişimi için gereken /dev/kfd, /dev/dri, video grubu, SYS_PTRACE, seccomp=unconfined ayarlarıyla konteyneri çalıştırır
- Kullanıcılar Hugging Face depo adını ve prompt'u argüman olarak vererek modeli değiştirebilir; örnek olarak
meta-llama/Llama-2-7b-chat-hf ve facebook/opt-1.3b sunulmuştur
- Çıkarım davranışını değiştirmek için
run_inference.py düzenlenip Docker imajı yeniden derlenmelidir; bellek yetersizse daha küçük bir model veya daha kısa giriş/çıkış uzunlukları kullanılmalıdır
Projenin amacı ve hedef modeller
- Bu proje, AMD GPU üzerinde LLM çalıştırmak için Docker tabanlı bir çıkarım motorudur
- Hugging Face modellerini kullanmak üzere tasarlanmıştır ve özellikle LLaMA model ailesine odaklanır
- Hugging Face Transformers kütüphanesini kullanır
Gereken ortam
- Çalıştırmadan önce gereken koşullar şunlardır
- ROCm destekleyen bir AMD GPU
- Sistemde kurulu Docker
- Ana makine sisteminde kurulu ROCm sürücüsü
- 5.4.2 veya uyumlu bir sürüm gerekir
Proje yapısı
- Depo yapısı
src/ dizini ile çalıştırma ve derleme dosyalarından oluşur
src/engine.py
src/model.py
src/utils.py
src/amd_setup.py
Dockerfile
requirements.txt
run_inference.py
run-docker-amd.sh
README.md
Hızlı çalıştırma akışı
- Depoyu klonladıktan sonra proje dizinine geçin
git clone https://github.com/slashml/amd-gpu-inference.git
cd amd-gpu-inference
- Çalıştırma betiğine yürütme izni verin
chmod +x run-docker-amd.sh
- Model adını ve prompt'u vererek çıkarım motorunu çalıştırın
./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", kullanmak istediğiniz Hugging Face modeliyle değiştirilebilir; prompt'u da kendiniz belirleyebilirsiniz
Docker ve ROCm çalıştırma yöntemi
Aptfile, Docker konteyneri içine kurulacak ROCm paketlerini listeler
- Gerekli ROCm sürücülerini ve kütüphanelerini konteyner içinde kullanılabilir hâle getirmeye yönelik bir yapılandırmadır
run-docker-amd.sh, Docker imajını otomatik olarak derler
- Manuel derleme aşağıdaki komutla yapılabilir
docker build -t amd-gpu-inference .
- Konteyneri manuel çalıştırırken AMD GPU erişimi için cihaz ve yetki seçeneklerini belirtin
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"
"model_name" alanına Hugging Face model adını, "your prompt here" alanına ise giriş metnini yazın
Özelleştirme ve sorun giderme
- Model değişikliği, çalıştırma sırasında Hugging Face depo adını belirtme yöntemiyle yapılır
./run-docker-amd.sh "facebook/opt-1.3b" "Your prompt here"
- Çıkarım mantığını değiştirmek için
run_inference.py dosyasını düzenleyin
- Değişiklikten sonra Docker imajı yeniden derlenmelidir
- Sorun giderme maddeleri şunlardır
- AMD GPU sürücüsünün ve ROCm'in ana makine sisteminde doğru şekilde kurulup yapılandırıldığını kontrol edin
"out of memory" hatası oluşursa daha küçük bir model kullanın veya giriş/çıkış uzunluğunu azaltın
- Modele özgü sorunlar için Hugging Face'teki ilgili model belgelerine başvurun
Lisans ve referans
- Proje, katkıları Pull Request olarak kabul edebilir
- ROCm, AMD tarafından geliştirilmiştir ve MIT License ile sunulur
- Sorular veya sorunlar GitHub deposunun issue bölümünde açılabilir
1 yorum
Hacker News yorumları
Çıkarım amacıyla kullanılacaksa, desteklenen bir kartsa ya da Linux’ta
HSA_OVERRIDE_GFX_VERSIONkullanılabilen bir mimariyse, yukarı akış PyTorch vetransformersile neredeyse her şey çalıştırılabiliyor.llama.cppde en az yaklaşık 1 yıldır oldukça sorunsuz derleniyor; Windows’ta ise genellikle sürümlerdewin-hipikili dosyası bulunuyor, olmazsa performansı daha düşük olsa da Vulkan derlemesiyle etrafından dolaşmak mümkün.Ancak bu yazıdaki ROCm 5.4.2 neredeyse 2 yıl önceki bir sürüm ve o zamandan beri çok şey değişti; Ekim 2024’te neden yeni yayımlandığını merak ediyorum.
Yakın zamanda RDNA3 odaklı uyumluluk dokümanını ROCm 6.2 temelinde güncelledim; birkaç ay içinde bile yukarı akış
bitsandbytes, yukarı akışxformers, Triton tabanlı Flash Attention gibi çok sayıda değişiklik oldu: https://llm-tracker.info/howto/AMD-GPUsa1111gibi bir şey kullanıyorsanızrequirements.txtdosyasına güvenmeyin; PyTorch ana sayfasındaki yönergelere göre ROCm sürümü torch kurmanız yeterli.Obsidian da benzer; HIP en azından Arch ve Ubuntu’da kolay sayılır, Fedora’da ise hâlâ biraz ellemek gerekiyor.
xformersın da çalıştığını bilmiyordum, bu iyi haber.Doğrudan çalışan tek şey örneği bulunan Ollama’ydı: https://github.com/ollama/ollama/blob/main/docs/docker.md
llama.cppvekoboldcppiçin Docker imajları var ama çalıştırma örnekleri eksikti;text-generation-webui-dockerise RHEL9’daki 7800 XT’de bozuldu: 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-dockerÖzetle, en güncel ROCm 6.2 ile tek düğümlü 8×MI300X AMD GPU üzerinde Llama 405B’yi tam hassasiyetli çıkarımla çalıştırıyorlar.
ROCm 6.2 ve AMD yığınının Nvidia’ya kıyasla ne kadar olgun görüldüğünü merak ediyorum.
Üretken yöntemlerle kabaca yapılmış makine öğrenimi kütüphanelerinin çoğalması şaşırtıcı derecede fazla.
Bu kütüphanenin yarısı
printifadelerinden oluşuyor; dallanma yapılan yerlerde de aslında dallanmaya gerek yok.İki ortam değişkeni tanımlayıp iki
torchbayrağı ayarlamaktan ibaret.Ekiplerde veya kurumlarda beklenti yönetiminin gerçekten büyük bir konu olduğunu düşünüyorum.
Gerçekten de neredeyse hiçbir içerik yok.
Eski ROCm 5.4.2 kullanıyor gibi görünüyor; 2 yıl önceki bir sürüm olduğu için RX 7900 XTX’imi destekleyip desteklemeyeceğinden şüpheliyim.
Kişisel olarak en kolayı en güncel
rocm/pytorchimajını kullanıp gerekli şeyleri onun içinde çalıştırmak oldu.gfx1100), ROCm 5.4’terocBLASgibi matematik kütüphanelerinde ilk kez etkinleştirildi; ancakMIOpengibi yapay zeka kütüphaneleri sanırım ROCm 5.5’e kadar etkin değildi.Sonraki sürümlerde performansın da epey ciddi biçimde iyileştiğini düşünüyorum.
Ubuntu 24.04 ve Debian Unstable’da, işletim sisteminin sağladığı paketlerle Vega sonrası neredeyse tüm ayrık AMD GPU’larda
llama.cppROCm ile çalıştırılabiliyor.Docker’a veya
HSA_OVERRIDE_GFX_VERSIONa da gerek yok;hipcc,libhipblas-dev,librocblas-dev,cmakevb. kurduktan sonravideo,rendergrup izinlerini veripGGML_HIPBLAS=ONile derlemek yeterli.RDNA 3, MI200, MI300 kullanıcıları için performans açısından AMD’nin sağladığı ROCm paketleri daha iyi; PyTorch gereken durumlarda da sistem paketlerinde olmayan bağımlılıklar olduğu için AMD’nin sağladığı paketleri kullanmak daha iyi.
Yine de kurulum kolaylığı ve eski donanım uyumluluğu açısından işletim sistemi paketlerini geçmek zor; referans bağlantı da https://lists.debian.org/debian-ai/2024/07/msg00002.html.
Ryzen 8700G’yi NPU ile sinir ağı çıkarımı yapmak için alalı yaklaşık 8 ay oldu, ama şimdiye kadar hızlandırmayı NPU’dan değil, yalnızca iGPU’nun Vulkan’ı üzerinden elde ediyorum
Sadece Linux kullanıyorum; iyi tarafı, 64 GB RAM sayesinde 32 GB’ı aşan modelleri de sorunsuzca deneyebilmiş olmam
Vulkan arka ucunu destekleyen
llama.cpptakdiri hak ediyorllama.cppderlenirkenLLAMA_HIP_UMA=1bayrağı denenebilirhttps://github.com/amd/RyzenAI-SW’ye bakınca NPU ile kurcalanabilecek epey yazılım var, ama Phoenix 16 TOPS olduğu için doğrudan test etmeye heveslenmedim
NixOS iş istasyonuna şunları eklemek yeterli oldu
hardware.graphics.enable = true;’yu açıpservices.ollamaiçindeacceleration = "rocm";,ROC_ENABLE_PRE_VEGA = "1";,HSA_OVERRIDE_GFX_VERSION = "11.0.0";ayarlarını yaptımEskiden
llamafile’ın sadeliğini görünce AMD ROCm kurmayı neredeyse deneyecektimAma
sudo apt install rocmsonucunda 203 kurulum paketi, yaklaşık 2,37 GB indirme ve 35,7 GB gerekli alan çıktıEsasen GPU sürücüsüne yakın bir şey için 36 GB’ın nasıl gerekçelendirilebildiğini anlamıyorum
Birçok araç ve kütüphane içeriyor
CUDA toolkit de tek dosya olarak indirildiğinde yalnızca indirme boyutu 4 GB’ı aşıyor; yani hangi tarafta olursa olsun sonuç akıl almaz derecede büyük görünüyor
Bu, sarmalayıcının sarmalayıcısının sarmalayıcısı üstüne yapay zekanın yazdığı bir sarmalayıcı gibi görünüyor
# Other AMD-specific optimizations can be added here,# For example, you might want to set specific flags or use AMD-optimized librariesgibi yorumlar var; öyleyse burada ne yapıldığını anlamıyorumrequirementsdosyası ve Dockerfile; geri kalanın çoğu da yardımcı betiklerŞu sıralar fiyat/performans açısından iyi AMD GPU’lar hangileri?
Az önce eBay yenilenmiş ürün olarak ikinci el iki 3090’ı tanesi yaklaşık 750 dolara aldım; yerelde LLM çalıştırırken başkalarının ne kullandığını merak ediyorum
32 GB HBM2 var ve temel Flash Attention 2 benchmark’ında 3090’dan yaklaşık %0–5 daha hızlı, ama gerçek uygulama performansı dalgalı
CDNA’nın matris çekirdekleri için optimize edilmemiş çok proje var; RDNA için yapılmış çalışma olsa bile çoğu zaman CDNA’ya aynen taşınmıyor
llama.cpp’nin AMD için Flash Attention PR’ını, yalnızca header’dan oluşan bir kütüphanenin gereksiz bağımlılık eklediği gerekçesiyle kapatması da sinir bozucu: https://github.com/ggerganov/llama.cpp/pull/7011SDXL varsayılanlarında
xformerskullanınca 4,5–5 it/s civarında, yani 3090 ile 4090 arasında bir yerde;exllamav2’de Qwen 72B 3bpw yaklaşık 7 t/s ile 3090’dan yavaş, ama 3090’a sığdırmak için daha düşük hassasiyet kullanmak gerekiyorBu projenin AMD kullanıcılarına
llama.cpp,exllamav2,mlc-aigibi mevcut seçeneklerden daha fazla ne sunduğundan pek emin değilim; bugünlerde çoğu proje görece kolay çalışıyorxformers, Ollama güncellemelerinde sürekli bozulduğu için pek değerli olmadıNvidia tarafında geceleri daha rahat uyunuyor
HBM2 var ve bellek bant genişliği 4090 ile aynı: 1 TB/s
Ancak VRAM sadece 16 GB
1.000 dolara 24 GB RAM
İnsanlar sık sık “Docker tabanlı” diyor, ama bunun gerçekte anlamı
$SOFTWARE’ın Docker imajı olarak dağıtılması“Docker tabanlı” denince sanki AMD kartta çıkarımı Docker yapıyormuş gibi okunuyor; bu bana anlamsız bir ifade gibi geliyor
OpenAI de K8s kümelerini bu şekilde çalıştırıyor, AMD’nin de dokümantasyonu var
Ancak AMD yapay zeka tarafında doğru kart, doğru ROCm sürümü ve saf şans gerekiyor
AMD, ROCm destekli Docker imajları sağlıyor; bunu temel katman olarak uygulamayla birleştirip GPU’yu konteynere aktarırsanız çalışabilir
Sonuçta dağıtım sırasında dikkat etmeniz gereken değişkenlerden birini azalttığı için, kelimenin tam anlamıyla Docker ile AMD üzerinde çıkarım yapmış oluyorsunuz
Betiğe bakınca GPU’yu mount ettiğini görüyorsunuz: https://github.com/slashml/amd_inference/blob/main/run-docke...