トレーニングが完了したとき、または2つの追加のコード行でプロセス中にクラッシュしたときに通知を取得するための小さなライブラリ。
深い学習モデルをトレーニングするときは、早期停止を使用することが一般的です。大まかな見積もりとは別に、トレーニングがいつ終了するかを予測することは困難です。したがって、トレーニング用の自動通知をセットアップすることは興味深いことです。また、予期せぬ理由でトレーニングがプロセスの途中でクラッシュするときに通知されることも興味深いです。
pipまたは同等のインストール。
pip install knockknockこのコードは、Python> = 3.6でのみテストされています。
ライブラリは、コード変更を最小限に抑えて、シームレスな方法で使用するように設計されています。メイン関数コールの上にデコレーターを追加するだけです。返品値(1つがある場合)も通知に報告されます。
現在、通知をセットアップする方法が12あります。
| プラットフォーム | 外部貢献者 |
|---|---|
| メール | - |
| スラック | - |
| 電報 | - |
| マイクロソフトチーム | @Noklam |
| テキストメッセージ | @abhishekkrthakur |
| 不和 | @watkinsm |
| デスクトップ | @atakanyenel @eyalmazuz |
| マトリックス | @jcklie |
| アマゾンチャイム | @prabhakar267 |
| ディンターク | @wuutiing |
| Rocketchat | @Radao |
| wechat作業 | @jcyk |
このサービスは、Gmail/SMTPクライアントのYagmailに依存しています。使用するには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>タグを付けるオプションの引数を指定することもできます。
Telegram Messengerを使用して通知を取得することもできます。ここでTelegramで提供された3つのステップに従って、APIアクセスTOKENを保存することにより、まず独自の通知ボットを作成する必要があります。
電報ボットは恥ずかしがり屋で、最初のメッセージを送信できないため、最初のステップを実行する必要があります。最初のメッセージを送信することにより、 https://api.telegram.org/bot<YourBOTToken>/getUpdates message['chat']['id']にアクセスして、必要な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つのテキストメッセージを送信すると、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 Channelの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を使用するには、通知サーバーをインストールする必要があります。シナモン、ディープン、悟り、GNOME、GNOMEフラッシュバック、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のおかげで、Matrixを介して通知を送信できます。 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を使用して通知を取得することもできます。チャイムルームのWebHook URLを取得する必要があります。
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 Chatroom RobotのWebhook URLとSecret/キーワード(そのうちの1つはチャットルームロボットの作成時に設定されます)を考えると、通知が送信され、そのチャットルームのいずれかに到達します。
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 value2つのオプションの引数を指定することもできます。
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のおかげで、WeChat作業がサポートされています。 WeChat Work Chatroom RobotのWebhook URLを考えると、通知が送信され、そのチャットルームの誰にでも連絡します。
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はローカルランク変数を使用してプロセスにバインドされます。ノックノックはプロセスレベルで動作するため、8つのGPUを使用している場合、最後に8つの通知と8つの通知を取得します...エラーを除いて、マスタープロセスのみが通知を送信できるため、最初に1つの通知と1つの通知を受け取ることができます。
注: Pytorchでは、 torch.distributed.launchの発売は、各プロセスのランク環境変数を設定します(こちらを参照)。これはマスタープロセスを検出するために使用され、今のところ、私が思いついた唯一の簡単な方法です。残念ながら、これはすべてのプラットフォームに一般的であることを意図したものではありませんが、Issue/PRで分散トレーニングを処理するためのよりスマート/より良い方法について喜んで議論します。