はじめに
timeoutだったり、メモリエラーだったり、実装ミスだったりで
コミットエラーになることがあります。
数時間コミットの完了を待った後にカーネルエラーとか出てると泣けます。。。(特に実装ミスの時)
なので、Kernelのコミットの状態をLINEに通知するようなコードを書きました。
文章だけだと寂しいので、スタンプも使います。
前提条件
・kaggleのAPIが使える状態であること。
・LINE notrifyでアクセストークンが払い出されていること。
ソース
import requests
import sys
from kaggle.api.kaggle_api_extended import KaggleApi
# https://www.kaggle.com/[kaggle_id]/[kernel_name] という構成です。
kaggle_id = "KAGGLE_ID"
kernel_name = ["KERNEL_NAME","KERNEL_NAME2"] # 複数のカーネルを通知するようにしています。
token = "YOUR_LINE_TOKEN"
def send_line_notification(message, line_token, stcID):
endpoint = 'https://notify-api.line.me/api/notify'
message = "\n{}".format(message)
stcPID = "2"
payload = {'message': message,
'stickerId': stcID,
'stickerPackageId': stcPID
}
headers = {'Authorization': 'Bearer {}'.format(line_token)}
requests.post(endpoint, data=payload, headers=headers)
def kernel_status_check(api, kaggle_id, kernel_name):
try:kernel_status = api.kernel_status(kaggle_id,kernel_name)
except: sys.exit(1)
if kernel_status["status"] == "complete":
send_line_notification(kernel_name + ":\nSuccessed",token,"144")
elif kernel_status["status"] == "running":
send_line_notification(kernel_name + ":\nRunning",token,"502")
else:
send_line_notification(kernel_name + ":\nFailed: \n" + kernel_status["failureMessage"],token,"154")
KaggleApi.competitions_list
api = KaggleApi()
api.authenticate()
for kname in kernel_name:
kernel_status_check(api, kaggle_id, kname)
あとはcronやタスクスケジューラなどで定期実行してください。
参考
・kaggleのAPI部分の参考にさせていただきました。
[「Kaggle API」を Python で実行してみた]
(https://doarakko.hatenablog.com/entry/kaggle_api_in_python)
・LineのAPI部分の参考にさせていただきました。
コピペで使える。Kaggleでの実験を効率化する小技まとめ