Perpustakaan kecil untuk mendapatkan pemberitahuan saat pelatihan Anda selesai atau saat macet selama proses dengan dua baris kode tambahan.
Saat melatih model pembelajaran yang mendalam, adalah umum untuk menggunakan penghentian lebih awal. Terlepas dari perkiraan kasar, sulit untuk memprediksi kapan pelatihan akan selesai. Dengan demikian, mungkin menarik untuk mengatur pemberitahuan otomatis untuk pelatihan Anda. Menarik juga untuk diberi tahu ketika pelatihan Anda macet di tengah proses karena alasan yang tidak terduga.
Instal dengan pip atau setara.
pip install knockknockKode ini hanya diuji dengan Python> = 3.6.
Perpustakaan dirancang untuk digunakan dengan cara yang mulus, dengan modifikasi kode minimal: Anda hanya perlu menambahkan dekorator di atas panggilan fungsi utama Anda. Nilai pengembalian (jika ada) juga dilaporkan dalam pemberitahuan.
Saat ini ada dua belas cara untuk mengatur pemberitahuan:
| Platform | Kontributor Eksternal |
|---|---|
| - | |
| Kendur | - |
| Telegram | - |
| Tim Microsoft | @noklam |
| Pesan teks | @Abhishekkrthakur |
| Perselisihan | @watkinsm |
| Desktop | @atakanyenel @eyalmazuz |
| Matriks | @jcklie |
| Amazon Chime | @prabhakar267 |
| Dingtalk | @wuutiing |
| Rocketchat | @radao |
| Pekerjaan weChat | @jcyk |
Layanan ini bergantung pada Yagmail klien Gmail/SMTP. Anda akan memerlukan alamat email Gmail untuk menggunakannya (Anda dapat mengatur satu di sini, gratis). Saya sarankan membuat yang baru (bukan yang biasa) karena Anda harus memodifikasi pengaturan keamanan akun untuk memungkinkan perpustakaan Python mengaksesnya dengan menyalakan aplikasi yang kurang aman.
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 Jika sender_email tidak ditentukan, maka email pertama di recipient_emails akan digunakan sebagai email pengirim.
Perhatikan bahwa peluncuran ini akan meminta Anda untuk kata sandi email pengirim. Ini akan disimpan dengan aman dalam layanan sistem keyring melalui perpustakaan Python keyring .
Demikian pula, Anda juga dapat menggunakan Slack untuk mendapatkan pemberitahuan. Anda harus mendapatkan URL Webhook Room Slack dan secara opsional ID pengguna Anda (jika Anda ingin memberi tag pada diri sendiri atau orang lain).
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 Anda juga dapat menentukan argumen opsional untuk menandai orang tertentu: 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 Anda juga dapat menentukan argumen opsional untuk menandai orang-orang tertentu: --user-mentions <your_slack_id>,<grandma's_slack_id> .
Anda juga dapat menggunakan Telegram Messenger untuk mendapatkan pemberitahuan. Pertama -tama Anda harus membuat bot pemberitahuan sendiri dengan mengikuti tiga langkah yang disediakan oleh Telegram di sini dan menyimpan TOKEN akses API Anda.
Telegram bot pemalu dan tidak dapat mengirim pesan pertama sehingga Anda harus melakukan langkah pertama. Dengan mengirim pesan pertama, Anda akan bisa mendapatkan chat_id yang diperlukan (identifikasi ruang pesan Anda) dengan mengunjungi https://api.telegram.org/bot<YourBOTToken>/getUpdates dan dapatkan int di bawah 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 10Berkat @noklam, Anda juga dapat menggunakan tim Microsoft untuk mendapatkan notifikasi. Anda harus mendapatkan URL Webhook saluran tim Anda.
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 Anda juga dapat menentukan argumen opsional untuk menandai orang tertentu: user_mentions=[<your_teams_id>, <grandma's_teams_id>] .
Terima kasih kepada @abhishekkrthakur, Anda dapat menggunakan Twilio untuk mengirim pemberitahuan pesan teks. Anda harus menyiapkan akun Twilio di sini, yang merupakan layanan berbayar dengan harga kompetitif: misalnya di AS, mendapatkan nomor baru dan mengirim satu pesan teks melalui layanan ini masing -masing berharga $ 1,00 dan $ 0,0075. Anda harus mendapatkan (a) nomor telepon, (b) akun Anda SID dan (c) token otentikasi Anda. Beberapa detail di sini.
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 10Berkat @WatKinsm, Anda juga dapat menggunakan perselisihan untuk mendapatkan pemberitahuan. Anda hanya harus mendapatkan URL Webhook Saluran Perselisihan Anda.
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 10Anda juga dapat diberi tahu dari pemberitahuan desktop. Saat ini hanya tersedia untuk MacOS dan Linux dan Windows 10. Untuk Linux menggunakan perintah NOFITY-SEND yang menggunakan libnotify, untuk menggunakan libnotify, Anda harus menginstal server pemberitahuan. Cinnamon, Deepin, Pencerahan, GNOME, GNOME Flashback dan KDE Plasma menggunakan implementasi mereka sendiri untuk menampilkan pemberitahuan. Di lingkungan desktop lain, server pemberitahuan perlu diluncurkan menggunakan opsi "AutoStart" WM/DE Anda.
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 Terima kasih kepada @jcklie, Anda dapat mengirim pemberitahuan melalui matriks. HomeServer adalah server tempat pengguna Anda yang akan mengirim pesan terdaftar. Jangan lupa skema untuk URL ( http atau https ). Anda harus mendapatkan token akses untuk bot atau pengguna Anda sendiri. Cara termudah untuk mendapatkannya adalah dengan melihat ke dalam kerusuhan yang melihat di pengaturan kerusuhan, Help & About , di bagian bawah adalah: Access Token:<click to reveal> . Anda juga perlu menentukan alias kamar yang dikirim pesan. Untuk mendapatkan alias dalam kerusuhan, buat kamar yang ingin Anda gunakan, lalu buka pengaturan kamar di bawah Room Addresses dan tambahkan alias.
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 10Terima kasih kepada @prabhakar267, Anda juga dapat menggunakan Amazon Chime untuk mendapatkan pemberitahuan. Anda harus mendapatkan URL Webhook Room Chime Anda.
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 Anda juga dapat menentukan argumen opsional untuk menandai orang tertentu: user_mentions=[<your_alias>, <grandma's_alias>] .
DingTalk sekarang didukung berkat @wuutiing. Dingtalk robot dingtalk robot webhook dan kata kunci/kata kunci (setidaknya satu dari mereka diatur saat membuat robot ruang obrolan), notifikasi Anda akan dikirim untuk menjangkau siapa pun di ruang obrolan itu.
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 Anda juga dapat menentukan argumen opsional untuk orang -orang tertentu: user_mentions=["<list_of_phonenumbers_who_you_want_to_tag>"] .
Anda dapat menggunakan Rocketchat untuk mendapatkan pemberitahuan. Anda akan membutuhkan yang berikut sebelum Anda dapat memposting pemberitahuan:
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 valueAnda juga dapat menentukan dua argumen opsional:
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 10Pekerjaan WeChat sekarang didukung berkat @jcyk. Mengingat WeChat Work Chatroom Webhook URL, pemberitahuan Anda akan dikirim untuk menjangkau siapa pun di ruang obrolan itu.
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 Anda juga dapat menentukan argumen opsional untuk menandai orang tertentu: user-mentions=["<list_of_userids_you_want_to_tag>"] dan/atau user-mentions-mobile=["<list_of_phonenumbers_you_want_to_tag>"] .
Saat menggunakan pelatihan terdistribusi, GPU terikat pada prosesnya menggunakan variabel peringkat lokal. Karena Knockknock bekerja pada tingkat proses, jika Anda menggunakan 8 GPU, Anda akan mendapatkan 8 pemberitahuan di awal dan 8 pemberitahuan di akhir ... untuk menghindari itu, kecuali kesalahan, hanya proses utama yang diizinkan untuk mengirim pemberitahuan sehingga Anda hanya menerima satu pemberitahuan di awal dan satu pemberitahuan di akhir.
Catatan: Di Pytorch, peluncuran torch.distributed.launch mengatur variabel lingkungan peringkat untuk setiap proses (lihat di sini). Ini digunakan untuk mendeteksi proses master, dan untuk saat ini, satu -satunya cara sederhana yang saya datangi. Sayangnya, ini tidak dimaksudkan untuk menjadi umum untuk semua platform tetapi saya akan dengan senang hati membahas cara yang lebih cerdas/lebih baik untuk menangani pelatihan terdistribusi dalam suatu masalah/PR.