مكتبة صغيرة للحصول على إشعار عند اكتمال التدريب الخاص بك أو عند تعطله أثناء العملية مع سطرين إضافيين من التعليمات البرمجية.
عند تدريب نماذج التعلم العميق ، من الشائع استخدام التوقف المبكر. بصرف النظر عن تقدير تقريبي ، من الصعب التنبؤ بموعد الانتهاء من التدريب. وبالتالي ، قد يكون من المثير للاهتمام إعداد إشعارات تلقائية لتدريبك. من المثير للاهتمام أيضًا أن يتم إخطاره عندما يتعطل التدريب في منتصف العملية لأسباب غير متوقعة.
تثبيت مع pip أو ما يعادلها.
pip install knockknockتم اختبار هذا الرمز فقط مع Python> = 3.6.
تم تصميم المكتبة لاستخدامها بطريقة سلسة ، مع الحد الأدنى من تعديل التعليمات البرمجية: تحتاج فقط إلى إضافة ديكور في أعلى مكالمة الوظيفة الرئيسية. تم الإبلاغ عن قيمة الإرجاع (إذا كان هناك واحد) في الإخطار.
يوجد حاليًا اثني عشر طريقة لإعداد الإخطارات:
| منصة | المساهمون الخارجيون |
|---|---|
| بريد إلكتروني | - |
| الركود | - |
| برقية | - |
| فرق Microsoft | @نوكلام |
| رسالة نصية | abhishekkrthakur |
| خلاف | watkinsm |
| سطح المكتب | atakanyenel yalmazuz |
| المصفوفة | jcklie |
| أمازون رنين | @Prabhakar267 |
| dingtalk | wuutiing |
| روكتشات | Radao |
| عمل WeChat | @jcyk |
تعتمد الخدمة على Yagmail عميل Gmail/SMTP. ستحتاج إلى عنوان بريد إلكتروني Gmail لاستخدامه (يمكنك إعداد واحد هنا ، إنه مجاني). أوصي بإنشاء واحدة جديدة (بدلاً من واحدة معتادة) نظرًا لأنك ستضطر إلى تعديل إعدادات أمان الحساب للسماح لمكتبة Python بالوصول إليها عن طريق تشغيل تطبيقات أقل أمانًا.
from knockknock import email_sender
@ email_sender ( recipient_emails = [ "<[email protected]>" , "<[email protected]>" ], sender_email = "<grandma'[email protected]>" )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { 'loss' : 0.9 } # Optional return value knockknock email
--recipient-emails < [email protected] > , < [email protected] >
--sender-email < grandma ' [email protected]>
sleep 10 إذا لم يتم تحديد sender_email ، فسيتم استخدام البريد الإلكتروني الأول في recipient_emails كبريد بريد إلكتروني للمرسل.
لاحظ أن إطلاق هذا سوف يطلب منك كلمة مرور البريد الإلكتروني للمرسل. سيتم تخزينه بأمان في خدمة مفاتيح النظام من خلال مكتبة بيثون keyring .
وبالمثل ، يمكنك أيضًا استخدام Slack للحصول على الإخطارات. سيتعين عليك الحصول على عنوان URL لـ Slack Room Webhook واختياري معرف المستخدم الخاص بك (إذا كنت ترغب في وضع علامة على نفسك أو شخص آخر).
from knockknock import slack_sender
webhook_url = "<webhook_url_to_your_slack_room>"
@ slack_sender ( webhook_url = webhook_url , channel = "<your_favorite_slack_channel>" )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { 'loss' : 0.9 } # Optional return value يمكنك أيضًا تحديد وسيطة اختيارية لوضع علامة على الأشخاص المحددين: user_mentions=[<your_slack_id>, <grandma's_slack_id>] .
knockknock slack
--webhook-url < webhook_url_to_your_slack_room >
--channel < your_favorite_slack_channel >
sleep 10 يمكنك أيضًا تحديد وسيطة اختيارية لوضع علامة على الأشخاص المحددين: --user-mentions <your_slack_id>,<grandma's_slack_id> .
يمكنك أيضًا استخدام Telegram Messenger للحصول على إشعارات. سيتعين عليك أولاً إنشاء روبوت الإخطار الخاص بك باتباع الخطوات الثلاث التي توفرها Telegram هنا وحفظ TOKEN API Access الخاص بك.
روبوتات Telegram خجولة ولا يمكن إرسال الرسالة الأولى ، لذا عليك القيام بالخطوة الأولى. من خلال إرسال الرسالة الأولى ، ستتمكن من الحصول على chat_id المطلوب (تحديد غرفة المراسلة الخاصة بك) من خلال زيارة https://api.telegram.org/bot<YourBOTToken>/getUpdates والحصول على int ضمن message['chat']['id'] .
from knockknock import telegram_sender
CHAT_ID : int = < your_messaging_room_id >
@ telegram_sender ( token = "<your_api_token>" , chat_id = CHAT_ID )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { 'loss' : 0.9 } # Optional return value knockknock telegram
--token < your_api_token >
--chat-id < your_messaging_room_id >
sleep 10بفضل Noklam ، يمكنك أيضًا استخدام فرق Microsoft للحصول على إشعارات. سيتعين عليك الحصول على عنوان URL لقناة WebHook.
from knockknock import teams_sender
@ teams_sender ( token = "<webhook_url_to_your_teams_channel>" )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10 )
return { 'loss' : 0.9 } # Optional return value knockknock teams
--webhook-url < webhook_url_to_your_teams_channel >
sleep 10 يمكنك أيضًا تحديد وسيطة اختيارية لوضع علامة على الأشخاص المحددين: user_mentions=[<your_teams_id>, <grandma's_teams_id>] .
بفضل @abhishekkrthakur ، يمكنك استخدام Twilio لإرسال إشعارات الرسائل النصية. سيتعين عليك إعداد حساب Twilio هنا ، والذي يتم دفعه بالخدمة ذات الأسعار التنافسية: على سبيل المثال في الولايات المتحدة ، والحصول على رقم جديد وإرسال رسالة نصية واحدة من خلال هذه الخدمة على التوالي 1.00 دولار و 0.0075 دولار. ستحتاج إلى الحصول على (أ) رقم هاتف ، (ب) حسابك SID و (ج) رمز المصادقة الخاص بك. بعض التفاصيل هنا.
from knockknock import sms_sender
ACCOUNT_SID : str = "<your_account_sid>"
AUTH_TOKEN : str = "<your_auth_token>"
@ sms_sender ( account_sid = ACCOUNT_SID , auth_token = AUTH_TOKEN , recipient_number = "<recipient's_number>" , sender_number = "<sender's_number>" )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10 )
return { 'loss' : 0.9 } # Optional return value knockknock sms
--account-sid < your_account_sid >
--auth-token < your_account_auth_token >
--recipient-number < recipient_number >
--sender-number < sender_number >
sleep 10بفضل watkinsm ، يمكنك أيضًا استخدام Discord للحصول على إشعارات. سيكون عليك فقط الحصول على عنوان URL الخاص بقناة Discord الخاصة بك.
from knockknock import discord_sender
webhook_url = "<webhook_url_to_your_discord_channel>"
@ discord_sender ( webhook_url = webhook_url )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { 'loss' : 0.9 } # Optional return value knockknock discord
--webhook-url < webhook_url_to_your_discord_channel >
sleep 10يمكنك أيضًا الحصول على إخطار من إخطار سطح المكتب. إنه متوفر حاليًا فقط لـ MacOS و Linux و Windows 10. بالنسبة إلى Linux ، فإنه يستخدم الأمر nofity-send الذي يستخدم libnotify ، من أجل استخدام libnotify ، يجب عليك تثبيت خادم إشعار. يستخدم القرفة ، العميق ، التنوير ، جنوم ، Gnome Flashback و KDE Plasma تطبيقاتها الخاصة لعرض الإخطارات. في بيئات سطح المكتب الأخرى ، يجب تشغيل خادم الإخطار باستخدام خيار "Autostart" الخاص بـ WM/DE.
from knockknock import desktop_sender
@ desktop_sender ( title = "Knockknock Desktop Notifier" )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { "loss" : 0.9 }knockknock desktop
--title ' Knockknock Desktop Notifier '
sleep 2 بفضل @jcklie ، يمكنك إرسال إشعارات عبر Matrix. HomeServer هو الخادم الذي يتم تسجيله على المستخدم الذي سيرسل الرسائل. لا تنسى مخطط عنوان URL ( http أو https ). سيتعين عليك الحصول على رمز الوصول لروبوت أو المستخدم الخاص بك. أسهل طريقة للحصول على ذلك هي النظر إلى أعمال الشغب التي تبحث في إعدادات أعمال الشغب ، Help & About ، أسفل الجزء السفلي: Access Token:<click to reveal> . تحتاج أيضًا إلى تحديد الاسم المستعار للغرفة التي يتم إرسال الرسائل إليها. للحصول على الاسم المستعار في أعمال الشغب ، قم بإنشاء غرفة تريد استخدامها ، ثم افتح إعدادات الغرفة تحت Room Addresses وإضافة اسم مستعار.
from knockknock import matrix_sender
HOMESERVER = "<url_to_your_home_server>" # e.g. https://matrix.org
TOKEN = "<your_auth_token>" # e.g. WiTyGizlr8ntvBXdFfZLctyY
ROOM = "<room_alias" # e.g. #knockknock:matrix.org
@ matrix_sender ( homeserver = HOMESERVER , token = TOKEN , room = ROOM )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { 'loss' : 0.9 } # Optional return value knockknock matrix
--homeserver < homeserver >
--token < token >
--room < room >
sleep 10بفضل @prabhakar267 ، يمكنك أيضًا استخدام أمازون تنين للحصول على إشعارات. سيتعين عليك الحصول على عنوان URL Webhook Room الخاص بك.
from knockknock import chime_sender
@ chime_sender ( webhook_url = "<webhook_url_to_your_chime_room>" )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10 )
return { 'loss' : 0.9 } # Optional return value knockknock chime
--webhook-url < webhook_url_to_your_chime_room >
sleep 10 يمكنك أيضًا تحديد وسيطة اختيارية لوضع علامة على الأشخاص المحددين: user_mentions=[<your_alias>, <grandma's_alias>] .
يتم الآن دعم DingTalk بفضل Wuutiing. بالنظر إلى عنوان URL لـ Webhook Robot الخاص بـ DingTalk Robot والكلمات السرية/الرئيسية (يتم تعيين واحد منهم على الأقل عند إنشاء روبوت غرفة الدردشة) ، سيتم إرسال إشعاراتك للوصول إلى أي واحد في غرفة الدردشة هذه.
from knockknock import dingtalk_sender
webhook_url = "<webhook_url_to_your_dingtalk_chatroom_robot>"
@ dingtalk_sender ( webhook_url = webhook_url , secret = "<your_robot_secret_if_set>" , keywords = [ "<list_of_keywords_if_set>" ])
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { 'loss' : 0.9 } # Optional return value knockknock dingtalk
--webhook-url < webhook_url_to_your_dingtalk_chatroom_robot >
--secret < your_robot_secret_if_set >
sleep 10 يمكنك أيضًا تحديد وسيطة اختيارية إلى أشخاص محددين: user_mentions=["<list_of_phonenumbers_who_you_want_to_tag>"] .
يمكنك استخدام Rocketchat للحصول على إشعارات. ستحتاج إلى ما يلي قبل أن تتمكن من نشر الإخطارات:
from knockknock import rocketchat_sender
@ rocketchat_sender (
rocketchat_server_url = "<url_to_your_rocketchat_server>" ,
rocketchat_user_id = "<your_rocketchat_user_id>" ,
rocketchat_auth_token = "<your_rocketchat_auth_token>" ,
channel = "<channel_name>" )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { 'loss' : 0.9 } # Optional return valueيمكنك أيضًا تحديد وسيطتين اختياريتين:
user_mentions=[<your_user_name>, <grandma's_user_name>]alias="My Alias" knockknock rocketchat
--rocketchat-server-url < url_to_your_rocketchat_server >
--rocketchat-user-id < your_rocketchat_user_id >
--rocketchat-auth-token < your_rocketchat_auth_token >
--channel < channel_name >
sleep 10يتم الآن دعم Wechat Work بفضل @Jcyk. بالنظر إلى عنوان Webhook Webhook Robot الخاص بـ WeChat ، سيتم إرسال إشعاراتك للوصول إلى أي شخص في غرفة الدردشة هذه.
from knockknock import wechat_sender
webhook_url = "<webhook_url_to_your_wechat_work_chatroom_robot>"
@ wechat_sender ( webhook_url = webhook_url )
def train_your_nicest_model ( your_nicest_parameters ):
import time
time . sleep ( 10000 )
return { 'loss' : 0.9 } # Optional return value knockknock wechat
--webhook-url < webhook_url_to_your_wechat_work_chatroom_robot >
sleep 10 يمكنك أيضًا تحديد وسيطة اختيارية لوضع علامة على الأشخاص المحددين: user-mentions=["<list_of_userids_you_want_to_tag>"] و/أو user-mentions-mobile=["<list_of_phonenumbers_you_want_to_tag>"] .
عند استخدام التدريب الموزع ، يرتبط وحدة معالجة الرسومات بعملكها باستخدام متغير المرتبة المحلية. نظرًا لأن Knockknock يعمل على مستوى العملية ، إذا كنت تستخدم 8 وحدات معالجة الرسومات ، فستحصل على 8 إشعارات في البداية و 8 إشعارات في النهاية ... للتحايل على ذلك ، باستثناء الأخطاء ، يُسمح فقط للعملية الرئيسية بإرسال الإخطارات حتى تتلقى إشعارًا واحدًا فقط في البداية وإخطار واحد في النهاية.
ملاحظة: في Pytorch ، يقوم إطلاق torch.distributed.launch بإعداد متغير بيئة رتبة لكل عملية (انظر هنا). يستخدم هذا لاكتشاف العملية الرئيسية ، والآن ، الطريقة البسيطة الوحيدة التي توصلت إليها. لسوء الحظ ، لا يُقصد أن يكون هذا عامًا لجميع المنصات ، لكنني أناقش بسعادة طرقًا أكثر ذكاءً/أفضل للتعامل مع التدريب الموزع في القضية/العلاقات العامة.