【Kaggle API】Kaggle環境構築編
【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が認識されているか確かめることができます。
nvidia-smi
or
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