Kaggleコンペ用のVScode拡張を開発した
「KaggleコンペのためのVScode拡張があれば、開発効率を大きく改善できるのになあ…」と長年考えていたので、開発してVisual StudioのMarketplaceにリリースしました。この拡張機能によって何ができてどう便利なのか紹介します。
この拡張機能で何ができるのか
VScode拡張のFastKaggleは、Kaggleコンペのための開発フローを単純化します。
たとえば ショートカットキー入力をトリガーとして、ただちにデータセットやノートブックをKaggleにアップロードしてくれる機能を提供します。これによってTerminalを開いてコマンドを入力する手間を省くことができます。Kaggleコマンドの使い方を覚える必要もありません。
デモ動画1: ショートカットキー Ctrl+Shift+U で現在開いているノートブックを更新する。Ctrl+Shift+K でノートブックのNon-Interactive Modeにおける実行ステータスを取得する。
他にも kernel-metadata.json や dataset-metadata.json といったメタデータを言語サーバーによって自動で検証します。想定される文字列の不一致や形の違いなどの問題点があればハイライトします。Kaggle APIの仕様を調べたりする手間を省くことができます。
デモ動画2: kernel-metadata.json の id は ”_” を文字列に含んではならない、という分かりづらい仕様にもすぐに気づくことができる。エラーの文字列表示は Error Lens による機能。
kernel-metadata.json や dataset-metadata.json の ID field の文字列に ”_” が含まれるとエラーになる仕様があります。これは Github の Wiki くらいにしか書かれていない ので、ここで時間を無駄に消費する人は多いと思います。私もそうだった。ID field に使える文字列の長さとか覚えなくても大丈夫です。言語サーバーが警告を出してくれます。
ほんとそれ。FastKaggleならkaggleコマンドを叩かなくても編集時に気づけます!
そしてサイドバーに自分のアップロードした最近のリソースがリスト表示されます。これによって、KaggleのWebサイトに行かなくても最新の情報を確認できます。
デモ動画3: ツリービューの右上に表示されるリロードアイコンをクリックすると、最新の情報に更新します。アイテムをクリックするとブラウザが開きます。名前右端のクリップボードアイコンをクリックすると ID 名がコピーされます。
セットアップ
FastKaggleはVisual StudioのMarketplaceにてリリースしています。そのためVScodeの拡張機能パネルから “kaggle” で検索してインストールできます。
FastKaggleは内部で公式Kaggle APIの kaggle
コマンドを利用しています。kaggle
コマンドが使用できるようにアクセストークンやパーミッションの設定が完了していることが前提となります。
環境変数PATHからkaggle
コマンドが到達可能な場合、FastKaggleは自動でkaggle
コマンドの場所を見つけます。追加で設定する必要はありません。kaggle
コマンドを発見できない場合は、以下の設定をVScodeの設定ファイルである.vscode/settings.json
にて絶対パスを設定してください。
{
"fastkaggle.executablePath": "/path/to/kaggle"
}
設定ができていればサイドバービューに最近アップロードした Dataset, Notebook, Model がリストアップされます。
データセット新規作成からアップロードまで20秒
データセット作成からアップロードまでの手順を kaggle
コマンドで実行する場合、kaggle d init
でメタデータのテンプレートを作成して、初回のみ kaggle d create
で kaggle 上に登録アップロードする必要があります。更新するときは kaggle d version
コマンドで更新します。この一連の作業を、ターミナルを開くことなく VScode から行うことができます。
まずはデモ動画を見てください。コマンドを打つ必要もターミナルを開く必要もありません。
デモ動画4: データセットの新規作成とアップロードまでを20秒で行う。
操作手順の説明
VScodeのコマンドパネルを「Cmd+Shift+P」で表示し、”Kaggle: New Dataset” を選択してください。選択すると、新規作成するデータセット名を入力するダイアログが表示されるので入力してEnterを押してください。そうすると同名のディレクトリが作成され、データセット名が入力された dataset-metadata.json が作成されます。
作成された dataset-metadata.json は以下のようになります。
{
"id": "confirm/demo-dataset",
"title": "demo-dataset",
"licenses": [
{
"name": "CC0-1.0"
}
]
}
このディレクトリにデータセットに含めたいファイルを配置してください。例として次のようなダミーファイル “text.txt” を dataset-metadata.json と同じディレクトリに作成します。
HI! This is a test.
この “text.txt” を開いた状態で Ctrl+Shift+U を押してください(あるいはコマンドパネルから “Kaggle: Update Dataset/Notebook” を選択してください)。そうすると、dataset-metadata.json で定義したように Kaggle のデータセットとして新規作成され、アップロードが開始されます。更新する場合も同様の操作で行います。
dataset-metadata.json はエディタで現在開いているファイル(この場合は text.txt)から必要に応じて現在開いているフォルダのルートディレクトリまで親をたどり、自動的に探索されます。これによって、編集とアップデート操作を素早く往復できます。Notebook についても同様に新規作成と更新が可能です。
おわり:求むフィードバック!
ほかにこのような機能があれば便利!などご意見ご感想を歓迎いたします。Xで気軽にコメントいただけたらと思います。
サイドバーからデータセットの削除ができればいいなあとか、使用しているデータ容量が確認できるといいなあとか。色々アイディアはあるのですが、そもそもKaggle APIがサポートしていないので実装できていません。Kaggle公式にリクエストするなどして機能を拡充していく道を模索していきたいと考えています。
機能リクエストしつつ、できたらいいなあと考えているアイディアを以下に列挙しておきます。
- データセットやモデルの使用容量 が VScode からわかるようになる
- Kaggleにアップロードしているデータセット, Notebook, モデルをサイドメニューから右クリックで削除したり、VScodeで編集中のNotebookにアタッチできるようになる
- Kaggle Notebookに割り当てるGPUでT4*4など選択可能にする(現在は強制的にP100になる)。これはKaggle APIがGPUの選択をサポートしていないためできない
- 他人のKaggleのデータセットやNotebookを検索してNotebookにアタッチできるようにする(これは検索UIをどこに持っていくのか考える必要がある)
- サイドメニューからNotebookをクリックしてコンペに投稿できるようにしたい(現在のコードコンペではkaggleコマンドから投稿ができない)
おまけ:頻繁に使うパネル操作のショートカットキー
プログラムの実行やノートブックの更新ではパネル(TerminalやOutput, Debug Consoleが表示されるエリア)の Output タブと Terminal タブを行き来するためにショートカットを覚えておくと便利です。
- Cmd+1 … エディタの最初のパネルに移動
- Cmd+J … 下部パネルを開閉トグル
- Cmd+Shift+U … 下部パネルのOutputタブを開く
- Ctrl+` … 下部パネルのTerminalタブを開く
おまけ:dataset-metadata.json と同じ階層にたくさんのファイルを配置しない
dataset-metadata.json と同じ階層にたくさんのファイルを配置すると、それらのファイルを一つ一つ順番にアップロードするという処理が走るため、非常に時間がかかります。sub, exp といったサブディレクトリを作成して、そこにたくさんのファイルを配置すると、それらサブディレクトリは一つのアーカイブとしてアップロードされるため、アップロード時間が短縮されます。
以上!