AI temelli kurumsal uygulamaları ile değer sunabilmek için, alan özelinde verilerle uyumlu hale getirilmiş AI temeli modellerini hızlı bir şekilde oluşturma ve dağıtma yeteneği oldukça önemlidir.
NVIDIA NIM, son AI temelli modeller için önceden yapılandırılmış, performans açısından optimize edilmiş çıkarım mikro hizmetleri sunarak, parametre verimli ince ayar (PEFT) kullanarak özelleştirilmiş modellerin sorunsuz bir şekilde dağıtımına olanak tanır.
Bazı durumlarda, temel model ağırlıklarının doğrudan eğitim veya özelleştirme sürecinde ayarlandığı sürekli ön eğitim, doğru pozitif optimizasyon (DPO), denetimli ince ayar (SFT) veya model birleştirme gibi yöntemlerin kullanılması idealdir. Bu tür durumlarda, modeli yeni ağırlıklarıyla optimal performans için çıkarım yazılımı yapılandırması güncellenmelidir.
NIM, bu genellikle uzun ve zahmetli süreci sizin yerinize üstlenerek, ayarlanmış model ve yerel çevrenizdeki GPU’lar için performans optimize edilmiş TensorRT-LLM çıkarım motoru oluşturup, bunu tek adımda çalıştırmaya uygun hale getirir.
Bu yazıda, SFT yoluyla özelleştirilmiş modeller için NIM mikro hizmetlerinin hızla nasıl dağıtılacağını keşfedeceğiz. Tüm gerekli komutları ve bazı yararlı seçenekleri sunacak, böylece kendi projelerinizde hemen deneme yapabileceksiniz.
Gereksinimler
Bu eğitimi çalıştırmak için, 80 GB GPU belleği ile desteklenen bir NVIDIA hesaplama ortamına ve git-lfs
programının kurulu olmasına ihtiyacınız var.
NVIDIA hızlandırmalı bir hesaplama ortamında bir NIM mikro hizmetini çekip dağıtabilmeniz için bir NGC API anahtarı almanız da gerekmektedir.
- NVIDIA API Kataloğu’ndaki Meta Llama 3 8B Instruct model listesini ziyaret edin.
- Üst sağ köşeden Giriş Yap seçeneğini tıklayın ve talimatları takip edin.
- Giriş yaptıktan sonra, Bu NIM ile Oluştur seçeneğini model sayfasında seçin.
- Özelleştirilmiş API seçeneğini tıklayın ve NIM mikro hizmetlerine erişim için iki seçenekten birini takip edin:
- Araştırma, geliştirme ve test amacıyla ücretsiz erişim sunan NVIDIA Geliştirici Programı üyeliği.
- NVIDIA Kurumsal Destek içeren 90 günlük NVIDIA AI Kurumsal lisansı.
Seçtiğiniz erişim yöntemi için gerekli bilgileri verdikten sonra, NGC API anahtarınızı kopyalayın ve NIM ile devam etmek için hazır olun. Daha fazla bilgi için NVIDIA NIM’i LLM’ler için Başlatma sayfasını ziyaret edebilirsiniz.
NIM Mikro Hizmetleri ile Başlamak
NGC CLI API anahtarınızı, hesaplama çevrenizde bir ortam değişkeni olarak ayarlayın:
export NGC_API_KEY=<<API ANAHTARINIZI BURAYA GİRİN>>
Ayrıca, optimizasyon sürecinde bir önbellek olarak kullanılacak bir dizin oluşturmanız ve izinlerini ayarlamanız gerekmektedir:
export NIM_CACHE_PATH=/tmp/nim/.cache
mkdir -p $NIM_CACHE_PATH
chmod -R 777 $NIM_CACHE_PATH
Performans optimize edilmiş TensorRT-LLM çıkarım motorları ile özelleştirilmiş modellerin dağıtımını göstermek için, SFT sürecinden geçmiş bir modele ihtiyacınız var. Bu eğitim için, NVIDIA OpenMath2-Llama3.1-8B modelini kullanın. Bu model, Meta’nın Llama-3.1-8B modelinin OpenMathInstruct-2 veri seti kullanılarak özelleştirilmiş halidir.
Temel modelin, NIM için indirilebilir durumda olması gerekiyor. İndirilebilir NIM mikro hizmetleri hakkında daha fazla bilgi için NVIDIA API Kataloğu’ndaki NIM Türü: Her Yerde Çalıştır filtreni gözden geçirin.
Tüm ihtiyacınız olan bu modelin ağırlıklarıdır ve bunları birkaç şekilde elde edebilirsiniz. Bu yazıda, model deposunu aşağıdaki komutları kullanarak klonlayacağız:
git lfs install
git clone https://huggingface.co/nvidia/Llama-3.1-Nemotron-70B-Instruct-HF
export MODEL_WEIGHT_PARENT_DIRECTORY=$PWD
Model ağırlıklarını topladıktan sonra, bir sonraki adıma geçerek mikro hizmetinizi başlatabilirsiniz.
Mevcut Performans Profillerinden Seçim Yapma
Seçtiğiniz model ve donanım yapılandırmasına bağlı olarak, en uygun çıkarım performans profili otomatik olarak seçilir. Yerel çıkarım motoru oluşturma için iki mevcut performans profili bulunmaktadır:
- Gecikme: Gecikme için optimize edilmiş bir NIM mikro hizmeti oluşturmayı hedefler.
- Verim: Toplu verim için optimize edilmiş bir NIM mikro hizmeti oluşturmayı amaçlar.
Daha fazla bilgi için, desteklenen özellikler ve kullanılabilir hassasiyet dahil, NVIDIA NIM belgelerindeki Destek Matrisine patın.
SFT Modeli Kullanarak Örnek
OpenMath2-Llama3.1-8B için yerel olarak oluşturulmuş bir TensorRT-LLM çıkarım motoru oluşturmak için aşağıdaki komutları çalıştırın:
docker run -it --rm --gpus all
--user $(id -u):$(id -g)
--network=host
--shm-size=32GB
-e NGC_API_KEY
-e NIM_FT_MODEL=/opt/weights/hf/OpenMath2-Llama3.1-8B
-e NIM_SERVED_MODEL_NAME=OpenMath2-Llama3.1-8B
-v $NIM_CACHE_PATH:/opt/nim/.cache
-v $MODEL_WEIGHT_PARENT_DIRECTORY:/opt/weights/hf
nvcr.io/nim/meta/llama3_1-8b:1.3.0
Bu komut, tipik NIM mikro hizmetini dağıtma komutuna oldukça benzemektedir. Bu durumda, OpenMath2-Llama3.1-8B modeline işaret eden ekstra NIM_FT_MODEL
parametresini eklemiş oldunuz.
Artık, NIM yerel olarak optimize edilmiş bir çıkarım motoru oluşturacak. Bu yeni NIM mikro hizmetini kullanarak çıkarım yapmak için aşağıdaki Python kodu örneğini çalıştırabilirsiniz:
from openai import OpenAI
client = OpenAI(
base_url = "http://localhost:8000/v1",
api_key = "none"
)
completion = client.chat.completions.create(
model="OpenMath2-Llama3.1-8B",
messages=[{"role":"user","content":"Adın ne?"}],
temperature=0.2,
top_p=0.7,
max_tokens=100,
stream=True
)
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
Kendi Performans Profilinizle Optimize Edilmiş TensorRT-LLM Motoru Oluşturma
Desteklenen GPU’lar kullanarak, NIM mikro hizmetinizi başlatmak için benzer bir komutu kullanabilirsiniz. Model Profili talimatlarını takip ederek mikro hizmetinizi başlatabilir ve hangi profillerin mevcut olduğunu öğrenebilirsiniz.
export IMG_NAME="nvcr.io/nim/meta/llama-3.1-8b-instruct:1.3.0"
docker run --rm --runtime=nvidia --gpus=all $IMG_NAME list-model-profiles
-e NGC_API_KEY=$NGC_API_KEY
Eğer bir H100 GPU kullanıyorsanız, şu profilleri görmelisiniz:
tensorrt_llm-h100-fp8-tp1-throughput
tensorrt_llm-h100-fp8-tp2-latency
Komutu yeniden çalıştırın ve istediğiniz profili belirtmek için ek bir ortam değişkeni sağlayın:
docker run --rm --runtime=nvidia --gpus=all $IMG_NAME list-model-profiles
-e NGC_API_KEY=$NGC_API_KEY
-e NIM_MODEL_PROFILE=tensorrt_llm-h100-fp8-tp2-latency
İstediğiniz profille birlikte NIM mikro hizmetinizi yeniden başlattıktan sonra, aşağıdaki Python kodunu kullanarak modelle etkileşim sağlayabilirsiniz:
from openai import OpenAI
client = OpenAI(
base_url = "http://localhost:8000/v1",
api_key = "none"
)
completion = client.chat.completions.create(
model="llama-3.1-8b-instruct",
messages=[{"role":"user","content":"Adın ne?"}],
temperature=0.2,
top_p=0.7,
max_tokens=100,
stream=True
)
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
Sonuç
PEFT veya SFT yöntemlerini kullanarak model özelleştirmeleri gerçekleştiriyorsanız, NIM, yüksek performanslı çıkarım için özel model dağıtımını hızlandırıyor. Yerel ortamınızda otomatik olarak oluşturulan optimize edilmiş TensorRT-LLM çıkarım motorları, hızlı ve verimli bir şekilde AI çıkarımını her yerde dağıtma olanağı sunuyor.
Daha fazla bilgi için aşağıdaki kaynakları inceleyebilirsiniz:
NVIDIA ve NIM mikro hizmetleri topluluğuyla etkileşim kurmak için NVIDIA NIM geliştirici forumuna göz atabilirsiniz.