آموزش پردازش زبان طبیعی با اکوسیستم هاگینگ فیس؛ ایجاد منبع (قسمت سوم فصل چهارم)
آسانترین روش برای اشتراکگذاری مدل از پیش آموزش داده شده این است که از Hugging Face Hub استفاده کنید. ابزارها و امکانات موجود میتواند بستر مناسبی برای اشتراکگذاری و بهروزرسانیِ مستقیم مدلها در Hub فراهم کند. جزئیات آن در بخشهای بعدی مقاله توضیح داده خواه…
خلاصه تحلیلی خبر
آسانترین روش برای اشتراکگذاری مدل از پیش آموزش داده شده این است که از Hugging Face Hub استفاده کنید. ابزارها و امکانات موجود میتواند بستر مناسبی برای اشتراکگذاری و بهروزرسانیِ مستقیم مدلها در Hub فراهم کند. جزئیات آن در بخشهای بعدی مقاله توضیح داده خواه…
موضوعات اصلی: پشتیبانی شبکه، کنید، منبع، مدل، استفاده، فایلهای
آسانترین روش برای اشتراکگذاری مدل از پیش آموزش داده شده این است که از Hugging Face Hub استفاده کنید. ابزارها و امکانات موجود میتواند بستر مناسبی برای اشتراکگذاری و بهروزرسانیِ مستقیم مدلها در Hub فراهم کند. جزئیات آن در بخشهای بعدی مقاله توضیح داده خواهد شد. مشوقهای لازم در اختیار کاربران قرار میگیرد تا مدلها را آموزش دهند. به این ترتیب، همه میتوانند به این مدلها دسترسی داشته باشند. مدلها حتی اگر با دیتاستهای ویژهای آموزش داده شوند، نقش موثری در صرفهجویی در زمان خواهند داشت. همچنین، امکان محاسبهی منابع و دسترسی به آرتیفکتهای مفیدِ آموزش داده شده نیز فراهم میشود. پس کاربران میتوانند از کارهای دیگران نیز سود ببرند. سه روش برای ایجاد منبع مدل جدید وجود دارد
- push_to_hubAPI
- transformersCLI
- رابط کاربری وب
پس از ایجاد منبع، میتوانید فایلها را باgitوgit-lfsدر آن بارگذاری کنید. در این مقاله، مراحل مختلفِ ساخت منبع مدل و بارگذاری فایلها در آنها توضیح داده خواهد شد.
استفاده از push_to_hub با huggingface_hub
آسانترین روش برای بارگذاری فایلها در Hub، استفاده از روشpush_to_hubاست. در ادامه، باید یک توکن احراز هویت بسازید تاhuggingface_hubAPI هویتتان را تشخیص دهد. باید در محیطی باشید کهtransformersدر آن نصب شده باشد. باید دستور CLIloginرا اجرا کنید. توجه داشته باشید که این دستورها باید با کاراکتر!همراه باشند، اگر با 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="" )
اکنون، سَری به 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_hubAPI نیازمند این است که توکن APIتان را در cache ذخیره کرده باشید. بنابراین، باید از دستورloginدر CLI استفاده کنید. این مورد در بخش قبلی نیز ذکر شد. توجه داشته باشید که این دستورها باید با کاراکتر!همراه باشند، اگر با Google Colab کار میکنید.
transformers-cli login
اگر اقدام به نصبhuggingface_hubکردهاید
huggingface-cli login
پس از اینکه این کار به پایان رسید، API میداند که به کدام فضاهای نام دسترسی دارید. پروفایل و سازمانتان بخشی از آن است. برای اینکه فهرست دستورهای موجود را ببینید، میتوانیدtransformers-cli -hرا اجرا کنید. احتمال دارد با خروجی زیر مواجه شوید
usage: huggingface-cli[ ] 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یاtransformersCLI ساختید، این پوشه باید خالی باشد. اگر از دستورالعملهای بخش قبلی برای ساخت منبع با استفاده از رابط کاربری وب پیروی کردید، پوشه باید حاوی یک فایل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("") tokenizer.save_pretrained("") حال که چند آرتیفکت مدل و توکنکننده ذخیره کردهایم، یک نگاه دیگر به پوشه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..." 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 این فرصت را دارید که فایلهای مدل را بررسی کنید و متوجهِ تفاوتهای ایجاد شده شوید
برای ارزیابی پایداری، امنیت و نگهداری این زیرساخت، راهنمای پشتیبانی شبکه را نیز مطالعه کنید.