Güçlü bir AI ajanı geliştirdiniz ve bunu iş arkadaşlarınızla paylaşmaya hazırsınız, fakat bir büyük korkunuz var: Ajan aynı anda 10, 100 veya hatta 1.000 meslektaşınız tarafından kullanıldığında çalışacak mı? Bu kritik soruyu yanıtlamak, bir AI ajanını üretime almanın önemli bir parçasıdır. Yakın zamanda, AI-Q NVIDIA Blueprint kullanarak bir derin araştırma ajanını içsel olarak dağıttığımızda bu soruyla karşılaştık. Bu uygulama, LangGraph kullanılarak oluşturulmuş bir ajandır.
Bu yazıda, NVIDIA NeMo Ajan Araç Seti’nden yararlanarak agentik AI uygulamamızı üretime alma sürecimizde kullandığımız araçlar ve teknikler ele alınacaktır.
Güvenli ve Ölçeklenebilir Bir Derin Araştırmacı Nasıl Geliştirilir?
Derin araştırma uygulamalarının kullanımı yaygındır; birçok birey düzenli olarak Perplexity, ChatGPT veya Gemini gibi araçları kullanmaktadır. Ancak, birçok kuruluş gibi, NVIDIA’nın gizli bilgileri ile bu derin araştırma araçlarını kullanmak zorlayıcı olabilir. Bu nedenle, NVIDIA bu yılın başında bir derin araştırma uygulamasını yerinde dağıtmak için açık kaynak bir blueprint yayınladı. Bu blueprint, içsel dağıtım sürecimizin başlangıç noktasıydı.
Mimari
AI-Q araştırma ajanı, kullanıcıların belgelerini yüklemesine, iç veri kaynaklarına erişmesine ve araştırma raporları oluşturmak için webde arama yapmasına olanak tanır. Blueprint, NeMo Ajan Araç Seti kullanılarak uygulanmış ve belge alma, retrieval ve büyük dil modeli (LLM) çağrıları için çeşitli NVIDIA NeMo Retriever modelleri kullanılmıştır.
Üretim dağıtımımız, AI fabrikası referans mimarisi doğrultusunda yerel olarak dağıtılmış NVIDIA NIM mikro hizmetleri ve üçüncü parti gözlemleme araçlarına erişim sağlayan iç bir OpenShift kümesi kullanılmaktadır. Karşılaştığımız zorluk, sistemin hangi kısımlarının, farklı NVIDIA ekipleri arasında yüzlerce kullanıcıya yayılmayı desteklemesi gerektiğini belirlemekti.

Bu zorluktan kurtulmak için üç aşamalı bir süreç izledik ve her aşamada NeMo Ajan Araç Seti’nden yararlandık:
- Tek kullanıcı olarak uygulamayı profil çıkarmak ve darboğazları belirlemek.
- Yük testleri yaparak veri toplamak ve yüzlerce kullanıcı için gereken mimariyi tahmin etmek.
- Aşamalı dağıtım sırasında uygulamayı izlemek.
Adım 1: Tek Bir Agentik Uygulamayı Nasıl Profil Çıkartır ve Optimize Edersiniz?
Bir agentik uygulamayı üretime almakta karşılaşılan bir zorluk, her agentik uygulamanın farklı olmasıdır. “Bir AI uygulaması, 100 kullanıcı başına bir GPUya ihtiyacı vardır.” gibi genel kılavuzlar oluşturmak zordur. Bu nedenle, bir uygulamayı ölçeklendirmek için ilk adım, bir kullanıcı için uygulamanın nasıl çalıştığını derinlemesine anlamaktır. NeMo Ajan Araç Seti değerlendirme ve profil çıkarma sistemi, veri toplamayı ve uygulamanın davranabileceği hakkında nicel bir anlayış elde etmeyi kolaylaştırır.
NeMo Ajan Araç Seti Profiler’ını Kullanma
Değerlendirme ve profil çıkarma aracını kullanmak için, uygulamanızın yapılandırma dosyasına bir değerlendirme bölümü eklemeniz yeterlidir. Değerlendirme yapılandırması, uygulama için örnek kullanıcı girdilerini içeren bir veri kümesi içerir. Agentik uygulamalar deterministik değil, bu nedenle bir kullanıcının sağlayabileceği çeşitli girdiler için uygulamanın performansını anlamak kıymetlidir.
eval:
genel:
output_dir: tek_kullanici_sonuclari
dataset:
_type: json
file_path: ornek_girdiler.json
profiler:
token_uniqueness_forecast: true
workflow_runtime_forecast: true
compute_llm_metrics: true
bottleneck_analysis:
enable_nested_stack: true
concurrency_spike_analysis:
enable: true
spike_threshold: 7
AI-Q araştırma ajanı, NeMo Ajan Araç Seti işlev kaplamaları kullanarak geliştirilmiş bir LangGraph uygulamasıdır. Bu kaplamalar, profiler’ın uygulamanın farklı bölümleri için zamanlama ve token kullanımını otomatik olarak kaydetmesine olanak tanır. Uygulamada takip etmek istediğimiz alt adımlar için basit dekoratörler ekleyerek kaydetme işlemini özelleştirebiliriz.
from aiq.profiler.decorators.function_tracking import track_function
@track_function(metadata={"source": "custom_function"})
def my_custom_function(a, b):
return a + b
Değerlendirme komutu, girdiler kümesi üzerinden iş akışını çalıştırır ve çeşitli yararlı metrikler toplar/hesaplar.
aiq eval --config_file configs/eval_config.yml
Mevcut olan çıktıların bir örneği, bir Gantt (veya Su Dalgası) grafiğidir. Bu grafik, bir kullanıcı oturumu sırasında hangi işlevlerin çalıştığını gösterir. Bu bilgi, uygulamamızın hangi kısımlarının darboğaz oluşturabileceğini belirlememize yardımcı oldu. AI-Q araştırma ajanın ana darboğazı, NVIDIA Llama Nemotron Super 49B akıl yürütme LLM çağrılarıydı. Darboğazı bilmek, o LLM için NVIDIA NIM’in dağıtımını çoğaltmaya ve ölçeklendirmeye odaklanmamıza olanak tanıdı.

Doğruluğu Değerlendirme
Zamanlama ve token kullanımı yanı sıra, değerlendirme ve profil çıkarma aracı, değerlendirme metriklerini de hesaplayabilir. Bizim durumumuzda, uygulamanın hızlı ve birçok kullanıcı için yanıt verebilir olması yeterli değil, aynı zamanda faydalı raporlar da üretmesi gerekiyordu. Derin araştırma kullanım durumumuza özgü metrikler oluşturarak, bu profiling ve değerlendirme aracını uygulama kodunun farklı sürümlerini karşılaştırmak için kullandık. Bu karşılaştırma, yaptığımız optimizasyonların rapor kalitesini azaltmadığından emin olmak için yararlı oldu. Araç, çeşitli formatlarda metrikleri raporlar; özellikle kullanışlı bir seçenek de bu metriklerin Weights and Biases gibi bir platforma aktarılması ve zaman içinde deneyimlerin görselleştirilmesidir.

Adım 2: Mimarin 200 Kullanıcıyı Kaldırabilir Mi? İhtiyaçlarınızı Tahmin Etme
Uygulamanın bir kullanıcı için performansını anladıktan ve optimize ettikten sonra, bir sonraki adıma geçmeye hazırdık: birden fazla kullanıcıyla yük testi yapmak. Yük testinin amacı (a) uygulamayı daha yüksek bir yoğunlukta çalıştırmak, (b) kırılan her şeyi düzeltmek ve (c) nihai dağıtım için gereksinimleri bilgilendirecek veri toplamaktı.
200 eşzamanlı kullanıcıyı destekleyecek mimarinin ne olacağını anlamak için, mevcut donanımımızla 10, 20, 30, 40 ve 50 eşzamanlı kullanıcıyla bir yük testi gerçekleştirdik. Yük testi sırasında toplanan veriler, tam dağıtım için gerekli donanım ihtiyaçlarının tahmin edilmesinde kullanıldı.
Yük testini gerçekleştirmek için NeMo Ajan Araç Seti boyutlandırma hesaplayıcısını kullandık.
Eşzamanlılık Verilerini Yakalama
Toolkit boyutlandırma hesaplayıcısı, aynı profil çıkarma ve değerlendirme aracını kullanarak simüle edilmiş iş akışlarını, farklı eşzamanlılık seviyelerinde paralel olarak çalıştırır.
aiq sizing calc
--calc_output_dir $CALC_OUTPUT_DIR
--concurrencies 1,2,4,8,16,32
--num_passes 2
Hesaplayıcı, yük testi sırasında her LLM çağrısı için p95 zamanlaması ve genel iş akışı için p95 zamanlaması da dahil olmak üzere çeşitli metrikleri toplar. *Not: aşağıdaki çıktı, bir aracın örneği içindir, içsel derin araştırma ajanı yük testinin gerçek verisi değildir.

Ölçeklendirme İçin Tahmin
Farklı eşzamanlılıklarda veri topladıktan sonra, mevcut mimari ve donanımımızın kaç kullanıcıyı destekleyebileceğini anlayabiliriz. Örneğin, aşağıda belirtilen çıktıda yük testini bir GPU’da çalıştırırsak, sonuçlar bize bir GPU’nun 10 eşzamanlı kullanıcıyı gecikme eşiğimiz içinde destekleyebileceğini söyler. Bu bilgilerle, 100 eşzamanlı kullanıcı için 10 GPU’ya ihtiyaç duyulduğunu tahmin edebiliriz.

Diğer Öğrenimler
Yük testi yapmanın diğer bir faydası, birden fazla kullanıcı çalıştırma sonucunda ortaya çıkabilecek darboğazları veya hataları keşfetmektir. AI-Q araştırma ajanının ilk yük testinde, iki hatayı saptayarak düzelttik:
1. Yük testi sırasında donanım metriklerini izlerken, bir NVIDIA NIM mikroservisinin ayrılan CPU’nun %100’ünü kullandığını bulduk. Bu bulgu, NIM’in daha az CPU ile yerleştirilmesine neden olan helm şemasında bir yapılandırma hatasını düzeltmemize yardımcı oldu.

2. Uygulamanın LLM çağrısı zaman aşımına uğradığında başarısız olacağı birkaç yer tespit ettik. Ara vermelerin ve daha iyi hata yönetimini ekleyerek, geçici hataların kullanıcı deneyimini tamamen bozmasına engel olduk.
try:
async with asyncio.timeout(ASYNC_TIMEOUT):
async for chunk in chain.astream(input, stream_usage=True):
answer_agg += chunk.content
if "</think>" in chunk.content:
stop = True
if not stop:
writer({"generating_questions": chunk.content})
except asyncio.TimeoutError as e:
writer({"generating_questions": "Akıl yürütme LLM'den zaman aşımı hatası, lütfen tekrar deneyin"})
return {"queries": []}
Adım 3: Araştırma Ajanınızın Performansını Ölçmek, İzlemek ve Optimize Etmek
Tüm bu bilgilerle, AI-Q araştırma ajanını uygun sayıda yedekle birlikte çeşitli sistem bileşenlerinde dağıtabildik. Son adım olarak, küçük ekiplerle başlayarak aşamalı bir yaklaşım kullanarak ölçeklendirme yaptık ve ek kullanıcılar ekleyerek devam ettik. Dağıtım sırasında uygulama performansını gözlemlemek kritik öneme sahipti. NeMo Ajan Araç Seti OpenTelemetry (OTEL) toplayıcısı ve Datadog’u kullanarak logları, performans verilerini ve LLM izleme bilgilerini topladık.
genel:
telemetry:
tracing:
otelcollector:
_type: otelcollector
# OTEL toplayıcınızın uç noktası
endpoint: http://0.0.0.0:4318/v1/traces
proje: sizin_projeniz
OTEL toplayıcı entegrasyonu, bireysel kullanıcı oturumları için özel izleri görüntülememizi sağladı ve uygulama performansı ile LLM davranışını anlamamıza yardımcı oldu.

Ayrıca, izlerimiz üzerinden performans verilerini toplamak, uygulamanın performansını anlama konusunda bize yardımcı oldu. Aşağıdaki grafik, ortalama gecikme sürelerini ve aşırıperformans gösteren kullanıcı oturumlarını göstermektedir.

Sonuç
NeMo Ajan Araç Seti’ni bir dizi AI fabrikası referans ortağı ile bir araya getirerek, AI-Q NVIDIA Blueprint’in içsel bir versiyonunu başarıyla dağıtma şansı bulduk. NeMo Ajan Araç Seti ile yapmayı öğrenin veya AI-Q NVIDIA araştırma ajanı blueprints‘i kendiniz deneyin.