يحتوي هذا الريبو على نسخة من الصفر لـ nanoGPT. تم الاحتفاظ بالتزامات git على وجه التحديد خطوة بخطوة ونظيفة بحيث يمكن للمرء بسهولة الاطلاع على سجل التزامات git لرؤيتها مبنية ببطء. بالإضافة إلى ذلك، هناك محاضرة فيديو مصاحبة على موقع يوتيوب حيث يمكنك رؤيتي أقدم كل التزام وأشرح الأجزاء على طول الطريق.
نبدأ بشكل أساسي من ملف فارغ ونعمل في طريقنا إلى إعادة إنتاج نموذج GPT-2 (124M). إذا كان لديك المزيد من الصبر أو المال، فيمكن للكود أيضًا إعادة إنتاج نماذج GPT-3. في حين أن نموذج GPT-2 (124M) ربما تم تدريبه لبعض الوقت في اليوم (2019، منذ حوالي 5 سنوات)، فإن إعادة إنتاجه اليوم تستغرق حوالي ساعة واحدة وحوالي 10 دولارات. ستحتاج إلى صندوق GPU سحابي إذا لم يكن لديك ما يكفي، ولهذا أوصي باستخدام Lambda.
لاحظ أن GPT-2 وGPT-3 وكلا النموذجين اللغويين البسيطين، تم تدريبهما على مستندات الإنترنت، وكل ما يفعلانه هو مستندات الإنترنت "الحلم". لذا فإن هذا الريبو/الفيديو لا يغطي ضبط الدردشة، ولا يمكنك التحدث إليه كما يمكنك التحدث إلى ChatGPT. تأتي عملية الضبط الدقيق (رغم أنها بسيطة جدًا من الناحية المفاهيمية - SFT تدور حول تبديل مجموعة البيانات ومواصلة التدريب) بعد هذا الجزء وسيتم تغطيتها في وقت لاحق. في الوقت الحالي، هذا هو نوع الأشياء التي يقولها نموذج 124M إذا قمت بمطالبتها بـ "مرحبًا، أنا نموذج لغة،" بعد 10 مليار رمز من التدريب:
Hello, I'm a language model, and my goal is to make English as easy and fun as possible for everyone, and to find out the different grammar rules
Hello, I'm a language model, so the next time I go, I'll just say, I like this stuff.
Hello, I'm a language model, and the question is, what should I do if I want to be a teacher?
Hello, I'm a language model, and I'm an English person. In languages, "speak" is really speaking. Because for most people, there's
وبعد 40 مليار رمز من التدريب:
Hello, I'm a language model, a model of computer science, and it's a way (in mathematics) to program computer programs to do things like write
Hello, I'm a language model, not a human. This means that I believe in my language model, as I have no experience with it yet.
Hello, I'm a language model, but I'm talking about data. You've got to create an array of data: you've got to create that.
Hello, I'm a language model, and all of this is about modeling and learning Python. I'm very good in syntax, however I struggle with Python due
مضحك جداً. على أي حال، بمجرد ظهور الفيديو، سيكون هذا أيضًا مكانًا للأسئلة الشائعة، ومكانًا للإصلاحات والأخطاء، وأنا متأكد من أنه سيكون هناك عدد منها :)
للمناقشات والأسئلة، يرجى استخدام علامة التبويب "المناقشات"، وللتواصل بشكل أسرع، قم بإلقاء نظرة على Zero To Hero Discord، القناة #nanoGPT :
دعونا نعيد إنتاج محاضرة GPT-2 (124M) على اليوتيوب
عملية تنظيف بسيطة، لقد نسينا حذف register_buffer
المؤقت للتحيز بمجرد التحول إلى انتباه الفلاش، وتم إصلاحه من خلال العلاقات العامة الأخيرة.
قد يواجه الإصدار السابق من PyTorch صعوبة في التحويل من uint16 إلى الإصدار الطويل. داخل load_tokens
، أضفنا npt = npt.astype(np.int32)
لاستخدام numpy لتحويل uint16 إلى int32 قبل التحويل إلى موتر الشعلة ثم التحويل إلى long.
تأخذ وظيفة torch.autocast
device_type
arg، الذي حاولت بعناد تمرير device
إليه على أمل أن يعمل بشكل جيد، ولكن PyTorch في الواقع يريد النوع فقط ويخلق أخطاء في بعض إصدارات PyTorch. لذلك نريد على سبيل المثال أن يتم تجريد الجهاز cuda:3
إلى cuda
. حاليًا، سيصبح mps
للجهاز (Apple Silicon) هو وحدة المعالجة المركزية device_type
، ولست متأكدًا بنسبة 100% من أن هذه هي طريقة PyTorch المقصودة.
ومن المثير للارتباك أن model.require_backward_grad_sync
يُستخدم فعليًا بواسطة كل من التمرير الأمامي والخلفي. تم تحريكه لأعلى الخط بحيث يتم تطبيقه أيضًا على التمريرة الأمامية.
لمزيد من عمليات التشغيل على مستوى الإنتاج التي تشبه إلى حد كبير nanoGPT، أوصي بالاطلاع على المستودعات التالية:
معهد ماساتشوستس للتكنولوجيا