【Kaggle】Kaggle Notebook をDockerを用いてローカル環境で構築する手順と作成方法

AI
スポンサーリンク

今回の記事では、Kaggle Notebook をローカル環境で構築する手順と作成方法を解説します。

実現すること

  • kaggle APIを使用可能に(notebookやデータセットのダウンロードなど)
  • 起動後すぐに Jupyter を使用可能
  • ローカルとコンテナ間で/workingディレクトリを同期
  • ディレクトリ構成

    kaggle/
    ├── Dockerfile
    ├── docker-compose.yml
    ├── kaggle.json              # Kaggle API Key(手動で配置)
    ├── requirements.txt         # 必要なパッケージを記載
    ├── working/                 # Kaggleプロジェクト作業ディレクトリ
    └── input/                   # コンペデータ配置用(自動でコンテナ内にマウント)

    手順

    1. ディレクトリを作成

    mkdir kaggle
    cd kaggle
    
    touch Dockerfile docker-compose.yml
    mkdir working input

    2. kaggle API Keyを取得

    Kaggleサイトにアクセスして、API Keyを取得してください。.jsonファイルがダウンロードされるので、名前をkaggle.jsonに変更して、kaggleディレクトリに配置してください。

    3. requirements.txtを作成

    必要なパッケージを記載してください。

    numpy
    pandas
    matplotlib
    scikit-learn
    seaborn

    4. Dockerfileを作成

    FROM gcr.io/kaggle-gpu-images/python:latest
    
    # Kaggle CLI用APIキーを配置
    COPY kaggle.json /root/.kaggle/kaggle.json
    RUN chmod 600 /root/.kaggle/kaggle.json
    
    # requirements.txt のコピーとインストール
    COPY requirements.txt /kaggle/requirements.txt
    RUN pip install --no-cache-dir -r /kaggle/requirements.txt
    
    # Jupyter用のカーネルをインストール
    RUN pip install ipykernel
    RUN python -m ipykernel install --user --name kaggle-env --display-name "Python (Kaggle)"
    
    # デフォルトディレクトリの作成
    RUN mkdir -p /kaggle/input /kaggle/working
    
    # 作業ディレクトリを設定(docker exec -it kaggle bash をした際に、このディレクトリが開かれる)
    WORKDIR /kaggle/working
    
    # Jupyterを起動できるようにポートを空けておく
    EXPOSE 8888
    
    # 起動時にJupyterを自動起動
    CMD ["jupyter", "lab", "--ip=0.0.0.0", "--port=8888", "--allow-root", "--NotebookApp.token=''", "--NotebookApp.password=''"]

    5. docker-compose.ymlを作成

    version: "3.9"
    
    services:
      kaggle:
        platform: linux/amd64 # Apple Siliconで起動する際に必要
        build: .
        container_name: kaggle
        ports:
          - "8888:8888"
        volumes:
          - ./working:/kaggle/working
          - ./input:/kaggle/input
        tty: true
        stdin_open: true

    6. コンテナを起動

    ここで注意が必要です。

    最初にDockerデスクトップを起動し、歯車アイコンをクリック。Resourcesタブをクリックし、Virtual Machinesの値を変更してください。

    docker-setting

    僕の場合、136にしました。参考までに。

    docker compose up -d

    コマンドが終了するまで、結構時間がかかりますので、気長に待ちましょう。

    7. コンテナに接続

    docker exec -it kaggle bash
    jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token=''
    # --ip=0.0.0.0 : すべてのIPからのアクセスを許可
    # --port=8888 : ポート番号を指定
    # --allow-root : ルートユーザーでの起動を許可(Dockerでは必要)
    # --NotebookApp.token='' : 認証トークンなしでアクセス可(セキュリティ注意)

    /kaggle/workingディレクトリが開かれます。こちらで、jupyter notebookを作成することができます!

    Kaggle APIのコマンド

    以下に、Kaggle APIのコマンドをまとめました。
    詳しい情報は公式ドキュメントを参照してください。

    コンペデータのダウンロード

    kaggle competitions download -c <コンペ名> -p <保存先パス>
    kaggle competitions download -c titanic -p /kaggle/input/titanic
    unzip ファイル名.zip -d 解凍先パス

    コンペに提出

    kaggle competitions submit -c <コンペ名> -f <提出ファイル> -m "<コメント>"
    kaggle competitions submit -c titanic -f submission.csv -m "1st submission"

    提出履歴

    kaggle competitions submissions -c <コンペ名>

    ノートブックの取得コマンド

    kaggle kernels pull <username>/<notebook-name>

    まとめ

    Kaggle Notebookをローカル環境で構築する手順と作成方法を解説しました。
    こちらのプロジェクトで実現できることは、

  • kaggle APIを使用可能に(notebookやデータセットのダウンロードなど)
  • 起動後すぐに Jupyter を使用可能
  • ローカルとコンテナ間で/workingディレクトリを同期
  • です。

    参考になれば幸いです。

    タイトルとURLをコピーしました