DEV Community

Cover image for كيفية تدريب ChatGPT الخاص بك بميزانية 50 دولار؟
Yusuf Khalidd
Yusuf Khalidd

Posted on • Originally published at apidog.com

كيفية تدريب ChatGPT الخاص بك بميزانية 50 دولار؟

TL;DR (خلاصة سريعة)

nanochat هو إطار عمل مفتوح المصدر لتدريب نماذج لغوية كبيرة (LLM) من أندريه كارباثي. يمكنك تدريب روبوت محادثة بمستوى GPT-2 بأقل من 50 دولارًا وفي أقل من ساعتين باستخدام عقدة واحدة من 8xH100 GPU. الكود الأساسي بسيط (حوالي 500 سطر)، والتحكم في جميع المعلمات الفائقة يتم بمؤشر واحد فقط (--depth). السجلات الحالية تظهر اكتمال التدريب في 1.65 ساعة بنتيجة CORE = 0.2626، متجاوزًا GPT-2 من OpenAI لعام 2019 والذي كلف 43,000 دولار واستغرق 168 ساعة.

جرّب Apidog اليوم

مقدمة

كان تدريب نموذج لغوي كبير يتطلب ملايين الدولارات وفريقًا من باحثي الدكتوراه. لم يعد هذا هو الحال الآن.

أصدر أندريه كارباثي مشروع nanochat: مشروع مفتوح المصدر لتدريب ذكاء اصطناعي محادثة بكلفة أقل من كلفة عشاء فاخر. يتم كل التدريب على عقدة واحدة 8xH100 GPU ويكتمل خلال أقل من ساعتين.

لماذا هذا مهم الآن

شهد الذكاء الاصطناعي تطورات ضخمة في 2026. ما كان يتطلب 168 ساعة و43,000 دولار من OpenAI في 2019، يتم إنجازه الآن في 1.65 ساعة و48 دولارًا فقط بفضل تحسينات الخوارزميات والأجهزة والمجتمع.

لمطوري الـ API والفرق التي تبني تطبيقات مدعومة بالذكاء الاصطناعي، أصبح بإمكانك الآن تدريب نماذجك المخصصة واختبار التغييرات المعمارية وفهم آليات LLM الداخلية دون البنية التحتية الضخمة.

💡 ادمِج هذا مع منصات تطوير واجهات برمجة التطبيقات مثل Apidog لاختبار وتوثيق خدمات الذكاء الاصطناعي الخاصة بك، وستحصل على حزمة متكاملة لبناء تطبيقات ذكاء اصطناعي جاهزة للإنتاج.

ماذا ستتعلم

في هذا المقال ستتعلم بشكل عملي:

  • كيف أن nanochat يقلل تكلفة تدريب LLM بمقدار 100 ضعف.
  • الهندسة المعمارية الكاملة (نموذج GPT، مُحسن Muon، تحميل البيانات).
  • خطوات عملية لتدريب نموذج خاص بك.
  • استخدام nanochat للبحث والتجريب السريع في LLM.
  • القيود الفعلية وقدرات GPT-2 العملية.

ما هو nanochat؟

nanochat أداة تدريب LLM مبسطة تغطي كل مراحل التطوير: الترقيم، التدريب المسبق، الضبط الدقيق، التقييم، الاستدلال، وواجهة ويب تشبه ChatGPT.

صورة توضيحية

الكود في مستودع واحد، بدون تعقيد إعدادات أو أطر عمل. صُمم ليكون "أساس قوي" قابل للقراءة والتعديل والتشعيب.

الادعاء الأساسي

تدريب نموذج بقدرة GPT-2 (1.6 مليار معلمة) مقابل:

  • 48 دولارًا عند الطلب (ساعتان × 24 دولار/ساعة لـ 8xH100)
  • حوالي 15 دولارًا باستخدام Spot Instances

للمقارنة: تدريب GPT-2 الأصلي من OpenAI كلف 43,000 دولار واستغرق 7 أيام على 32 TPU v3.

ما يغطيه nanochat

المرحلة السكربت الوصف
الترقيم scripts.tok_train تدريب مُرقّم BPE (مفردات 32,768)
التدريب المسبق scripts.base_train تدريب نموذج GPT الأساسي
الضبط الدقيق scripts.chat_sft الضبط الدقيق للمحادثة
التقييم scripts.base_eval مقياس CORE، بتات لكل بايت
الاستدلال scripts.chat_cli واجهة محادثة CLI
واجهة الويب scripts.chat_web واجهة ويب تشبه ChatGPT

الفلسفة: مؤشر واحد يتحكم بكل شيء

معظم أطر عمل LLM تغرقك بإعدادات. nanochat يعتمد على معلمة وحيدة: --depth (عدد طبقات المحول).

# نموذج بحجم GPT-1
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=12

# نموذج بقدرة GPT-2
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=24

# تجاوز الحدود
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=26
Enter fullscreen mode Exit fullscreen mode

بمجرد تعيين العمق، يحسب nanochat كل شيء آخر تلقائيًا:

  • عرض المحول
  • عدد رؤوس الانتباه
  • معدلات التعلم
  • أفق التدريب (الخطوات الإجمالية)
  • جداول اضمحلال الأوزان
  • أحجام الدفعات

هذه الفلسفة تنتج ما يسميه كارباثي سلسلة nanochat المصغرة: مجموعة من النماذج المثلى حسابيًا بأحجام مختلفة، كلها مدربة بنهج موحد.

لماذا ينجح هذا؟

تم قياس قوانين التوسع بدقة عبر عشرات عمليات التدريب. تم ترميز العلاقات بين العمق والعرض وحجم الدفعة ومدة التدريب مباشرة في سكربت التدريب.

صورة توضيحية

تحصل على تدريب أمثل دون الحاجة إلى درجة دكتوراه في التعلم العميق.

لوحة المتصدرين: سباق لتجاوز GPT-2

nanochat يحتفظ بلوحة متصدرين عامة لتتبع قدرة "الوصول إلى GPT-2". الهدف: تجاوز نتيجة CORE الأصلية من OpenAI (0.2565) في 22 مهمة DCLM.

السجلات الحالية

التشغيل النموذج الوقت نتيجة CORE الابتكار الرئيسي
GPT-2 الأصلي 1.6B 168h 0.2565 خط أساس OpenAI 2019
التشغيل 1 d24 3.04h 0.2585 خط أساس مبدئي
التشغيل 2 d26 2.91h 0.2578 تدريب FP8
التشغيل 3 d26 2.76h 0.2602 حجم دفعة 1 مليون رمز
التشغيل 4 d24 2.02h 0.2571 مجموعة بيانات ClimbMix
التشغيل 5 d24 1.80h 0.2690 تحسينات مكتشفة بالذكاء الاصطناعي
التشغيل 6 d24 1.65h 0.2626 تحسين Smear/Backout

كيف اكتشف الذكاء الاصطناعي التحسينات

  • نظام "بحث آلي" استكشف تعديلات معمارية على نماذج d12 (تشغيلات قصيرة)، ثم نقل التغييرات الفائزة إلى d24.
  • أمثلة التحسينات:
    • Backout: طرح متبقيات الطبقات الوسطى
    • Smear: مزج بيجرامات الرموز السابقة بكفاءة

هذه التحسينات قللت وقت التدريب من 2.02 ساعة إلى 1.65 ساعة (تحسن 19%).

كيف يعمل nanochat — تفصيل عملي

الكود حوالي 3,000 سطر عبر وحدات أساسية. لنستعرض المكونات الرئيسية:

1. نموذج GPT (nanochat/gpt.py)

  • تضمينات دوارة (RoPE): ترميز موضعي نسبي.
  • تسوية QK: استقرار التدريب.
  • أوزان غير مرتبطة: فصل تضمين الرمز وإسقاط الإخراج.
  • تنشيط ReLU²: تفعيل MLP أسرع من GeLU.
  • انتباه GQA: رؤوس KV أقل لاستدلال أسرع.
  • انتباه نافذة منزلقة: تبادل السياق القصير/الطويل.
  • Flash Attention 3: كفاءة عالية على Hopper GPUs.

تضمينات القيم (ResFormer):

# Value residual: mix in value embedding with per-head gate
if ve is not None:
    ve = ve.view(B, T, self.n_kv_head, self.head_dim)
    gate = 3 * torch.sigmoid(self.ve_gate(x[..., :self.ve_gate_channels]))
    v = v + gate.unsqueeze(-1) * ve
Enter fullscreen mode Exit fullscreen mode

خدع الكفاءة:

# 1. Per-layer residual scaling
x = self.resid_lambdas[i] * x + self.x0_lambdas[i] * x0

# 2. Smear: mix previous token embedding for bigram info
gate = self.smear_lambda * torch.sigmoid(self.smear_gate(x[:, :, :24]))
x = x + gate * x_pre_smear

# 3. Backout: subtract mid-layer residual
x = x - self.backout_lambda * x_backout
Enter fullscreen mode Exit fullscreen mode

2. مُحسن Muon (nanochat/optim.py)

نوع المعلمة المُحسن الغرض
التضمينات، lm_head AdamW تحسين تكيفي
المعلمات القياسية AdamW عوامل قياس متعلمة
المصفوفات 2D Muon تحديثات متعامدة

مثال تعامد Polar Express:

# Polar Express coefficients (5 iterations)
polar_express_coeffs = [
    (8.156, -22.483, 15.879),
    (4.043, -2.809, 0.500),
    # ...
]

for a, b, c in polar_express_coeffs[:ns_steps]:
    A = X.mT @ X
    B = b * A + c * (A @ A)
    X = a * X + X @ B
Enter fullscreen mode Exit fullscreen mode

تطبيع NorMuon:

v_mean = g.float().square().mean(dim=red_dim, keepdim=True)
v_norm = v_mean.sum(dim=(-2, -1), keepdim=True).sqrt()
final_scale = step_size * (v_norm / v_norm_new.clamp_min(1e-10))
g = g * final_scale.to(g.dtype)
Enter fullscreen mode Exit fullscreen mode

التدريب الموزع (ZeRO-2):

  • إطلاق عمليات reduce_scatter غير متزامنة.
  • الانتظار، حساب التحديثات، إطلاق all_gathers.
  • الانتظار للجمع، نسخ المعلمات المحدثة.

3. إدارة الدقة (nanochat/common.py)

الجهاز نوع البيانات الافتراضي السبب
CUDA SM 80+ (A100,H100) bfloat16 أنوية موتر BF16
CUDA SM < 80 float32 لا يوجد دعم BF16
CPU/MPS float32 لا توجد أنوية منخفضة

طبقة Linear مخصصة لضبط نوع البيانات:

class Linear(nn.Linear):
    def forward(self, x):
        return F.linear(x, self.weight.to(dtype=x.dtype))
Enter fullscreen mode Exit fullscreen mode

تتوفر FP8 عبر --fp8 على H100/Blackwell.

4. تحميل البيانات (nanochat/dataloader.py)

  • تعبئة أفضل للملاءمة مع BOS.
  • تقليل الهدر عبر خوارزمية Best Fit.
  • اقتصاص 35% من الرموز عند طول تسلسل 2048.
# Find largest document that fits entirely
best_idx = -1
best_len = 0
for i, doc in enumerate(doc_buffer):
    doc_len = len(doc)
    if doc_len <= remaining and doc_len > best_len:
        best_idx = i
        best_len = doc_len

if best_idx >= 0:
    doc = doc_buffer.pop(best_idx)
    # Add full document
else:
    # Crop shortest doc to fill remaining space
Enter fullscreen mode Exit fullscreen mode

5. توحيد Flash Attention (nanochat/flash_attention.py)

واجهة موحدة بين FA3 وPyTorch SDPA:

from nanochat.flash_attention import flash_attn
y = flash_attn.flash_attn_func(q, k, v, causal=True, window_size=window_size)
Enter fullscreen mode Exit fullscreen mode

6. محرك الاستدلال (nanochat/engine.py)

  • تخزين مؤقت KV للمطالبة.
  • دعم استخدام الأداة (حاسبة بايثون عبر eval()).
  • توليد دفعات باستنساخ ذاكرة التخزين المؤقت KV.

خطوة بخطوة: تدريب نموذجك الخاص

كل العملية في runs/speedrun.sh. إليك الخطوات العملية:

المتطلبات الأساسية

  • عقدة 8xH100 GPU (أو ما شابه)
  • 20 جيجابايت مساحة قرص لمجموعة البيانات
  • Python 3.10+
  • مدير الحزم uv

الخطوة 1: إعداد البيئة

# تثبيت uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# إنشاء وتفعيل بيئة افتراضية
uv venv
source .venv/bin/activate

# تثبيت التبعيات
uv sync --extra gpu
Enter fullscreen mode Exit fullscreen mode

الخطوة 2: تنزيل بيانات التدريب

# تنزيل حوالي 2 مليار حرف من مجموعة بيانات ClimbMix
python -m nanochat.dataset -n 170
# يقسم إلى 170 جزء ~100MB (إجمالي ~17GB مضغوط)
Enter fullscreen mode Exit fullscreen mode

الخطوة 3: تدريب المرقّم

python -m scripts.tok_train
python -m scripts.tok_eval
Enter fullscreen mode Exit fullscreen mode

الخطوة 4: التدريب المسبق للنموذج

torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- \
    --depth=24 \
    --target-param-data-ratio=8 \
    --device-batch-size=16 \
    --fp8 \
    --run=my-first-model
Enter fullscreen mode Exit fullscreen mode
  • --depth=24: نموذج بحجم GPT-2
  • --fp8: تدريب FP8 (H100+ فقط)
  • وقت التشغيل: ~ساعتين

الخطوة 5: الضبط الدقيق الخاضع للإشراف (SFT)

curl -L -o ~/.cache/nanochat/identity_conversations.jsonl \
    https://karpathy-public.s3.us-west-2.amazonaws.com/identity_conversations.jsonl

torchrun --standalone --nproc_per_node=8 -m scripts.chat_sft -- \
    --device-batch-size=16 \
    --run=my-sft
Enter fullscreen mode Exit fullscreen mode

الخطوة 6: الدردشة مع نموذجك

# CLI
python -m scripts.chat_cli -p "لماذا السماء زرقاء؟"

# أو واجهة الويب
python -m scripts.chat_web
Enter fullscreen mode Exit fullscreen mode

واجهة الويب على المنفذ 8000.

سير عمل البحث: التجريب السريع

لاختبار أفكار جديدة، استخدم أعماق أقل لتكرار أسرع:

تجارب سريعة (~5 دقائق)

OMP_NUM_THREADS=1 torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- \
    --depth=12 \
    --run="d12-test" \
    --core-metric-every=999999 \
    --sample-every=-1 \
    --save-every=-1
Enter fullscreen mode Exit fullscreen mode

تتبع المقاييس

  • val_bpb: خسارة التحقق لكل بايت
  • core_metric: نتيجة DCLM CORE
  • train/mfu: كفاءة الأجهزة
  • train/tok_per_sec: إنتاجية التدريب

متطلبات اختبار التحسينات

أي تحسين يجب أن يعمل عبر جميع الأعماق (d12 إلى d26) لضمان التقدم المبدئي وتجنب التجهيز الزائد.

لماذا nanochat مهم

إمكانية الوصول إلى التكلفة

النهج التكلفة الوقت الجهاز
GPT-2 OpenAI (2019) $43,000 168h 32 TPU v3
nanochat (2026) $48 2h 8xH100
nanochat Spot ~$15 2h 8xH100 Spot

مناسب للباحثين الأفراد، الشركات الناشئة، الجامعات، والهواة.

القيمة التعليمية

  • حوالي 500 سطر لنموذج GPT
  • 530 سطرًا للمُحسن
  • تعليقات واضحة، لا إعدادات مخفية
  • يمكن لأي مطور قراءة وتعديل وتجربة كل شيء

سرعة البحث

  • اختبر الفرضيات بسرعة
  • زِد عدد التجارب أسبوعيًا
  • تكلفة فشل منخفضة
  • تعاون المجتمع عبر لوحة المتصدرين

الشفافية

  • قوانين التوسع موثقة في dev/LOG.md
  • دراسات الحذف في مناقشات GitHub
  • تفاصيل الاستنساخ كاملة للمتصدرين
  • مساهمة الذكاء الاصطناعي موثقة بوضوح

القيود وفحص الواقع

متطلبات الأجهزة

  • سعر 48 دولارًا يفترض عقدة 8xH100
  • المختبرات: ~25 دولار/ساعة لـ 8xH100
  • RunPod: ~15 دولار/ساعة Spot
  • كامل التشغيل: 50-100 دولار حسب المزود

سقف القدرة

  • أداء بمستوى GPT-2 (2019)
  • يستطيع: محادثة أساسية، رياضيات بسيطة، استدعاء حقائق
  • لا يستطيع: استدلال معقد، توليد أكواد متقدمة، منافسة GPT-4/كلود/جيميني

متطلبات البيانات

  • ~170 جزء بيانات (~17GB مضغوط)
  • ~2 مليار حرف
  • يتطلب مساحة تخزين ونطاق ترددي كافيين

قيود المقياس

  • مقياس CORE يغطي 22 مهمة، لا يقيس جودة المحادثة الفعلية أو دقة التعليمات
  • تباين CORE بين البذور ~0.016

الأسئلة الشائعة

كم يكلف التدريب باستخدام nanochat؟

حوالي 48 دولارًا عند الطلب أو 15 دولارًا Spot. يشمل التدريب المسبق فقط، أضف 30 دقيقة للـ SFT.

ما نوع GPU المطلوب؟

  • الحد الأدنى: GPU واحد حديث
  • الأفضل: 8xH100 أو 8xA100
  • الكود يتوسع تلقائيًا من 1 إلى 8 GPU

كم يستغرق التدريب؟

من 1.65 إلى 3 ساعات حسب الإعداد. الرقم القياسي الحالي: 1.65 ساعة لنموذج d24.

ما هو مقياس CORE؟

مقياس DCLM CORE يقيم النموذج على 22 مهمة (ARC، MMLU، إلخ). سجل GPT-2 هو 0.2565، بينما nanochat يتجاوز عادة 0.26.

هل يمكنني التدريب على GPU واحدة؟

نعم. فقط احذف torchrun. سيستغرق التدريب وقتًا أطول لكنه يعطي نتائج مماثلة.

ما هي مجموعة البيانات المستخدمة؟

ClimbMix (مجموعة بيانات ويب من NVIDIA). المرقّم يُدرّب على أول 8 أجزاء (~2 مليار حرف).

هل يعمل nanochat على Apple Silicon؟

نعم عبر MPS بدقة float32. أبطأ من CUDA لكنه فعال للتجريب.

هل يمكنني استئناف التدريب من نقطة حفظ؟

نعم باستخدام --resume-from-step=<step>. يتم حفظ حالة محمل البيانات للاستئناف الدقيق.

ما الفرق بين nanochat وnanoGPT؟

nanoGPT يدعم فقط التدريب المسبق. nanochat يغطي العملية كاملة: الترقيم، التدريب المسبق، SFT، RLHF، التقييم، الاستدلال، وواجهة الويب.

الخلاصة

ثبت أن تدريب LLM لم يعد يتطلب ميزانيات ضخمة أو بنية تحتية متخصصة. ما كان يكلف 43,000 دولار في 2019 أصبح الآن أقل من 50 دولارًا.

الكود بسيط وقابل للتعديل. بواجهة "مؤشر واحد"، أصبح البحث والتعلم في LLM متاحًا لأي مطور.

النقاط الرئيسية

  • تخفيض التكلفة بمقدار 100 ضعف: من 43,000 دولار إلى 48 دولارًا
  • تسريع بمقدار 100 ضعف: من 168 ساعة إلى 1.65 ساعة
  • مؤشر ضبط واحد: --depth يتحكم بكل شيء
  • عملية تدريب كاملة: من الترقيم إلى واجهة الويب
  • تطوير مجتمعي مستمر: لوحة متصدرين عامة وتحسينات دائمة

الخطوات التالية

هل أنت مستعد لتدريب نموذجك الخاص؟ ابدأ من مستودع nanochat وملف runs/speedrun.sh.

لمطوري API الذين يبنون تطبيقات ذكاء اصطناعي: أصبح فهم آليات تدريب LLM الداخلية وإجراء التجارب متاحًا للجميع، من شركة ناشئة إلى مشروع شخصي في عطلة نهاية الأسبوع.

Top comments (0)