교육이 완료되었을 때 또는 두 개의 추가 코드 라인으로 프로세스 중에 충돌 할 때 알림을받을 수있는 작은 라이브러리.
딥 러닝 모델을 훈련 할 때는 조기 정지를 사용하는 것이 일반적입니다. 대략적인 추정치 외에도 훈련이 완료되는시기를 예측하기가 어렵습니다. 따라서 교육에 대한 자동 알림을 설정하는 것이 흥미로울 수 있습니다. 예기치 않은 이유로 과정의 중간에 교육이 충돌 할 때도 알림을받는 것도 흥미 롭습니다.
pip 또는 이와 동등한 상태로 설치하십시오.
pip install knockknock이 코드는 Python> = 3.6으로 만 테스트되었습니다.
라이브러리는 최소한의 코드 수정으로 원활한 방식으로 사용하도록 설계되었습니다. 기본 기능 호출 위에 데코레이터를 추가하면됩니다. 리턴 값 (하나가있는 경우)도 알림에보고됩니다.
현재 알림을 설정하는 12 가지 방법이 있습니다.
| 플랫폼 | 외부 기고자 |
|---|---|
| 이메일 | - |
| 느슨하게 | - |
| 전보 | - |
| 마이크로 소프트 팀 | @noklam |
| 문자 메시지 | @abhishekkrthakur |
| 불화 | @watkinsm |
| 데스크탑 | @atakanyenel @eyalmazuz |
| 행렬 | @jcklie |
| 아마존 차임 | @Prabhakar267 |
| Dingtalk | @wuutiing |
| 로케치 | @radao |
| Wechat 작업 | @jcyk |
이 서비스는 yagmail a 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> .
Telegram Messenger를 사용하여 알림을받을 수도 있습니다. Telegram에서 제공 한 세 단계를 따라 여기에서 자신의 알림 봇을 만들고 API 액세스 TOKEN 저장해야합니다.
Telegram Bots는 부끄러워서 첫 번째 메시지를 보낼 수 없으므로 첫 번째 단계를 수행해야합니다. 첫 번째 메시지를 보내면 https://api.telegram.org/bot<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 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를 사용하려면 알림 서버를 설치해야합니다. 계피, 심해, 깨달음, 그놈, 그놈 플래시백 및 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> 입니다. 또한 메시지가 전송되는 객실 별명을 지정해야합니다. 폭동의 별칭을 얻으려면 사용하려는 방을 만들고 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을 사용하여 알림을받을 수도 있습니다. Chime Room 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>] .
Dingtalk는 이제 @wuutiing 덕분에 지원되었습니다. Dingtalk Chatroom Robot의 Webhook URL 및 Secret/Keywords (Chatroom 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>"] .
Rockethat을 사용하여 알림을받을 수 있습니다. 알림을 게시하기 전에 다음이 필요합니다.
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 덕분에 Wechat Work가 지원됩니다. 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는 로컬 순위 변수를 사용하여 프로세스에 묶여 있습니다. Knockknock은 프로세스 수준에서 작동하기 때문에 8 GPU를 사용하는 경우 처음에는 8 개의 알림과 8 개의 알림을 얻을 수 있습니다. 오류를 제외하고는 마스터 프로세스 만 보낼 수 있으므로 처음에는 한 개의 알림과 끝에 알림을받을 수 있습니다.
참고 : Pytorch에서는 torch.distributed.launch 의 출시가 각 프로세스에 대해 순위 환경 변수를 설정합니다 (여기 참조). 이것은 마스터 프로세스를 감지하는 데 사용되며, 현재로서는 내가 생각해 낸 유일한 단순한 방법입니다. 불행히도, 이것은 모든 플랫폼에서 일반적인 것이 아니라 문제/PR에서 분산 교육을 처리하는 더 똑똑하고 더 나은 방법에 대해 기꺼이 논의 할 것입니다.