6 ספריות פיתון לעיבוד מקביל

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

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

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

לפעמים העבודה דורשת הפצת עבודה לא רק על פני מספר ליבות , אלא גם על מספר מכונות . לשם נכנסות שש ספריות ומסגרות ה- Python הללו. כל שש ערכות הכלים של Python להלן מאפשרות לך לקחת יישום Python קיים ולהפיץ את העבודה על מספר ליבות, מספר מכונות או שניהם.

קֶרֶן

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

התחביר של ריי הוא מינימלי, כך שאינך צריך לעבד מחדש אפליקציות קיימות בהרחבה כדי להקביל אותן. @ray.remoteהמעצב מפיץ כי פונקציה על פני כל צומת זמינים באשכול ריי, עם פרמטרים שצוינו אופציונאלי עבור כמה מעבדים או GPUs להשתמש. התוצאות של כל פונקציה מבוזרת מוחזרות כאובייקטים של Python, כך שהן קלות לניהול ואחסון, וכמות ההעתקות על פני הצמתים או בתוך הצמתים נשמרת למינימום. תכונה אחרונה זו שימושית כאשר מתמודדים עם מערכי NumPy, למשל.

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

סרטון קשור: שימוש multiprocessingלזרז את פייתון

Dask

מבחוץ, דסק נראה כמו ריי. גם זו ספרייה למחשוב מקבילי מבוזר בפייתון, עם מערכת תזמון משימות משלה, מודעות למסגרות נתונים של פייתון כמו NumPy, ויכולת להתמקד ממכונה אחת לרבים.

Dask עובד בשתי דרכים בסיסיות. הראשון הוא באמצעות מבני נתונים מקבילים - למעשה, הגרסאות של Dask של מערכי NumPy, רשימות או Pandas DataFrames. החלף את גרסאות ה- Dask של קונסטרוקציות אלה לברירות המחדל שלהן, ו- Dask תפיץ באופן אוטומטי את הביצוע שלהן על פני האשכול שלך. זה בדרך כלל כרוך במעט יותר משינוי שם הייבוא, אך לעתים עשוי לדרוש שכתוב כדי לעבוד לחלוטין.

הדרך השנייה היא באמצעות מנגנוני ההקבלה הנמוכים של Dask, כולל מעצבי פונקציות, המפרסים עבודות על פני צמתים ומחזירים תוצאות באופן סינכרוני (מצב "מיידי") או לא סינכרוני ("עצלן"). ניתן לערבב את שני המצבים לפי הצורך.

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

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

להתעלם

Dispy מאפשר לך להפיץ תוכניות פיתון שלמות או רק פונקציות בודדות על פני מקבץ של מכונות לביצוע במקביל. היא משתמשת במנגנונים מקומיים לפלטפורמה לתקשורת רשת כדי לשמור על דברים מהירים ויעילים, כך שמכונות לינוקס, MacOS ו- Windows פועלות באותה מידה.

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

Pandaral·lel

Pandaral·lel, כשמו כן הוא, היא דרך להקביל עבודות פנדה על פני מספר צמתים. החיסרון הוא ש- Pandaral·lel עובד רק  עם Pandas. אבל אם Pandas הוא מה שאתה משתמש בו, וכל מה שאתה צריך זה דרך להאיץ עבודות Pandas על פני מספר ליבות במחשב אחד, Pandaral·lel מתמקדת בלייזר במשימה.

שים לב שבעוד ש- Pandaral·lel אכן פועל ב- Windows, הוא יפעל רק מהפעלות Python שהושקו במערכת המשנה של Windows עבור Linux. משתמשי MacOS ו- Linux יכולים להריץ את Pandaral·lel כפי שהוא. 

Ipyparallel

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

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

מחברות Jupyter תומכות ב"פקודות קסם "לפעולות אפשריות רק בסביבת מחברות. Ipyparallel מוסיף כמה פקודות קסם משלו. לדוגמה, אתה יכול לרשום לפני כל משפט Python %pxכדי להקביל אותו באופן אוטומטי.

ג'ובליב

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

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

Joblib כולל מטמון דיסק שקוף לאובייקטים של פייתון שנוצרו על ידי עבודות חישוב. מטמון זה לא רק עוזר ל- Joblib להימנע מחזרה על עבודה, כפי שצוין לעיל, אלא יכול לשמש גם להשעה ולחידוש עבודות ארוכות טווח, או להפסיק מקום בו הופסקה עבודה לאחר קריסה. המטמון מותאם בצורה חכמה גם לאובייקטים גדולים כמו מערכי NumPy. ניתן לשתף אזורים של נתונים בזיכרון בין תהליכים באותה מערכת באמצעות numpy.memmap.

דבר אחד שג'ובליב לא מציע הוא דרך להפיץ משרות על פני מספר מחשבים נפרדים. בתיאוריה ניתן להשתמש בצינור של Joblib לשם כך, אך כנראה קל יותר להשתמש במסגרת אחרת שתומכת בכך באופן מקורי. 

קרא עוד על Python

  • מה זה פיתון? תכנות עוצמתי ואינטואיטיבי
  • מה זה PyPy? פיתון מהיר יותר ללא כאבים
  • מה זה סיטון? פיתון במהירות C
  • מדריך Cython: כיצד להאיץ את Python
  • כיצד להתקין את פייתון בדרך החכמה
  • התכונות החדשות הטובות ביותר ב- Python 3.8
  • ניהול פרויקטים טוב יותר של פייתון עם שירה
  • Virtualenv ו- venv: הסברים על סביבות וירטואליות של Python
  • Python virtualenv ו- venv do's and donts
  • הסבר על השחלת פיתון ותהליכי משנה
  • כיצד להשתמש בבאגים של פייתון
  • כיצד להשתמש ב- timeit לפרופיל קוד פייתון
  • כיצד להשתמש ב- cProfile לפרופיל קוד פייתון
  • התחל לעבוד עם אסינכרון בפייתון
  • כיצד להשתמש ב- asyncio בפייתון
  • כיצד להמיר את פייתון ל- JavaScript (ובחזרה)
  • Python 2 EOL: איך לשרוד את סוף Python 2
  • 12 פיתונים לכל צורך בתכנות
  • 24 ספריות פייתון לכל מפתח פיתון
  • 7 מזהי פייתון מתוקים שאולי פספסתם
  • 3 ליקויים גדולים בפייתון - והפתרונות שלהם
  • 13 מסגרות אינטרנט של פייתון בהשוואה
  • 4 מסגרות מבחן פייתון כדי למחוץ את החרקים שלך
  • 6 תכונות פייתון חדשות נהדרות שאתה לא רוצה לפספס
  • 5 הפצות פיתון לשליטה בלמידת מכונה
  • 8 ספריות פיתון נהדרות לעיבוד שפות טבעיות