Open2
サブミット後の実行時間(Public LBのスコアが出るまで)がわかるコード
kaggleのコードコンペでは、実行時間の限度があり実行にかかる時間を知るのが重要。
サブミット後、次のコードを動かしておくことで、実行時間がわかる。
from kaggle.api.kaggle_api_extended import KaggleApi
import datetime
from datetime import timezone
import time
api = KaggleApi()
api.authenticate()
COMPETITION = '<コンペ名を入れる>'
result_ = api.competition_submissions(COMPETITION)[0]
latest_ref = str(result_) # 最新のサブミット番号
submit_time = result_.date
status = ''
while status != 'complete':
list_of_submission = api.competition_submissions(COMPETITION)
for result in list_of_submission:
if str(result.ref) == latest_ref:
break
status = result.status
now = datetime.datetime.now(timezone.utc).replace(tzinfo=None)
elapsed_time = int((now - submit_time).seconds / 60) + 1
if status == 'complete':
print('\r', f'run-time: {elapsed_time} min, LB: {result.publicScore}')
else:
print('\r', f'elapsed time: {elapsed_time} min', end='')
time.sleep(60)
output
実行中は、サブミットからの経過時間が表示される
実行が終了すると、実行時間とLBのスコアが表示される
メモ
出力をカスタマイズするときのためのメモ。
notebookのurlや名前も出力しておくと便利。
-
result.url
: notebookのurl -
result.fileName
: notebookの名前 -
result.errorDescription
: エラーコード
todo
-
コードを動かしてからの時間が表示されるようにする← 表示するようにしたtqdmのように表示できると良い
-
サブミット直後にこのコードを動かさないといけないので、直後じゃなくても計測できるように修正← 次のサブミットまでならいつ初めてもokにした'result[date]'にサブミット時刻が入っているので、そこから計算できる。
- ログファイルに吐き出したり、lineに通知したりして使うと良いと思う
作った経緯
まますさんの次のツイートのコードが素晴らしかったので、Pythonでやる版を作ってみました。