آموزش پردازش زبان طبیعی با اکوسیستم هاگینگ فیس؛ ایجاد منبع (قسمت سوم فصل چهارم)
آسانترین روش برای اشتراکگذاری مدل از پیش آموزش داده شده این است که از Hugging Face Hub استفاده کنید. ابزارها و امکانات موجود میتواند بستر مناسبی برای اشتراکگذاری و بهروزرسانیِ مستقیم مدلها در Hub فراهم کند. جزئیات آن در بخشهای بعدی مقاله توضیح داده خواهد شد. مشوقهای لازم در اختیار کاربران قرار میگیرد تا مدلها را آموزش دهند. به این ترتیب، همه میتوانند به این مدلها دسترسی داشته باشند. مدلها حتی اگر با دیتاستهای ویژهای آموزش داده شوند، نقش موثری در صرفهجویی در زمان خواهند داشت. همچنین، امکان محاسبهی منابع و دسترسی به آرتیفکتهای مفیدِ آموزش داده شده نیز فراهم میشود. پس کاربران میتوانند از کارهای دیگران نیز سود ببرند. سه روش برای ایجاد منبع مدل جدید وجود دارد:
- push_to_hubAPI
- transformersCLI
- رابط کاربری وب
پس از ایجاد منبع، میتوانید فایلها را با git و git-lfs در آن بارگذاری کنید. در این مقاله، مراحل مختلفِ ساخت منبع مدل و بارگذاری فایلها در آنها توضیح داده خواهد شد.
استفاده از push_to_hub با huggingface_hub
آسانترین روش برای بارگذاری فایلها در Hub، استفاده از روش push_to_hub است. در ادامه، باید یک توکن احراز هویت بسازید تا huggingface_hub API هویتتان را تشخیص دهد. باید در محیطی باشید که transformers در آن نصب شده باشد. باید دستور CLI login را اجرا کنید. توجه داشته باشید که این دستورها باید با کاراکتر ! همراه باشند، اگر با Google Colab کار میکنید.
transformers-cli login
اگر huggingface_hub را نصب کردهاید، به شیوه قبلی عمل کنید:
huggingface-cli login
نام کاربری و گذرواژه همان مواردی هستند که برای ورود به Hub استفاده کردهاید. بسیار عالی! اکنون توکن احراز هویتتان در پوشهی cache ذخیره شده است. حال، نوبت به ایجاد چند منبع رسیده است. دسترسی به Model Hub با روش push_to_hub امکانپذیر میشود. این روش در مدلها، توکنکنندهها و اشیای پیکربندی موجود است. این روش نقش موثری در ایجاد منبع و انتقال مستقیم مدل و فایلهای توکنکننده به داخل منبع دارد. برخلاف دو روشی که در زیر خواهید دید، نیازی به انجام دستیِ کارها نیست. برای اینکه با نحوهی کارکرد آن آشنا شوید، ابتدا یک مدل و توکنکننده راهاندازی میکنیم:
from transformers import TFAutoModelForMaskedLM, AutoTokenizer checkpoint = "camembert-base" model = TFAutoModelForMaskedLM.from_pretrained(checkpoint) tokenizer = AutoTokenizer.from_pretrained(checkpoint)
میتوانید هر کاری که دوست دارید با این روش انجام دهید؛ توکنها را به توکنکننده اضافه کنید، مدل را آموزش دهید و به طور دقیق تنظیماش کنید. پس از اینکه مدلها، وزنها و توکنکننده مطابق خواستههایتان به دست آمدند، میتوانید به طور مستقیم از روش push_to_hub استفاده کنید که در شیء model موجود است:
model.push_to_hub("dummy-model")
به این ترتیب، منبع جدید dummy-model در پروفایلتان ایجاد خواهد شد. فایلهای مدلتان در آن جای میگیرد. همین کار را با توکنکننده انجام دهید. بنابراین، همه فایلها در این منبع جدید در دسترس قرار خواهند گرفت:
tokenizer.push_to_hub("dummy-model")
اگر در یک سازمان مشغول به کار هستید، آرگومان organization را به منظور بارگذاری در فضای نام آن سازمان ذکر کنید:
tokenizer.push_to_hub("dummy-model", organization="huggingface")
اگر قصد دارید از توکن Hugging Face خاصی استفاده کنید، باید آن را در روش push_to_hub ذکر کنید:
tokenizer.push_to_hub( "dummy-model", organization="huggingface", use_auth_token="<TOKEN>" )
اکنون، سَری به Model Hub بزنید تا مدل تازه بارگذاریشدهتان را پیدا کنید:
https://huggingface.co/user-or-organization/dummy-model
روی تب «فایلها و نسخهها» کلیک کنید. باید فایلها در قالب اسکرینشات زیر نمایان باشند:
مدل و توکنکنندهی مرتبط با چکپوینت bert-base-cased را برداشته و با استفاده از روش push_to_hub در فضای نامتان در منبع بارگذاری کنید. این نکته را حتماً بررسی کنید که منبع پیش از حذف کردن به درستی در صفحه قرار گرفته باشد. همانطور که پیشتر دیدهاید، روش push_to_hub آرگومانهای متعددی را میپذیرد؛ بنابراین، امکان بارگذاری منبعی خاص یا فضای نام سازمان یا استفاده از توکن API مختلفی نیز وجود دارد.
بسته پایتون huggingface_hub از روش push_to_hub پشتیبانی میکند. این بسته یک API مستقیم برای Hugging Face Hub عرضه میکند و در ترنسفورمرز و چند کتابخانه یادگیری ماشین دیگر مثل allenlp قرار دارد. اگرچه عمده تمرکزمان در فصل جاری روی یکپارچهسازیِ ? Transformers است، اما بهکارگیری آن در کد یا کتابخانه خودتان هم کار چندان دشواری نیست. نحوهی بارگذاری فایلها در منبعِ تازه ایجاد شده در بخش آخر توضیح داده شده است.
استفاده از transformers CLI
بستهی transformers میتواند CLI بسیار سادهای برای کارهای پیش پاافتادهای نظیر گردآوری اطلاعات درباره محیط، افزودن معماری مدل جدید به کتابخانه و تبدیل مدل ارائه کند. این بسته دستور سادهای هم برای ایجاد منبع جدید در فضای نام کاربران یا فضای نام سازمان در Hub دارد. CLI امکان ایجاد منبع جدید را برای کاربران فراهم میکند، اما فایلهای متعددی را در آن بارگذاری نمیکند. در بخش حاضر، با نحوهی استفاده از git برای بارگذاری فایلها از خط دستور آشنا خواهید شد.
به طور مشابه، استفاده از huggingface_hub API نیازمند این است که توکن APIتان را در cache ذخیره کرده باشید. بنابراین، باید از دستور login در CLI استفاده کنید. این مورد در بخش قبلی نیز ذکر شد. توجه داشته باشید که این دستورها باید با کاراکتر ! همراه باشند، اگر با Google Colab کار میکنید.
transformers-cli login
اگر اقدام به نصب huggingface_hub کردهاید:
huggingface-cli login
پس از اینکه این کار به پایان رسید، API میداند که به کدام فضاهای نام دسترسی دارید. پروفایل و سازمانتان بخشی از آن است. برای اینکه فهرست دستورهای موجود را ببینید، میتوانید transformers-cli -h را اجرا کنید. احتمال دارد با خروجی زیر مواجه شوید:
usage: huggingface-cli <command> [<args>] positional arguments: {login,whoami,logout,repo,lfs-enable-largefiles,lfs-multipart-upload} huggingface-cli command helpers login Log in using the same credentials as on huggingface.co whoami Find out which huggingface.co account you are logged in as. logout Log out repo {create, ls-files} Commands to interact with your huggingface.co repos. lfs-enable-largefiles Configure your repository to enable upload of files > 5GB. lfs-multipart-upload Command will get called by git-lfs, do not call it directly. optional arguments: -h, --help show this help message and exit
به منظور بارگذاری مدل از پیش آموزش داده شده، از دستور repo create برای ساخت منبع استفاده کنید. جرئیات کار را در زیر میبینید:
huggingface-cli repo create dummy-model
بنابراین، منبع dummy-model در فضای نام به دست خواهد آمد. اگر مایل بودید، میتوانید با استفاده از –organization مشخص کنید که منبع باید به کدام سازمان تعلق داشته باشد.
huggingface-cli repo create dummy-model --organization huggingface git lfs install
لذا، dummy-model در فضای نام huggingface شکل خواهد گرفت؛ با فرض اینکه به آن سازمان تعلق دارید. در بخش آخر این بخش، خواهید دید که فایلها چگونه در منبع تازه ایجاد شده بارگذاری میشوند.
استفاده از رابط کاربری وب
رابط کاربری وب ابزارهایی برای مدیریت مستقیم منابع در Hub ارائه میکند. با استفاده از این رابط کاربری، ساخت منابع، افزودن فایلها (حتی فایلهای بزرگتر)، بررسی مدلها، ارائهی بصری تفاوتها و بسیاری دیگر از کارها آسانتر میشود.
در ابتدا، مالک منبع را مشخص کنید. مالک میتواند خود شما یا سازمان متبوع باشد. اگر سازمانی را انتخاب کنید، مدل در صفحهی سازمان پوشش داده خواهد شد و تمامی اعضای سازمان این فرصت را خواهند داشت تا در راستای ارتقای آن تلاش کنند. در وهله بعدی، نام مدلتان را وارد کنید و این نام منبع نیز خواهد بود. در نهایت، میتوانید مشخص کنید که آیا مدل عمومی باشد یا خصوصی. مدلهای خصوصی مستلزم این است که حساب کاربری پولی در هاگینگ فیس داشته باشید. بنابراین، مدلهایی خواهید داشت که از دید عموم کاربران پنهان است.
پس از ساخت منبع مدل، با صفحهای نظیر این روبرو میشوید:
میزبانی از مدل شما در این محیط رخ خواهد داد. میتوانید فایل README را به طور مستقیم از رابط کاربری وب اضافه کنید تا عمل تکثیر آغاز شود. فایل README با نام Markdown شناخته میشود. بخش سومِ این فصل به ساخت کارت مدل اختصاص دارد. این مراحل نقش بسیار پررنگی در ارزشآفرینی برای مدلتان دارد.
اگر به تب «فایلها و نسخهها» نگاه کنید، میبینید که هنوز فایلهای زیادی در آنجا نیست. فقط README.md که خودتان ساختید و فایل .gitattributes که فایلهای بزرگ را زیر نظر دارد، در آن بخش قابل دسترس میباشند.
در گام بعدی، به بررسی نحوهی افزودن برخی فایلهای جدید خواهیم پرداخت.
بارگذاری فایلهای مدل
سیستم مدیریتِ فایلها در Hugging Face Hub بر پایهی git قرار دارد و git-lfs که خلاصهشدهی عبارت Git Large File Storage است، مخصوص فایلهای بزرگتر میباشد. پیش از ادامهی کار، از این مسئله مطمئن شوید که git و git-lfs را روی سیستمتان نصب کردهاید. پس از اینکه این ابزارها را دانلود و نصب کردید، git lfs install را برای راهاندازیِ git-lfs اجرا کنید:
Updated git hooks. Git LFS initialized.
در گام بعدی، به بررسی نحوهی افزودن برخی فایلهای جدید خواهیم پرداخت.
بارگذاری فایلهای مدل
سیستم مدیریتِ فایلها در Hugging Face Hub بر پایهی git قرار دارد و git-lfs که خلاصهشدهی عبارت Git Large File Storage است، مخصوص فایلهای بزرگتر میباشد. پیش از ادامهی کار، از این مسئله مطمئن شوید که git و git-lfs را روی سیستمتان نصب کردهاید. پس از اینکه این ابزارها را دانلود و نصب کردید، git lfs install را برای راهاندازیِ git-lfs اجرا کنید:
Updated git hooks. Git LFS initialized.
گام بعدی این است که منبع مدلتان را کلون کنید:
git clone ;
نام کاربری من lysandre است و از نام مدل dummy استفاده کردهام. پس، دستور برای من به شکل زیر خواهد بود:
git clone https://huggingface.co/lysandre/dummy
اکنون، پوشهای به نام dummy در دایرکتوری دارم. بگذارید نگاهی به محتوا بیندازیم:
cd dummy && ls
README.md
اگر منبعتان را با استفاده از push_to_hub یا transformers CLI ساختید، این پوشه باید خالی باشد. اگر از دستورالعملهای بخش قبلی برای ساخت منبع با استفاده از رابط کاربری وب پیروی کردید، پوشه باید حاوی یک فایل README.md باشد که در زیر میبینید.
افزودن فایلی با حجم معمولی (مثل فایل پیکربندی، فایل واژگان یا هر فایلی که چند مگابایت حجم داشته باشد) به همان شیوهای انجام میشود که در سیستم مبتنی بر git عمل شده است. با این حال، فایلهای بزرگتر باید از git-lfs عبور کنند تا به huggingface.co برسند.
حال، بگذارید سری به پایتون بزنیم تا مدل و توکنکنندهای ایجاد کنیم که به منبع DUMMY متعهد باشد.
from transformers import TFAutoModelForMaskedLM, AutoTokenizer checkpoint = "camembert-base" model = TFAutoModelForMaskedLM.from_pretrained(checkpoint) tokenizer = AutoTokenizer.from_pretrained(checkpoint) # Do whatever with the model, train it, fine-tune it... model.save_pretrained("<path_to_dummy_folder>") tokenizer.save_pretrained("<path_to_dummy_folder>")
حال که چند آرتیفکت مدل و توکنکننده ذخیره کردهایم، یک نگاه دیگر به پوشه dummy میاندازیم:
ls
config.json README.md sentencepiece.bpe.model special_tokens_map.json tf_model.h5 tokenizer_config.json tokenizer.json
اگر به حجم فایل نگاه کنید، میبینید که فایل t5_model.h5 فقط دادهپرت است و بیش از 400 مگابایت حجم دارد.
هنگام ساخت منبع (Repository) از رابط کاربری وب، فایل *.gitattributes* به طور خودکار نصب میشود تا فایلهای معینی را زیر نظر بگیرد مثل *.bin* و *.h5*. همچنین، `git-lfs` آنها را بررسی و ردیابی خواهد کرد. اینک، میتوان با روال پیشین به انجام مراحل دیگر پرداخت. میتوان همه فایلها را با استفاده از دستور git add به محیط Git اضافه کرد:
git add .
پس میتوان فایلها را نیز در این مرحله بررسی کرد:
git status
On branch main Your branch is up to date with 'origin/main'. Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: .gitattributes new file: config.json new file: sentencepiece.bpe.model new file: special_tokens_map.json new file: tf_model.h5 new file: tokenizer.json new file: tokenizer_config.json
به طور مشابه، با استفاده از دستور status باید اطمینان حاصل کنید که git-lfs فایلهای درست را بررسی و ردیابی میکند:
git lfs status
On branch main Objects to be pushed to origin/main: Objects to be committed: config.json (Git: bc20ff2) sentencepiece.bpe.model (LFS: 988bc5a) special_tokens_map.json (Git: cb23931) tf_model.h5 (LFS: 86fce29) tokenizer.json (Git: 851ff3e) tokenizer_config.json (Git: f0f7783) Objects not staged for commit:
میبینید که همه فایلها دارای Git هستند، به جز t5_model.h5 که از LFS بهره میبرد.
نوبت به انجام مراحل آخر رسیده است:
git commit -m "First model version" [main b08aab1] First model version 6 files changed, 36 insertions(+) create mode 100644 config.json create mode 100644 sentencepiece.bpe.model create mode 100644 special_tokens_map.json create mode 100644 tf_model.h5 create mode 100644 tokenizer.json create mode 100644 tokenizer_config.json
بسته به سرعت اینترنت و حجم فایلها، این مراحل میتواند قدری زمانبر باشد:
git push
Uploading LFS objects: 100% (1/1), 433 MB | 1.3 MB/s, done. Enumerating objects: 11, done. Counting objects: 100% (11/11), done. Delta compression using up to 12 threads Compressing objects: 100% (9/9), done. Writing objects: 100% (9/9), 288.27 KiB | 6.27 MiB/s, done. Total 9 (delta 1), reused 0 (delta 0), pack-reused 0 To https://huggingface.co/lysandre/dummy 891b41d..b08aab1 main -> main
اگر پس از اتمام این مرحله به منبع مدل نگاه کنید، کلیه فایلهایِ تازه اضافه شده را میبینید:
با UI این فرصت را دارید که فایلهای مدل را بررسی کنید و متوجهِ تفاوتهای ایجاد شده شوید: