מדריך פשוט לעבודה עם מודלים מ hugging face

הרצת מודל מ-Hugging Face על מכונה של EC2 (או מכונה לוקלית) לניסויים ועניין.

ביום של כתיבת שורות אלו, ים פלג שחרר מודל עצום של LLM בעברית (בסיוע הספונסרים: חברת Arjeo).

הרבה אנשים שאלו איך בדיוק להריץ את המודל ולבחון אותו. פוסט בודד לא יכיל את כל המורכבויות של הרצת מודלים (לא משנה אם מדובר בטרנספורמרים או אחרים) אבל כן חשבתי לכתוב פוסט על איך לעשות את זה באופן פשוט וזול יחסית דרך אמזון EC2. בדרך שהיא באמת פשוטה וקלה מבלי להכנס למורכבויות. לא מדובר ברמת פרודקשן אלא ברמה שתאפשר לנו לשחק ולהשתעשע דרך הקוד.

אפשר לקחת את המדריך as is ולהריץ אותו על המחשב שלכם אם הוא חזק מספיק ויש לו כרטיס גרפי. במקרה הזה הסיכוי להסתבכות הוא לא קטן כי יש עניין של סביבות, התקנת פייתון וכו׳. במקרה הזה – אנא השתמשו ב pyenv להתקנת פייתון (המדריך הזה שלי להתקנת pyenv יסייע) ודלגו אל ״התקנת התלויות בפייתון״

הידע הנדרש: זה מדריך טכני ואני יוצא מנקודת הנחה שאם לא תדעו משהו ספציפי כמו ״מה זה טרמינל״ – תוכלו לגגל ולחפש. מה שנדרש הוא שיהיה לכם חשבון ב-AWS. אם אין לכם, זה הזמן. פותחים אותו ומזינים כרטיס אשראי. כי זה הולך לעלות לכם כמה שקלים בודדים. אני מסביר פה על פייתון, שזו שפה ממש כיפית ופשוטה ומתכנתים בשפות אחרות לא יתקשו להסתדר עם מעט הקוד שיש פה.

יצירת מכונה ב-EC2

השלב הבא הוא ליצור מכונה ב-EC2. מדובר במכונה וירטואלית שיש עליה לינוקס. המכונה הזו עולה כסף לשעת שימוש כאשר העלות יכולה להיות סנטים בודדים עד לכמה דולרים לשעה. במקרה שלנו אנחנו נצטרך מכונה חזקה יחסית שתעלה לנו כמה שקלים לשעה.

נכנס אל הקונסולה ואל ec2 ונבחר ״יצירת instance״. אנו נצטרך לבחור AMI – ראשי תבות של Amazon Machine Image. מה זה אומר? סוג של אימג׳ שממנו המכונה נבנית. יש מלא כאלו – כאלו שהם רק לינוקס, כאלו שהם לינוקס עם Node.js וכמובן כל מיני סוגים של מערכות הפעלה אחרות. יש אלפים, אני לא מגזים. . אנחנו נחפש Deep Learning – ונבחר את האימג׳ של PyTorch גרסה 2.2.0 (אם יש לכם גרסה טיפה אחרת זה גם בסדר, אבל 2 ומעלה) ונוודא שזה אובונטו. לא AWS linux.

צילום מסך של ה-AMI

אחרי שבחרנו את סוג ה-AMI, השלב הבא הוא להכניס פרמטרים של המכונה. החלק הכי חשוב הוא המכונה עצמה. אפשר לבחור כל מכונה אבל ה-AMI הזה עובד עם המכונות החזקות עם הגרטיס הגרפי מסוג G. אנו נבחר את אחד מהם בהתאם לתקציב. אני ממליץ על יותר מ G5.

צילום מסך של בחירת המכונה. אפשר לבחור המון סוגי מכונות אבל חשוב לבחור G5 לפחות.

השלב הבא הוא להגדיל את כמות ההארדיסק שאנחנו צריכים. לפחות למאה ג׳יגהביט.

צילום מסך של בחירת גודל הדיסק הקשיח. עדיף 100.

השלב הבא הוא לייצר את המכונה, כדאי לייצר מפתחות כדי שנוכל להתחבר מ-CLI. אבל זו בחירה שלכם.

אחרי שהמכונה נוצרת, נתחבר אליה. אפשר דרך הדפדפן ואז תפתח קונסולה בדפדפן או ישירות עם SSH. אם אין לכם מושג מה זה SSH – פשוט תתחברו עם EC2 Instance Connect. הוא יפתח לכם טרמינל ישר בדפדפן.

חיבור לשרת דרך הקונסולה של אמזון. יש לבחור בלשונית Instance Connect ואז ב-Connect.

התקנת התלויות בפייתון

אחרי שהמכונה עולה והתחברנו לקונסולה. השלב הבא הוא להתקין את התלויות בפייתון, המכונה כבר באה עם פייתון. אני משתמש פה ב-pip לשם הפשטות. הקלידו:

pip install torch transformers accelerate sentencepiece protobuf

ואז הקלידו על אנטר. את התלויות האלו אנו נצטרך בהמשך. יקח כמה דקות להתקנה לרוץ. אין מה להכנס ללחץ 😇

המחשה של תהליך pip install. זה עלול להיות ארוך! לא להבהל

אחרי ההתקנה, הגיע הזמן להכניס את הקוד עצמו! אנו נקליד:

nano index.py

ונקליד את הקוד שמופיע באתר של המודל Hebrew-Mistral-7B:

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("yam-peleg/Hebrew-Mistral-7B")
model = AutoModelForCausalLM.from_pretrained("yam-peleg/Hebrew-Mistral-7B", device_map="auto")

input_text = "שלום! מה שלומך היום?"
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")

outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))

הקוד הזה משתמש ב-GPU.

נלחץ על קומנד x או קונטרול x. ה-nano, שהוא עורך טקסט, ישאל אותנו אם לשמור ואנחנו נאמר לו ״בוודאי!״ ונלחץ על y. יווצר לנו קובץ בשם index.py.

הגיע הזמן לבדוק את הקוד! אנו נכתוב:

python index.py

ונשב להתבונן בהצגה! זה יקח זמן.

מה שקורה הוא שהקוד מוריד את המודל מהאתר של Hugging Face ומתחיל להריץ אותו מקומית על המחשב.

הרצה של python index.py. המון תהליכים.

אחרי כל ההרצות והזמן, תתקבל סוף סוף תשובה לשאלה "שלום! מה שלומך היום?״!

אפשר כמובן גם להזין שאלות אחרות ואפשר לפתוח CLI שיענה באופן קבוע על השאלות מהמודל הטעון מבלי שיש צורך לטעון אותו שוב ושוב. אבל ככה בדיוק מריצים את המודל הזה, ואחרים, באופן ראשוני.

אפשר לראות שההרצה, הטעינה וההפעלה לוקחים המון זמן וזה מרגיש קצת כמו הקטע הזה ב״חזרה לעתיד 3״ שבו דוק בראון מכין קובית קרח:

אבל זו רק ההתחלה וכמובן שהרצה של מודל גדול שונה מאד מבחינת סדרי גודל ממודלים קטנים יותר והרצה של מודל לסביבת פרודקשן לא נראית ככה (בגלל זה חלק מהחברות משתמשות למשל בכלים אחרים כמו Sagemaker ולא במכונות יעודיות, בטח ל-LLM). אבל זה נהדר למי שרוצה לשחק ולהשתעשע במודל של ים פלג ובמודלים אחרים.

אפשר כמובן להתנסות במודלים אחרים, פחות קשוחים ועצבניים. למשל, הנה מודל של ניחוש סנטימנט – האם מדובר בטקסט חיובי או שלילי.

מודל זיהוי רגש בטקסט

המודל של אביחי שריקי, שגם הוא נמצא ב-Hugging Face, הוא נהדר וגם ממש קל להפעלה – אפילו במכונה חלשה יחסית.

באותה מכונה – שכבר התקנו עליה את המודולים השונים, כל מה שאנחנו צריכים לעשות זה להשתמש בקוד הזה – אפשר לשמור אותו בשם אחר – למשל תחת hebheb.py

from transformers import pipeline

# Load the pre-trained sentiment analysis model
sentiment_analysis = pipeline(
"sentiment-analysis", model="avichr/heBERT_sentiment_analysis")

input_text = [
"אני שונא אותך"]

# Perform sentiment analysis on the input text
result = sentiment_analysis(input_text)

# Print the result
print(result)

אנו נקבל הערכה שמדובר בטקסט עם סנטימנט שלילי. אם נריץ אותו עם ״אני אוהב אותך״ נקבל סנטימנט חיובי.

פלט של קונסולה - אני מריץ פעם אחת קוד עם ״אני שונא אותך״ ומקבל הערכה של סנטימנט שלילי ופעם שניה עם ״אני אוהב אותך״ ומקבל הערכה של סנטימנט חיובי.

אם תריצו את זה, תגלו שההרצה היא ה-ר-ב-ה יותר מהירה מאשר המודול הכבד. עכשיו אפשר לתפור סביב זה מערכת יותר רצינית.

⚠️ חשוב ⚠️

⚠️לא לשכוח לכבות את המכונה בסיום המשחקים כדי להמנע מחיובים נוספים ואם אתם לא מתכוונים להשתמש בה יותר לעולם – לעשות לה Terminate.

סיכום

כמתכנת, אני אוהב הרבה פעמים לטנף את הידיים בקוד ולראות ״איך דברים עובדים״ במקביל ללימוד התיאוריה. עולם למידת המכונה והבינה המלאכותית הוא עולם עצום, אבל לא חייבים להיות בקיאים בו כדי לשחק איתו לפחות באופן שטחי. אם תמיד התבאסתם כשראיתם שיש כל מיני מודלים שיצאו ולא הייתם סגורים על איך לבחון אותם – מכונה של EC2 יכולה להיות ממש שימושית במשחק הראשוני.

פוסטים נוספים שכדאי לקרוא

פיתוח ב-JavaScript

Axios interceptors

תכנון נכון של קריאות AJAX באפליקציה ריאקטית וניהול השגיאות או ההצלחות עם פיצ׳ר נחמד של axios

גלילה לראש העמוד