一個小庫在完成培訓時或在此過程中使用另外兩行代碼崩潰時收到通知。
在訓練深度學習模型時,通常會儘早停止。除了粗略的估計外,很難預測培訓何時完成。因此,為您的培訓設置自動通知可能會很有趣。出於意外的原因,當您的培訓在過程中間崩潰時,被通知也很有趣。
使用pip或等效安裝。
pip install knockknock該代碼僅使用Python> = 3.6進行了測試。
該庫的設計旨在以無縫的方式使用,並進行最小的代碼修改:您只需要在主函數調用上添加裝飾器即可。通知中還報告了回報值(如果有一個)。
當前有十二種設置通知的方法:
| 平台 | 外部貢獻者 |
|---|---|
| 電子郵件 | - |
| 鬆弛 | - |
| 電報 | - |
| 微軟團隊 | @noklam |
| 簡訊 | @abhishekkrthakur |
| 不和諧 | @watkinsm |
| 桌面 | @atakanyenel @eyalmazuz |
| 矩陣 | @jcklie |
| 亞馬遜鐘 | @prabhakar267 |
| dingtalk | @wuutiing |
| Rocketchat | @radao |
| 微信工作 | @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 Python庫安全地存儲在系統鍵環服務中。
同樣,您也可以使用Slack獲取通知。您必須獲取Slack Room Webhook URL,並選擇您的用戶ID(如果您想標記自己或其他人)。
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> 。
您也可以使用電報使者獲取通知。首先,您必須按照此處的電報提供的三個步驟來創建自己的通知機器人,並保存API訪問TOKEN 。
電報機器人很害羞,無法發送第一條消息,因此您必須執行第一步。通過發送第一條消息,您可以通過訪問https://api.telegram.org/bot<YourBOTToken>/getUpdates yourbottoken>/getupdates來獲取chat_id (識別您的消息室),並在關鍵message['chat']['id']下獲取int 。
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團隊獲取通知。您必須獲取團隊頻道Webhook URL。
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美元。您需要獲取(a)電話號碼,(b)您的帳戶SID和(c)您的身份驗證令牌。這裡一些細節。
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獲取通知。您只需要獲取Discord頻道的Webhook URL即可。
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,它使用使用libnotify的Nofity-Send命令,以便使用libnotify,您必須安裝通知服務器。肉桂,陶丁,啟蒙,侏儒,侏儒閃回和KDE等離子體使用自己的實現來顯示通知。在其他桌面環境中,需要使用WM/DE的“ AutoStart”選項啟動通知服務器。
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,您可以通過矩陣發送通知。 HOMESERVER是您將要發送消息的用戶註冊的服務器。不要忘記URL的模式( http或https )。您必須獲得機器人或您自己的用戶的訪問令牌。獲取它的最簡單方法是查看在防暴設置中查看騷亂, Help & About ,底部是: Access Token:<click to reveal> 。您還需要指定向發送消息的房間別名。要獲取Riot的別名,請創建一個要使用的房間,然後在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,您也可以使用Amazon Chime獲取通知。您必須獲得鐘聲旋轉網址。
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>] 。
@wuutiing現在支持DingTalk。鑑於DingTalk聊天室機器人的Webhook URL和Secret/關鍵字(創建聊天室機器人時至少設置了其中一個),您的通知將被發送到該聊天室中的任何一個。
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由於@JCyk,現在支持微信工作。鑑於微信工作聊天室機器人的網絡旋轉網址,您的通知將被發送到該聊天室中的任何人。
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>"] 。
當使用分佈式培訓時,GPU使用局部排名變量綁定到其過程。由於KnockKnock在過程級別上工作,因此,如果您使用8個GPU,則在開始時您將收到8個通知,最後在8個通知中進行了通知...為了避免使用錯誤,除了錯誤,只有允許主過程發送通知,以便您在開始時只在開始時僅收到一個通知,最後一個通知。
注意:在pytorch中, torch.distributed.launch的啟動為每個過程設置了等級環境變量(請參見此處)。這用於檢測主過程,而目前,我想出的唯一簡單的方式。不幸的是,這並不是要在所有平台上都是一般的,但是我很樂意討論在問題/PR中處理分佈式培訓的更智能/更好的方法。