Eine kleine Bibliothek, um eine Benachrichtigung zu erhalten, wenn Ihr Training abgeschlossen ist oder wenn sie während des Vorgangs mit zwei zusätzlichen Codezeilen abstürzt.
Beim Training von Deep -Learning -Modellen ist es üblich, frühes Stoppen zu verwenden. Abgesehen von einer groben Schätzung ist es schwierig vorherzusagen, wann das Training fertig ist. Daher kann es interessant sein, automatische Benachrichtigungen für Ihr Training einzurichten. Es ist auch interessant, benachrichtigt zu werden, wenn Ihr Training aus unerwarteten Gründen mitten im Prozess abstürzt.
Mit pip oder gleichwertig installieren.
pip install knockknockDieser Code wurde nur mit Python> = 3,6 getestet.
Die Bibliothek ist so ausgelegt, dass sie nahtlos verwendet werden kann, mit minimaler Codeänderung: Sie müssen nur einen Dekorator auf Ihrem Hauptfunktionsanruf hinzufügen. Der Rückgabewert (falls es einen gibt) wird auch in der Benachrichtigung angegeben.
Derzeit gibt es zwölf Möglichkeiten zum Einrichten von Benachrichtigungen:
| Plattform | Externe Mitwirkende |
|---|---|
| - - | |
| Locker | - - |
| Telegramm | - - |
| Microsoft Teams | @noklam |
| SMS | @abhishekkrThakur |
| Zwietracht | @Watkinsm |
| Desktop | @atakanyenel @eyalmazuz |
| Matrix | @jcklie |
| Amazon -Chime | @Prabhakar267 |
| Dingtalk | @Wuutiing |
| Rocketchat | @Radao |
| Wechat -Arbeit | @jcyk |
Der Dienst basiert auf Yagmail, einem Google Mail/SMTP -Client. Sie benötigen eine Google Mail -E -Mail -Adresse, um sie zu verwenden (Sie können hier eine einrichten, sie ist kostenlos). Ich empfehle, eine neue zu erstellen (anstatt dass Sie üblich sind), da Sie die Sicherheitseinstellungen des Kontos ändern müssen, damit die Python -Bibliothek darauf zugreifen kann, indem Sie weniger sichere Apps einschalten.
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 Wenn sender_email nicht angegeben ist, wird die erste E -Mail in recipient_emails als E -Mail des Absenders verwendet.
Beachten Sie, dass Sie zum Starten des Senders nach dem E -Mail -Passwort des Absenders aufgefordert werden. Es wird sicher im Systemschlüsselringdienst über die keyring -Python -Bibliothek gespeichert.
In ähnlicher Weise können Sie auch Slack verwenden, um Benachrichtigungen zu erhalten. Sie müssen Ihre Slack Room Webhook -URL und optional Ihre Benutzer -ID erhalten (wenn Sie sich selbst oder jemand anderem markieren möchten).
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 Sie können auch ein optionales Argument an bestimmte Personen angeben: 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 Sie können auch ein optionales Argument angeben, um bestimmte Personen zu markieren: --user-mentions <your_slack_id>,<grandma's_slack_id> .
Sie können auch Telegram Messenger verwenden, um Benachrichtigungen zu erhalten. Sie müssen zunächst Ihren eigenen Benachrichtigungsbot erstellen, indem Sie die drei von Telegram bereitgestellten Schritte hier befolgen und Ihr API -Zugriffs TOKEN speichern.
Telegramm -Bots sind schüchtern und können die erste Nachricht nicht senden, sodass Sie den ersten Schritt machen müssen. Durch das Senden der ersten Nachricht können Sie die erforderliche chat_id (Identifizierung Ihres Messaging -Raums) erhalten, indem Sie https://api.telegram.org/bot<YourBOTToken>/getUpdates besuchen und die int unter der message['chat']['id'] erhalten.
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 10Dank @noklam können Sie auch Microsoft -Teams verwenden, um Benachrichtigungen zu erhalten. Sie müssen Ihre Team -Kanal -Webhook -URL erhalten.
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 Sie können auch ein optionales Argument an bestimmte Personen angeben: user_mentions=[<your_teams_id>, <grandma's_teams_id>] .
Dank @abhishekkrThakur können Sie Twilio verwenden, um SMS -Benachrichtigungen zu senden. Sie müssen hier ein Twilio -Konto einrichten, das mit wettbewerbsfähigen Preisen gezahlt wird: Zum Beispiel in den USA kostet es 1,00 USD bzw. 0,0075 US -Dollar, eine neue Nummer zu erhalten und eine Textnachricht zu senden. Sie müssen (a) eine Telefonnummer, (b) Ihr Konto SID und (c) Ihr Authentifizierungs -Token erhalten. Einige Details hier.
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 10Dank @watkinsm können Sie auch Discord verwenden, um Benachrichtigungen zu erhalten. Sie müssen nur die Webhook -URL Ihres Discord -Kanals erhalten.
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 10Sie können auch von einer Desktop -Benachrichtigung benachrichtigt werden. Es ist derzeit nur für macOS und Linux und Windows 10 verfügbar. Für Linux verwendet es den Befehl noFity-send, der Libnotify verwendet. Um Libnotify zu verwenden, müssen Sie einen Benachrichtigungsserver installieren. Zimt, Deepin, Erleuchtung, Gnome, Gnome -Flashback und KDE -Plasma verwenden ihre eigenen Implementierungen, um Benachrichtigungen anzuzeigen. In anderen Desktop -Umgebungen muss der Benachrichtigungsserver mit der Option "Autostart" der WM/DE gestartet werden.
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 Dank @jcklie können Sie Benachrichtigungen über Matrix senden. Der Homeserver ist der Server, auf dem Ihr Benutzer Nachrichten senden. Vergessen Sie das Schema für die URL ( http oder https ) nicht. Sie müssen das Zugriffstoken für einen Bot oder Ihren eigenen Benutzer erhalten. Der einfachste Weg, es zu erhalten, besteht darin, auf den Aufstandseinstellungen, Help & About , unten auf den Aufruhr zu schauen,: Access Token:<click to reveal> . Sie müssen auch einen Raum -Alias angeben, an den Nachrichten gesendet werden. Um den Alias in Aufruhr zu erhalten, erstellen Sie einen Raum, den Sie verwenden möchten, und öffnen Sie die Raumeinstellungen unter Room Addresses und fügen Sie einen Alias hinzu.
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 10Dank @Prabhakar267 können Sie auch Amazon Chime verwenden, um Benachrichtigungen zu erhalten. Sie müssen Ihre CHIME Room Webhook -URL erhalten.
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 Sie können auch ein optionales Argument angeben, um bestimmte Personen zu markieren: user_mentions=[<your_alias>, <grandma's_alias>] .
Dingtalk wird jetzt dank @wuutiing unterstützt. Angesichts der Webhook -URL und der Webhook -URL und der Keywords von Dingtalk Chatroom (mindestens einer von ihnen wird beim Erstellen eines Chatroom -Roboters festgelegt) werden Ihre Benachrichtigungen gesendet, um einen in diesem Chatroom zu erreichen.
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 Sie können auch ein optionales Argument für bestimmte Personen angeben: user_mentions=["<list_of_phonenumbers_who_you_want_to_tag>"] .
Sie können Rocketchat verwenden, um Benachrichtigungen zu erhalten. Sie benötigen Folgendes, bevor Sie Benachrichtigungen veröffentlichen können:
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 valueSie können auch zwei optionale Argumente angeben:
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 10WeChat -Arbeit wird jetzt dank @jcyk unterstützt. Angesichts der Webhook -URL von WeChat Work Chatroom Roboter werden Ihre Benachrichtigungen gesendet, um jemanden in diesem Chatroom zu erreichen.
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 Sie können auch ein optionales Argument angeben, um bestimmte Personen zu markieren: user-mentions=["<list_of_userids_you_want_to_tag>"] und/oder user-mentions-mobile=["<list_of_phonenumbers_you_want_to_tag>"] .
Bei der Verwendung verteilter Schulungen ist eine GPU unter Verwendung der lokalen Rangvariablen an ihren Prozess gebunden. Da Knockknock auf der Prozessebene arbeitet, erhalten Sie, wenn Sie 8 GPUs verwenden, 8 Benachrichtigungen am Anfang und 8 Benachrichtigungen am Ende ... um zu umgehen, dass nur der Master -Prozess nur eine Benachrichtigung und eine Benachrichtigung am Ende erhalten darf.
HINWEIS: In Pytorch legt der Start von torch.distributed.launch eine Rangumgebungsvariable für jeden Prozess fest (siehe hier). Dies wird verwendet, um den Hauptprozess zu erkennen, und vorerst die einzige einfache Art, wie ich es mir ausgedacht habe. Leider soll dies nicht für alle Plattformen allgemein sein, aber ich würde gerne intelligenteren/besseren Möglichkeiten diskutieren, verteilte Schulungen in einem Problem/PR zu lösen.