データサイエンスコンペ用に特化した環境構築事例の紹介

x facebook hatena

はじめに

こんにちは、ARISE analyticsでデータ分析支援業務を中心に行う「データコンサル」キャリアトラックに所属している徳元です。今回は、データ分析コンペにおける環境構築の工夫点をご紹介いたします。

データ分析コンペのプラットフォームとしてKaggleが有名ですが、企業や研究者がデータを投稿し、世界中の統計家やデータ分析家がモデル精度を競い合うコンテストであり、自らのデータ分析の技術をはかることができます。

データサイエンティストとしてデータ分析コンペからは様々な学びを得られますが、今回は環境構築周りに焦点を当ててみます。本記事では先日社内チームで参加したHuMob’24コンペにて実際に利用した環境構築の事例を絡めつつデータ分析コンペにおける環境構築のベタープラクティスを紹介いたします。

データ分析コンペにおける環境事情

Kaggleをはじめとするデータ分析コンペでは、分析環境が準備されている場合と準備されていない場合があります。

Kaggleの場合、「Notebook」と呼ばれるKaggle上で利用可能なPythonやRの開発環境が用意されており、Google Colaboratoryに近い操作感で使用することができます。制限時間はあるものの、GPUをはじめとした計算リソースがKaggle側で提供されており、参加者は気軽に利用できる仕組みが整えられています。

一方、Kaggle以外のプラットフォームでは、コンペによっては分析環境が提供されている場合もありますが、用意されていない場合は、ローカル環境やクラウドリソースを用いて独自に分析環境を整える必要があります。

また、Kaggleの「Notebook」は非常に利便性が高いものの、自分好みの分析環境で作業を行いたい場合は、独自に環境を構築したほうが自由度が高く、効率的です。

環境構築周りでのあるある課題

そもそも、データコンペに参加する立場から考えると、限られたコンペ期間の中で環境準備に過剰な時間を費やしたくないという心理が働くものです。さらに、環境構築にはある程度の技術的な理解が必要で、学習コストも発生します。

私自身も本職はエンジニアではないため、必要最低限のツールを活用しつつ、それでいて利便性の高い分析環境をどう整えるか、常に頭を悩ませています。

データ分析におけるあるある課題を示した図

対応策

先述の課題を解決するために、Dockerの利用を検討してみました。Dockerとは、コンテナ型の仮想環境を作成・実行・管理するためのプラットフォームであり、他者が作成した環境と同じアプリケーション環境を簡単に再現することができます。

さらに、Docker Hubなどで公開されているDockerイメージを基に、自分用の環境をカスタマイズすることも可能です。Kaggleからも公式のDockerイメージ[1]が公開されており、これらを利用することで、簡単にKaggleの分析環境と同一条件の環境を構築することができます。

Dockerとはを表す図

実践

実際に我々が利用したものをご紹介します。先日社内メンバーで参加したHuMob’24コンペにて、参加メンバーに試してもらったものが好評だったため、そちらの事例についてご紹介いたします。

HuMob’24とは

HuMob Challenge 2024は、国際会議ACM SIGSPATIAL2024の一環として開催され、携帯電話から取得された移動軌跡のデータをもとに、将来的なユーザーの移動パターンを予測するコンペでした。(詳細はこちら

本コンペの参加にあたっては計算リソースや分析環境はこちらで準備の必要がありました。また、評価関数を扱う上でも、運営側からライブラリーの指定[2]などもあり、分析環境に事前にインストールしておく必要もありました。

構成内容

こちらの事例[3][4]を参考に、今回はVSCode、Docker、AWS S3などを利用した分析環境の構築を検討しました。

ローカルPC内でJupyter Serverを起動したDockerコンテナを立ち上げ、VSCodeからアクセスする構成としています。また、AWSのS3サービス上にデータを配置し、これをマウントすることで、コンペのデータセットや中間データを簡単に共有できる環境を整えました。これにより、チームメンバー間でデータを気軽にシェアできるようになりました。

さらに、GPU環境にも対応できるよう、Dockerfileを2種類用意し、メンバーが必要に応じて適切な環境を選択できるようにしています。

工夫したポイントを解説する図解

実行手順と使用感

実際利用したリポジトリを参考に環境構築の手順を踏みます。[5] ※VSCodeのほかにも、実行前にはWindows Subsystem for Linux 2(WSL2)やDockerDesktop(もしくはDocker CLI)の準備が必要です。

まず、VSCodeからWSL2にてubuntu環境にアクセスし、AWSログインIDを環境変数に設定します(AWSログインIDは各個別のアカウントから事前に取得しておく必要あり)

$ export your_access_key={AWSアクセスキー}
$ export your_secret_access_key={AWSシークレットアクセスキー}
$ export your_default_region=ap-northeast-1

以下のコマンドでDockerコンテナを起動します。

# (初回のみ)
$ sudo usermod -aG docker $USER # 再起動必要

$ mkdir {hoge} # 必ず作業用のディレクトリを作成してください
$ cd {hoge}
$ git clone https://github.com/takuya-tokumoto/EnvHuMOB2024.git
$ cd EnvHuMOB2024

# cpuのみ環境の場合
$ docker compose -f compose.cpu.yaml up 

コンテナ起動後に、VSCodeの「Remote Explorer」->「DevContainer」を押下し、先ほど立ち上げたコンテナを選択することで開発環境にアクセスできます。

起動後は以下のようなイメージ。VSCode上で気軽な操作が可能であり、コンペ用のデータセットや分析に最低限必要なライブラリーが既に準備されている状況で開発を開始することができます。

起動後の画像イメージ

DockerFileについて

DockerFileの構成はいたってシンプルで、Kaggleが公式で提供しているDocker imageを元に、s3fsやpytorchなどのインストールをコンテナ作成時に実行します。

Dockerfile.cpuはGPUが利用できないマシーンを用いる場合、DockerfileはGPU付きのマシーンを利用する場合で分けており、起動時のコマンドを変更させることでどちらも利用を可能とします。

FROM gcr.io/kaggle-images/python:v145

#言語と地域の設定
ENV lang="ja_jp.utf-8" language="ja_jp:ja" lc_all="ja_jp.utf-8"

#ライブラリのインストール
WORKDIR /kaggle

# s3fsのインストール
RUN apt-get update && \
    apt-get install -y s3fs && \
    rm -rf /var/lib/apt/lists/*

# mount-s3のインストール
RUN apt-get install -y wget && \
    wget https://s3.amazonaws.com/mountpoint-s3-release/latest/x86_64/mount-s3.deb && \
    apt-get install -y ./mount-s3.deb && \
    rm -rf /var/lib/apt/lists/* ./mount-s3.deb

# AWS CLIのインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
    unzip awscliv2.zip && \
    sudo ./aws/install && \
    rm -rf aws awscliv2.zip

#各々のGPUに対応するpytorchをインストールhttps://pytorch.org/get-started/previous-versions/
RUN pip install torch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 --index-url https://download.pytorch.org/whl/cpu
ADD requirements.txt /kaggle/requirements.txt
RUN pip install -r requirements.txt

#jupyter notebookの起動
ADD run.sh /opt/run.sh
RUN chmod 700 /opt/run.sh
CMD /opt/run.sh

終わりに

従来、Kaggleで提供される「Notebook」は、.ipynbファイルでのコード管理が中心ですが、.pyファイルを用いた階層的なコード管理を行いたいメンバーにとっては、非常に便利に扱える環境でした。

また、コンペにチームで参加する際にも、ライブラリのインストールに関する課題は、初回の設定時に一度手間をかけるだけで解決でき、その後の共有が非常にスムーズになります。さらに、AWSのS3サービスを活用してデータを簡単に共有できるようになったことで、チームでの参加時にデータや学習済みモデルのファイルの受け渡しが容易になり、大変好評でした。

今後は、WandB(Weights & Biases)などの実験管理ツールを取り入れることで、チーム開発における生産性をさらに向上させる事例を構築したいと考えています。

最後まで読んでいただきありがとうございました。こちらの記事を読んでARISEに興味が湧きましたら、ぜひお問い合わせ・お声がけください。 採用 | 株式会社ARISE analytics(アライズ アナリティクス)

参考

【1】GitHub - Kaggle/docker-python: Kaggle Python docker image
【2】yahoojapan/geobleu: Python implementation of GEO-BLEU, a similarity evaluation method for trajectories
【3】オレオレKaggle開発環境
【4】GitHub - ktakita1011/my_kaggle_docker: 2023年版kaggle環境
【5】GitHub - takuya-tokumoto/EnvHuMOB2024
ご質問・お問い合わせは
こちらよりお送りください
採用
ARISE analyticsとは

PAGE TOP