TL;DR (خلاصة سريعة)
nanochat هو إطار عمل مفتوح المصدر لتدريب نماذج لغوية كبيرة (LLM) من أندريه كارباثي. يمكنك تدريب روبوت محادثة بمستوى GPT-2 بأقل من 50 دولارًا وفي أقل من ساعتين باستخدام عقدة واحدة من 8xH100 GPU. الكود الأساسي بسيط (حوالي 500 سطر)، والتحكم في جميع المعلمات الفائقة يتم بمؤشر واحد فقط (--depth). السجلات الحالية تظهر اكتمال التدريب في 1.65 ساعة بنتيجة CORE = 0.2626، متجاوزًا GPT-2 من OpenAI لعام 2019 والذي كلف 43,000 دولار واستغرق 168 ساعة.
مقدمة
كان تدريب نموذج لغوي كبير يتطلب ملايين الدولارات وفريقًا من باحثي الدكتوراه. لم يعد هذا هو الحال الآن.
أصدر أندريه كارباثي مشروع 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
بمجرد تعيين العمق، يحسب 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
خدع الكفاءة:
# 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
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
تطبيع 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)
التدريب الموزع (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))
تتوفر 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
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)
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
الخطوة 2: تنزيل بيانات التدريب
# تنزيل حوالي 2 مليار حرف من مجموعة بيانات ClimbMix
python -m nanochat.dataset -n 170
# يقسم إلى 170 جزء ~100MB (إجمالي ~17GB مضغوط)
الخطوة 3: تدريب المرقّم
python -m scripts.tok_train
python -m scripts.tok_eval
الخطوة 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
-
--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
الخطوة 6: الدردشة مع نموذجك
# CLI
python -m scripts.chat_cli -p "لماذا السماء زرقاء؟"
# أو واجهة الويب
python -m scripts.chat_web
واجهة الويب على المنفذ 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
تتبع المقاييس
- 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)