أساسيات تصميم أنظمة الذكاء الاصطناعي
مفاهيم قابلية التوسع
4 دقيقة للقراءة
تواجه أنظمة الذكاء الاصطناعي تحديات توسع فريدة. استدعاءات LLM بطيئة ومكلفة ومحدودة المعدل. فهم كيفية التوسع بفعالية أمر حاسم لمقابلات تصميم الأنظمة.
التوسع الأفقي مقابل الرأسي
| نوع التوسع | كيف يعمل | مثال نظام ذكاء اصطناعي |
|---|---|---|
| رأسي | آلات أكبر | GPU أكبر لاستدلال أسرع |
| أفقي | آلات أكثر | عدة نسخ API خلف موازن الحمل |
لأنظمة الذكاء الاصطناعي، التوسع الأفقي مفضل عادةً لأن:
- مزودي LLM لديهم حدود معدل لكل مفتاح API
- يمكنك استخدام مزودين متعددين في وقت واحد
- الأعطال معزولة في نسخ فردية
المقاييس الرئيسية
زمن الاستجابة
الوقت من الطلب إلى الاستجابة.
طلب المستخدم → بوابة API → استدعاء LLM → المعالجة اللاحقة → الاستجابة
│ │ │ │ │
└──────────────┴────────────┴──────────────┴────────────┘
إجمالي زمن الاستجابة
تفصيل زمن استجابة AI النموذجي:
- عبء API: 10-50 مللي ثانية
- استدلال LLM: 500 مللي ثانية - 5 ثوانٍ (يعتمد على النموذج والرموز)
- المعالجة اللاحقة: 10-100 مللي ثانية
الإنتاجية
الطلبات المُعالجة في الثانية.
# حساب حدود الإنتاجية
llm_latency_seconds = 2 # متوسط وقت استجابة LLM
concurrent_requests = 10 # الطلبات المتوازية المسموحة
max_throughput = concurrent_requests / llm_latency_seconds
# = 5 طلبات في الثانية لكل نسخة
التكلفة لكل استعلام
غالباً المقياس الأهم لأنظمة الذكاء الاصطناعي.
| المكون | عامل التكلفة |
|---|---|
| رموز الإدخال | $0.01-0.03 لكل 1000 رمز (GPT-4) |
| رموز الإخراج | $0.03-0.06 لكل 1000 رمز (GPT-4) |
| التضمين | $0.0001 لكل 1000 رمز |
| قاعدة البيانات المتجهة | $0.05-0.20 لكل مليون متجه/شهر |
استراتيجيات التوسع
1. تجميع الطلبات
جمع طلبات متعددة في استدعاء LLM واحد.
# بدلاً من 10 استدعاءات منفصلة
for query in queries:
response = llm.complete(query)
# تجميعها في استدعاء واحد
combined_prompt = "\n---\n".join([
f"الاستعلام {i}: {q}" for i, q in enumerate(queries)
])
batch_response = llm.complete(combined_prompt)
2. توجيه النموذج
استخدم نماذج أرخص للمهام البسيطة.
def route_to_model(query: str) -> str:
complexity = estimate_complexity(query)
if complexity == "simple":
return "gpt-3.5-turbo" # سريع، رخيص
elif complexity == "medium":
return "gpt-4-turbo" # متوازن
else:
return "gpt-4" # أفضل جودة
3. التخزين المؤقت
تخزين الاستعلامات المتطابقة أو المتشابهة.
معدلات إصابة التخزين المؤقت في الإنتاج:
- المطابقة التامة: 20-40% معدل إصابة
- التخزين المؤقت الدلالي: 40-60% معدل إصابة
4. المعالجة غير المتزامنة
لا تحجب على العمليات البطيئة.
# متزامن (يحجب)
result = await llm.complete(prompt) # انتظر ثانيتين
# غير متزامن مع طابور
job_id = queue.enqueue(llm.complete, prompt)
return {"status": "processing", "job_id": job_id}
# العميل يستعلم عن النتيجة
تحديد الاختناقات
في المقابلات، حدد الاختناق دائماً:
| الاختناق | العَرَض | الحل |
|---|---|---|
| حدود معدل LLM | أخطاء 429 | مفاتيح API متعددة، احتياطي مزود |
| زمن استجابة LLM | استجابات بطيئة | البث، التخزين المؤقت، نماذج أصغر |
| قاعدة البيانات المتجهة | استرجاع بطيء | تحسين الفهرس، التجزئة |
| الذاكرة | أخطاء OOM | البث، التصفح |
بعد ذلك، سنتعلم إطاراً منظماً للتعامل مع أي مشكلة تصميم. :::