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

Ashley Innocent

Ashley Innocent

19 مارس 2026

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

enterprise.banner.title

enterprise.banner.feature1

enterprise.banner.feature2

enterprise.banner.feature3

enterprise.banner.ctaB

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

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

مقدمة

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

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

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

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

بالنسبة لمطوري واجهات برمجة التطبيقات (API) والفرق التي تبني تطبيقات مدعومة بالذكاء الاصطناعي، يغير هذا كل شيء. يمكنك الآن تجربة تدريب النماذج المخصصة، واختبار التغييرات المعمارية، وفهم آليات النماذج اللغوية الكبيرة (LLM) الداخلية دون الحاجة إلى ميزانيات ضخمة للبنية التحتية.

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

ماذا ستتعلم

بحلول نهاية هذه المقالة، ستفهم:

ما هو nanochat؟

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

صورة توضيحية

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

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

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

للمقارنة، كلف تدريب GPT-2 الأصلي من OpenAI في عام 2019 حوالي 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 المصغرة**: مجموعة من النماذج المثلى من حيث الحساب بأحجام مختلفة، وكلها مدربة بنفس النهج المبدئي.

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

قام الفريق بقياس قوانين التوسع عبر عشرات من عمليات التدريب. ووجدوا علاقات يمكن التنبؤ بها بين العمق والعرض وحجم الدفعة ومدة التدريب. وبدلاً من عرض كل هذه الإعدادات، يقوم nanochat بترميز هذه العلاقات مباشرة في سكربت التدريب.

صورة توضيحية

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

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

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

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

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

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

تضمنت التشغيلات 5 و 6 تغييرات من نظام "البحث الآلي" الخاص بكارباثي. استكشف وكيل ذكاء اصطناعي تعديلات معمارية على نماذج d12 الصغيرة (تشغيلات تدريب مدتها 5 دقائق)، ثم طبق التغييرات الفائزة على إعداد d24 الكامل.

وجد النظام تحسينات على:

قللت هذه التغييرات وقت التدريب من 2.02 ساعة إلى 1.65 ساعة، وهو تحسن بنسبة 19% تم اكتشافه من خلال التجريب المستقل.

كيف يعمل nanochat

يحتوي الكود البرمجي على ما يقرب من 3,000 سطر عبر الوحدات الأساسية. دعونا نفحص كل مكون.

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

يتبع المحول أفضل الممارسات الحديثة مع العديد من التحسينات:

ميزات الهندسة المعمارية:

تضمينات القيم (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)

يستخدم nanochat استراتيجية مُحسن مختلطة:

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

Muon (عزم متعامد بواسطة نيوتن-شولتز):

يقوم مُحسن Muon بتعميد تحديثات الأوزان باستخدام تكرار نيوتن-شولتز الخماسي المسمى "Polar Express":

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

# Orthogonalization loop
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 مع اتصال غير متزامن ثلاثي المراحل:

المرحلة 1: إطلاق جميع عمليات reduce_scatter غير المتزامنة
المرحلة 2: الانتظار لعمليات التخفيض، حساب التحديثات، إطلاق عمليات all_gathers
المرحلة 3: الانتظار لعمليات الجمع، نسخ المعلمات المحدثة

يتداخل هذا مع الاتصال بالحساب، مما يزيد من استخدام وحدة معالجة الرسوميات.

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

يدير nanochat الدقة بشكل صريح بدلاً من استخدام torch.amp.autocast:

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

تقوم طبقة Linear المخصصة بتحويل الأوزان لتتناسب مع نوع البيانات الحسابي أثناء التمرير الأمامي:

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

تبقى الأوزان الرئيسية في FP32 لدقة المُحسن. بالنسبة لوحدات معالجة الرسوميات H100 و Blackwell، يتوفر تدريب FP8 عبر --fp8، مما يحول معظم الطبقات إلى Float8Linear مع قياس موجه.

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

يستخدم محمل البيانات **التعبئة الأفضل للملاءمة والمحاذاة مع BOS**:

يضمن هذا أن كل رمز يمكنه الانتباه مرة أخرى إلى BOS ورؤية سياق المستند بالكامل.

# 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

# Works on any hardware - auto-selects best backend
y = flash_attn.flash_attn_func(q, k, v, causal=True, window_size=window_size)

على وحدات معالجة الرسوميات Hopper مع bfloat16، يستخدم Flash Attention 3. وفي جميع الأماكن الأخرى، يعود إلى انتباه المنتج النقطي المتدرج من PyTorch.

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

تتعامل فئة Engine مع التوليد الفعال باستخدام:

ينسق المحرك تدفق المحادثة، بما في ذلك فرض رموز إخراج الأداة عندما يستدعي النموذج الآلة الحاسبة.

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

توجد عملية التدريب بأكملها في runs/speedrun.sh. إليك كيفية تشغيلها.

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

الخطوة 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 جزءًا بحجم حوالي 100 ميجابايت لكل منها
# الإجمالي: حوالي 17 جيجابايت مضغوطة

يقوم السكربت بتنزيل أجزاء بيانات التدريب المسبق مع قفل الملفات للتعامل مع التنسيق متعدد الرتب.

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

# تدريب مُرقّم BPE بمفردات 32,768
python -m scripts.tok_train

# تقييم نسبة الضغط
python -m scripts.tok_eval

يستخدم المرقّم نمط تقسيم على غرار GPT-4 مع BPE احتياطي للبايت. يكتمل التدريب في حوالي 10 دقائق على 2 مليار حرف.

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

# تدريب نموذج d24 (بقدرة GPT-2)
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

المعلمات الرئيسية:

وقت التشغيل المتوقع: حوالي ساعتين.

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

# تنزيل محادثات الهوية
curl -L -o ~/.cache/nanochat/identity_conversations.jsonl \
    https://karpathy-public.s3.us-west-2.amazonaws.com/identity_conversations.jsonl

# تشغيل SFT لقدرة الدردشة
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 وتوفر واجهة تشبه ChatGPT.

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

لاختبار الأفكار الجديدة، استخدم نماذج أصغر لتكرار أسرع.

تجارب سريعة (حوالي 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

يقوم هذا بتدريب نموذج d12 (بحجم GPT-1) مع الحد الأدنى من التسجيل. مثالي لاختبار التغييرات المعمارية.

مقاييس للمراقبة

تتبع هذه في Weights & Biases:

  1. val_bpb: بتات التحقق لكل بايت (خسارة مستقلة عن حجم المفردات)
  2. core_metric: نتيجة تقييم DCLM CORE
  3. train/mfu: استخدام FLOPS للنموذج (كفاءة الأجهزة)
  4. train/tok_per_sec: إنتاجية التدريب

متطلبات الاختبار

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

لماذا nanochat مهم

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

النهج التكلفة الوقت الجهاز
GPT-2 من OpenAI (2019) 43,000 دولار 168 ساعة 32 TPU v3
nanochat (2026) 48 دولارًا ساعتان 8xH100
nanochat الفوري (Spot) حوالي 15 دولارًا ساعتان 8xH100 الفوري (Spot)

هذا يجعل تدريب LLM في متناول:

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

يعمل الكود البرمجي كمصدر تعليمي:

يمكن للطلاب قراءة وتعديل وتجربة عملية LLM كاملة.

سرعة البحث

يتيح تقليل وقت التدريب من أيام إلى ساعات:

الشفافية

كل خيار تصميم موثق:

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

nanochat مثير للإعجاب ولكنه يمتلك حدودًا واضحة.

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

يفترض رقم 48 دولارًا الوصول إلى عقدة 8xH100. تختلف تكاليف الإيجار السحابي:

ستحتاج إلى حوالي 50-100 دولار لتشغيل كامل حسب المزود.

سقف القدرة

يحقق nanochat أداءً بمستوى GPT-2 (تقنية 2019). هذا يعني:

ما يمكنه فعله:

ما لا يمكنه فعله:

فكر في الأمر كطفل في الروضة: قادر على المحادثة الأساسية ولكن ليس على العمل بمستوى الخبراء.

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

يقوم التشغيل السريع الكامل بتنزيل:

ستحتاج إلى مساحة تخزين ونطاق ترددي كافيين.

قيود المقياس

يقيس مقياس CORE 22 مهمة ولكنه لا يلتقط:

تنتج البذور العشوائية المختلفة تباينًا في CORE يبلغ حوالي 0.016. قد تختلف نتائجك.

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

كم يكلف تدريب نموذج باستخدام nanochat؟

حوالي 48 دولارًا حسب الطلب (24 دولارًا/ساعة × ساعتين) أو حوالي 15 دولارًا على مثيلات Spot. يغطي هذا التدريب المسبق فقط. أضف حوالي 30 دقيقة لـ SFT.

ما هي وحدة معالجة الرسوميات (GPU) التي أحتاجها؟

الحد الأدنى: وحدة معالجة رسوميات واحدة (أي وحدة معالجة رسوميات حديثة لمراكز البيانات). الأمثل: 8xH100 أو 8xA100 للتدريب الأسرع. يتوسع الكود من وحدة معالجة رسوميات واحدة إلى 8 وحدات مع تراكم التدرجات التلقائي.

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

من 1.65 إلى 3 ساعات حسب التكوين والجهاز. الرقم القياسي الحالي في لوحة المتصدرين هو 1.65 ساعة لنموذج d24.

ما هو مقياس CORE؟

يقيم مقياس DCLM CORE النماذج على 22 مهمة بما في ذلك ARC (أسئلة علمية)، MMLU (فهم اللغة متعدد المهام)، ومعايير أخرى. سجل GPT-2 0.256525. يتجاوز nanochat بانتظام 0.26.

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

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

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

يستخدم الأفضل حاليًا ClimbMix (مجموعة بيانات الويب المنسقة من NVIDIA). استخدمت الإصدارات السابقة FineWeb-EDU. يتم تدريب المرقّم على حوالي 2 مليار حرف من أول 8 أجزاء.

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

نعم. يعمل الكود على MPS (Metal Performance Shaders) بدقة float32. التدريب أبطأ من CUDA ولكنه وظيفي للتجريب.

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

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

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

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

الخلاصة

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

يمتد تأثير المشروع إلى ما هو أبعد من مجرد تخفيض التكلفة الخام. من خلال توفير قاعدة كود بسيطة وقابلة للقراءة مع واجهة "مؤشر واحد"، أنشأ كارباثي أداة بحث وموردًا تعليميًا.

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

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

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

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

button

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات