🔖

【Kaggle API】Kaggle環境構築編

2024/04/01に公開

【Kaggle API】VSCodeでKaggleする の続きです。
kaggleの環境をDokcerで取得します。

公式リファレンス

修正: 2024/06/24
@mohki7(Mototsugu Oki)さんが修正して下さっていたので、該当部分を追記しました。
リンク:修正記事

5. Kaggle環境の構築

Dockerを使用して、ローカルにKaggleと同じ環境を構築する方法を解説します。
Docker Desktopが入っていない方はインストールしましょう。

方法は2つです。
1. 自分でImageを作る(GPU)
2. Imageをpullする(GPU,CPU)

Imageを作る方法は正常に動作しないようなので2番のpullする方法を使用します。

5.1 自分でImageを作る場合

Kaggle公式からdockerfileを含むパッケージを取得します。

# パッケージの取得
$ git clone https://github.com/Kaggle/docker-python.git 
$ cd docker-python 

ビルドします。一時間ほどかかります。

$ ./build --gpu

・エラー時
Operation too slow. Less than 30 bytes/sec transferred the last 60 secondsが出た時は、ネットワークの通信が遅いと言われているので、何度か再ビルドを試してみて下さい
E: You don't have enough free spaceが出た時はDockerで使うことができるストレージの容量不足なので、Dockerデスクトップの歯車アイコンから「Resources」でVirtual disk limitを大きくします。自分のPCの残ストレージ容量を確認してから、Dockerストレージを増やして下さい。

イメージを実行します。

$ docker run --runtime nvidia --rm -it gcr.io/kaggle-gpu-images/python /bin/bash

5.2 Imageをpullする場合

Kaggleのdocker imageをpullします。

$ docker pull gcr.io/kaggle-gpu-images/python:latest

imageがダウンロードされたことを確認します。

$ docker images

imageをrunしてコンテナを実行します。

CPU

$ docker run -itd -p 8888:8080 -v "$(pwd)"/target:/home --name kaggle gcr.io/kaggle-images/python /bin/bash
  • docker run: Docker コンテナを実行します。
  • -itd: コンテナをインタラクティブモードでバックグラウンドで実行します。
  • -p 8888:8080: ローカルマシンのポート8888をコンテナのポート8080にマッピングします。
  • -v "$(pwd)"/target:/home: 現在のディレクトリのtargetサブディレクトリをコンテナの/homeディレクトリにマウントします。
  • --name kaggle: コンテナにkaggleという名前を割り当てます。
  • gcr.io/kaggle-images/python: 使用するDockerイメージ名です。
  • /bin/bash: コンテナで実行するコマンドです(この場合、bash シェルを開始します)。

GPU

$ docker run -itd --gpus all -p 8888:8888 -v "$(pwd)"/target:/home --name kaggle gcr.io/kaggle-gpu-images/python /bin/bash

--gpus allを追記

5.3 Attach

5.3.1 Attach

runによってコンテナが起動したことを確認します

# 起動しているコンテナを表示
$ docker ps
# CONTAINER ID   IMAGE                         COMMAND                   CREATED         STATUS         PORTS                    NAMES
# a5ec778a20dd   gcr.io/kaggle-images/python   "/entrypoint.sh /bin…"   3 minutes ago   Up 3 minutes   0.0.0.0:8888->8080/tcp   kaggle

次にVSCodeでCtrl + Shift + pでコマンドパレットを開き、開発コンテナ:実行中のコンテナにアタッチ.../Dev Containers: Attach to Running Container...を選択、先ほど起動したimageを選択します。
以下のコマンドでもAttachできると思います。

$ docker attach kaggle

これで、kaggleの環境に入ることができるはずです。

ちなみに抜ける時は

$ exit

再度コンテナを起動するときは

$ docker start kaggle

を実行して下さい。

5.3.2 環境確認

Attachしたら、コマンドラインからOSを確認してみましょう。(Linuxだと思います)

root@:~ $ uname -a
# Linux ... 
root@:~ $ lsb_release -a
# No LSB modules are available.
# Distributor ID: Ubuntu
# Description:    Ubuntu 20.04.6 LTS
# Release:        20.04
# Codename:       focal

次にpythonのversionを確認します。

$ python --version
# Python 3.10.13

versionを確認したら、拡張機能からpythonとjupyterをインストールし、VSCode右上のKernelから確認したversionと同じpythonを選択します。

これで準備は完了です!Ctrl + Shift + pからCreate: New Jupyter Notebookを選択し、簡単なコードを実行してみましょう。

またGPUを使用している場合、以下のコードでGPUが認識されているか確かめることができます。

shell
nvidia-smi

or

ipynb
import torch

if torch.cuda.is_available():
    print("CUDA is available. GPU is recognized.")
    print("Number of GPUs available: ", torch.cuda.device_count())
    print("GPU Name: ", torch.cuda.get_device_name(0))
else:
    print("CUDA is not available. No GPU is recognized.")

Kaggle API

※Kaggle APIを使用するには、以下のコマンドでkaggle.jsonファイルをDockerコンテナ上にコピーします。
今回のコンテナでは、/root/.kaggleディレクトリにkaggle.jsonを保存するように要求されます。

# ローカルマシン
# コンテナIDを調べる
docker ps

# kaggle.jsonをコピー
sudo docker cp etc/kaggle.json <コンテナID>:/root/.kaggle/kaggle.json

まとめ

今回はDockerを利用してローカルにkaggle環境を整える方法を紹介しました。

参考

How to use Kaggle API
Kaggle API GitHub
Kaggle環境の構築方法(GPUなし)

Discussion