手元の環境で実行してもエラーが出ないが、Kaggle Notebookで実行するとエラーになる、ということがあった。
手元とNotebookではライブラリのバージョンが違うのでそのせいだと思うが・・
Notebookではデバッグ実行できないし、原因分析しづらかったのでNotebookが実行されているのと同じ環境を作ることにした。
gcr.io/kaggle-images/pythonでDockerImageが公開されているので、それにsshdなどを追加するDockerfileを作った。
FROM gcr.io/kaggle-images/python:latest
SHELL ["/bin/bash", "-l", "-c"]
# 必要なパッケージをインストールします
RUN apt -y update && apt install -y --no-install-recommends \
wget \
python3-distutils \
ca-certificates \
curl \
python-setuptools \
locales \
tzdata \
sudo openssh-server \
nano \
&& apt clean
# Set timezone Asia/Tokyo (Ubuntu only)
RUN \
cp /etc/localtime /etc/localtime.org && \
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
sed -i -e 's/Etc\/UTC/Asia\/Tokyo/g' /etc/timezone
# Set Locale env.
RUN locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ""
ENV LC_ALL ja_JP.UTF-8
# 環境変数の設定
# pythonからの出力をバッファしないようにする(ログが早く届くようにするため)
ENV PYTHONUNBUFFERED=TRUE
RUN echo ". /opt/conda/etc/profile.d/conda.sh" >> /root/.bashrc
# sshログイン用にpublic keyを登録
ARG PUBLIC_KEY
RUN mkdir /root/.ssh \
&& echo $PUBLIC_KEY > /root/.ssh/authorized_keys \
&& chmod 600 /root/.ssh -R
# sshd port
EXPOSE 22
docker-compose-run.yamlは以下。
# kaggle notebook環境と同じimageからコンテナを起動する。notebookでエラーが発生した場合の原因分析に使用する
version: '2'
services:
kaggle_nb:
image: myrepo/kaggle_nb:latest
container_name: kaggle_nb
ports:
- "2223:22"
tty: true
volumes:
- "/kaggle:/kaggle"
# コンテナ起動時にsshdを起動する
command: bash -c "/etc/init.d/ssh start && /bin/bash"
これでコンテナを起動してPyCharmを接続すればPyCharmでデバッグ実行できる。