توضیح کد: Nanogpt – جامعه dev

سلب مسئولیت: این گزارشی است که با ابزار من تولید شده است: https://github.com/dteam-top/tsw-cli. آن را به عنوان یک آزمایش مشاهده کنید نه یک تحقیق رسمی ،
خلاصه
این مخزن ، nanoGPT
، یک پایگاه کد ساده و کارآمد برای آموزش و تنظیم دقیق مدل های GPT با اندازه متوسط (ترانسفورماتور از پیش آموزش از پیش آموزش) فراهم می کند. این برای سادگی و سرعت طراحی شده است و به کاربران امکان می دهد تا به سرعت نتایج GPT-2 را تولید کنند یا کد را با نیازهای خاص خود سازگار کنند. این مخزن سهولت استفاده و اصلاح را در اولویت قرار می دهد و آن را برای محققان و پزشکان مناسب می کند. این مسئله به مشکل آموزش و آزمایش با مدل های GPT بدون پیچیدگی کتابخانه های بزرگتر و غنی تر می پردازد.
ماژول
-
model.py
: معماری مدل GPT ، از جمله لایه ها ، مکانیسم های توجه و گزینه های پیکربندی را تعریف می کند. -
train.py
: شامل حلقه آموزش ، بارگیری داده ها ، بهینه سازی و منطق ارزیابی است. -
sample.py
: عملکردی را برای نمونه برداری از مدل های آموزش دیده GPT فراهم می کند. -
configurator.py
: یک سیستم مدیریت پیکربندی ساده که اجازه می دهد تنظیمات پیش فرض از خط فرمان یا پرونده های پیکربندی را برطرف کند. -
data/
: شامل اسکریپت هایی برای تهیه مجموعه داده ها ، مانند OpenWebtExt و شکسپیر ، برای آموزش است.
ساخت رمز
تعریف مدل (model.py
)
این بخش در مورد GPTConfig
DataClass و GPT
کلاس ، که برای تعریف و فوری مدل GPT اصلی هستند.
-
GPTConfig
: این DataClass پارامترهای پیکربندی را برای مدل GPT مانند اندازه بلوک نگه می دارد (block_size
) ، اندازه واژگان (vocab_size
) ، تعداد لایه ها (n_layer
) ، تعداد سرهای توجه (n_head
) ، تعبیه بعد (n_embd
) ، نرخ ترک تحصیل (dropout
) ، و اینکه آیا از اصطلاحات تعصب استفاده کنید (bias
). این پارامترها اندازه و معماری مدل GPT را تعیین می کنند. -
GPT
: این کلاس خود مدل GPT را تعریف می کند. این شامل یک لایه تعبیه شده است (wte
) برای نشانه ها و دیگری (wpe
) برای اطلاعات موقعیتی ، مجموعه ای از بلوک های ترانسفورماتور (Block
) ، و عادی سازی لایه نهایی (ln_f
) به دنبال یک لایه خطی (lm_head
) برای پیش بینی نشانه بعدی. عبور رو به جلو مدل شامل تعبیه نشانه ها و موقعیت های ورودی ، عبور آنها از طریق بلوک های ترانسفورماتور و سپس استفاده از لایه خطی برای پیش بینی ورود به سیستم برای نشانه بعدی است. -
Block
: یک بلوک ترانسفورماتور واحد ، متشکل از کرم لایه ، علت خود و MLP را پیاده سازی می کند. -
LayerNorm
: عادی سازی لایه با تعصب اختیاری. -
CausalSelfAttention
: مکانیسم خودآزمایی علیت را پیاده سازی می کند. در صورت وجود از توجه فلش استفاده می کند (Pytorch> = 2.0). -
MLP
: یک perceptron ساده چند لایه. -
GPT.from_pretrained(cls, model_type, override_args=None)
: این روش کلاس اجازه می دهد تا مدل GPT را با وزنه هایی از مدل های GPT-2 از پیش آموزش داده شده توسط بغل کردن ترانسفورماتورهای صورت فراهم کند. این وزن های از پیش آموزش داده شده را بارگیری می کند و آنها را در آن کپی می کندGPT
مدل. این برای تنظیم دقیق مدل های GPT در مجموعه داده های جدید مفید است. از آن استفاده می کندtransformers
کتابخانه برای بارگیری مدل GPT-2 از پیش آموزش دیده. -
GPT.configure_optimizers(self, weight_decay, learning_rate, betas, device_type)
: بهینه ساز ADAMW را برای آموزش مدل GPT پیکربندی می کند. این پارامترها را به کسانی که دارای پوسیدگی وزن هستند و آنهایی که بدون آن هستند ، جدا می کند. -
GPT.estimate_mfu(self, fwdbwd_per_iter, dt)
: تخمین مدل استفاده از FLOPS Model (MFU) ، یک معیار برای اندازه گیری راندمان آموزش. -
GPT.generate(self, idx, max_new_tokens, temperature=1.0, top_k=None)
: متن را از مدل داده شده دنباله شروع تولید می کندidx
بشر این به طور تکراری نشانه بعدی را پیش بینی می کند و آن را به دنباله اضافه می کند.
حلقه تمرینی (train.py
)
این اسکریپت روند آموزش مدل GPT را تنظیم می کند.
- شروع: مدل ، بهینه ساز ، لودرهای داده و سایر مؤلفه های مربوط به آموزش را آغاز می کند. این مجموعه داده های توزیع شده موازی (DDP) را برای آموزش چند GPU توزیع می کند.
-
بارگیری داده ها: داده ها را از
.bin
پرونده ها با استفاده ازnp.memmap
برای راندمان حافظه. درget_batch
عملکرد دسته بندی داده ها را برای آموزش و اعتبار سنجی بازیابی می کند. - حلقه آموزش: در مورد داده های آموزش ، انجام گذرگاه های رو به جلو و عقب و به روزرسانی پارامترهای مدل تکرار می شود. از تجمع شیب برای شبیه سازی اندازه های بزرگتر استفاده می کند.
- ارزیابی: مدل را در تنظیم اعتبارسنجی به صورت دوره ای برای ردیابی پیشرفت و ذخیره پاسگاه ها ارزیابی می کند.
- برنامه ریزی نرخ یادگیری: یک برنامه پوسیدگی نرخ یادگیری کسین را با یک دوره گرمی خطی اجرا می کند.
- بازرسی: موجب صرفه جویی در مدل و حالت بهینه ساز به صورت دوره ای یا هنگامی که ضرر اعتبار سنجی بهبود می یابد.
- ورود به سیستم: پیشرفت آموزش به کنسول و به صورت اختیاری به وزنه ها و تعصبات (WANDB).
-
torch.compile
: از ویژگی های تلفیقی Pytorch 2.0 برای سرعت های بالقوه استفاده می کند. -
DDP: اهرم ها
torch.nn.parallel.DistributedDataParallel
برای آموزش چند GPU.
نمونه برداری (sample.py
)
این اسکریپت عملکردی را برای تولید نمونه های متن از یک مدل GPT آموزش دیده فراهم می کند.
- شروع: مدل را از یک ایست بازرسی یا یک نوع GPT-2 از پیش آموزش داده شده بارگذاری می کند.
- حلقه نمونه گیری: با تغذیه مکرر مدل پیش بینی های خاص خود ، متن را تولید می کند.
- رمزگشایی: شناسه های توکن تولید شده را با استفاده از رمزگذاری مناسب (GPT-2 BPE یا سطح کاراکتر) به متن تبدیل می کند.
پیکربندی (configurator.py
)
این اسکریپت یک روش ساده برای غلبه بر مقادیر پیکربندی پیش فرض از خط فرمان یا از پرونده های پیکربندی فراهم می کند.
- این پرونده های پیکربندی را می خواند و آنها را برای غلبه بر مقادیر پیش فرض متغیرهای جهانی اجرا می کند.
- این آرگومان های خط فرمان را تجزیه می کند و متغیرهای جهانی مربوطه را نادیده می گیرد.
- استفاده می کند
ast.literal_eval
تلاش برای ارزیابی مقادیر آرگومان های خط فرمان به عنوان لفظات پایتون (به عنوان مثال ، بول ، اعداد).
آماده سازی داده ها (data/
)
این فهرست شامل اسکریپت هایی برای تهیه مجموعه داده ها برای آموزش است.
-
data/openwebtext/prepare.py
: بارگیری و نشانه گذاری مجموعه داده OpenWebText با استفاده از GPT-2 BPE Tokenizer. این داده های نشانه گذاری شده را در آن ذخیره می کند.bin
پرونده ها از آن استفاده می کندdatasets
کتابخانه از بغل کردن چهره برای بارگیری مجموعه داده OpenWebText. -
data/shakespeare/prepare.py
: بارگیری و آماده سازی مجموعه داده های شکسپیر برای مدل سازی زبان در سطح شخصیت. -
data/shakespeare_char/prepare.py
: مجموعه داده های شکسپیر را برای مدل سازی زبان در سطح شخصیت با نقشه برداری شخصیت ها به عدد صحیح آماده می کند.
طرح DB
در این مخزن هیچ طرح صریح پایگاه داده وجود ندارد. داده ها در پرونده های باینری ذخیره می شوند (.bin
) و پرونده های ابرداده (.pkl
).
تماس های API خارجی
-
بغل کردن مجموعه داده های صورت (
data/openwebtext/prepare.py
):load_dataset
عملکرد ازdatasets
از کتابخانه برای بارگیری مجموعه داده OpenWebText از Hub Husging Face استفاده می شود. -
بغل کردن ترانسفورماتورهای صورت (
model.py
):GPT2LMHeadModel.from_pretrained
عملکرد ازtransformers
از کتابخانه برای بارگیری مدل های GPT-2 از پیش آموزش استفاده می شود. -
درخواست ها (
data/shakespeare/prepare.py
باdata/shakespeare_char/prepare.py
): درrequests
از کتابخانه برای بارگیری استفاده می شودinput.txt
پرونده ازchar-rnn
مخزن
بینش
-
سادگی و خوانایی: هدف اصلی طراحی
nanoGPT
سادگی است این کد عمداً مختصر و قابل خواندن نگه داشته می شود و درک و اصلاح آن را آسان می کند. -
کارآیی: این مخزن از ویژگی های Pytorch 2.0 استفاده می کند
torch.compile
برای سرعت های بالقوه. همچنین از تکنیک های بارگیری داده های کارآمد مانند حافظه استفاده می کندnp.memmap
بشر - انعطاف پذیری: سیستم پیکربندی به کاربران این امکان را می دهد تا تنظیمات پیش فرض را به راحتی نادیده بگیرند و کد را با نیازهای خاص خود تطبیق دهند.
- قابلیت تولید مثل: این مخزن اسکریپت هایی را برای بازتولید نتایج GPT-2 در مجموعه داده OpenWebText ارائه می دهد.
- ارزش آموزشی: علیرغم اولویت بندی دندان ها بر آموزش ، سادگی پایگاه کد آن را به یک نقطه شروع خوب برای یادگیری در مورد مدل های GPT تبدیل می کند.
خلاقیت این مخزن در توانایی آن در تقطیر جوهر آموزش مدل GPT در یک پایگاه کد حداقل و قابل درک نهفته است. استفاده از configurator.py
یک راه حل خلاقانه برای مدیریت پیکربندی است ، اگرچه ممکن است معمولی ترین رویکرد نباشد.
مخزن GitHub: Nanogpt
گزارش تهیه شده توسط TSW-X
بخش سیستم های تحقیقاتی پیشرفته
تاریخ: 2025-03-18