# PyCaret のための Docker コンテナ作成

PyCaret のための Docker 環境構築と Jupyter Notebook の利用方法について記述していきます。

Python を勉強してる中で PyCaret を使う機会がありましたが、その環境構築するときに色々と問題が発生して時間を食ってしまいましたので、備忘録として記録しておきます。

### PyCaretとは

![pycaret.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726209/91bb1b42-045b-34cb-3e9f-f3b57c049968.png)

>PyCaretは、Pythonで実装されたオープンソースの機械学習ライブラリーで、機械学習の一連の作業を自動化する「AutoML」をサポートしています。他のオープンソースの機械学習ライブラリーで実装すると、数百行を超えるようなコードを、PyCaretでは数行のみに置き換えることができます。これにより、機械学習の実験サイクルを指数関数的にスピードアップし、生産性を向上させることができます。
引用元 : [OpenStandia 「PyCaretとは?」](https://openstandia.jp/oss_info/pycaret/)

要するに、機械学習における色々な手法をまとめて一度に実行ができ、その比較まで簡単にできるライブラリのことです。初めて使ったときはその凄さに驚きました。

その便利さがある一方で、[以前執筆した記事](https://qiita.com/kotabook/items/2c7dfafc570283e3f8d5)の環境構築ではうまくいきませんでした。
また、pycaret と言う DockerHub にあるイメージを使ってもなぜかうまくいきませんでした。
これらは原因不明であるため、新たに構築し直したという感じです。

### PyCaretに求められる要件

PyCaret公式ホームページに行くと、以下のことが記されていました。(2022/02/15現在)

>#### Run PyCaret on a Docker Container
>A Docker container runs in a virtual environment and is the easiest way to deploy applications using PyCaret. Dockerfile from base image python:3.7 and python:3.7-slim is tested for PyCaret >= 2.0.
引用元 : [Installation - pycaret 2.3.5 documentation](https://pycaret.readthedocs.io/en/latest/installation.html)

Dockerを使う場合はどうやらPython3.7が推奨されているようです。
またその他にいくつか必要なものもあるようです。
```libgomp1```は入れないとエラーが出ます。また、公式が提示している Dockerfile では Jupyter Notebook が利用できないです。

以上のことから、エラーが出ないバージョンを使って、かつ、Jupyter Notebook にて実行が可能なようにDockerで環境構築を行なっていきたいと思います。

### 環境構築の手順

筆者は以下の環境にて構築しました
* MacOS Big Sur 11.6.1
* Apple MacMini 2018 Intel Core i3 

また、Docker for Desktopはインストール済みと言う前提で進めます。

#### 1. Dockerfileの作成

Dockerfileの中身は以下の通りです。

```Dockerfile
FROM python:3.7-slim

RUN apt-get update && apt-get install libgomp1

RUN pip install --upgrade pip && \
    pip install jupyterlab && \
    jupyter notebook --generate-config

WORKDIR /root/.jupyter

# 接続するときのtokenを設定 「pycaret」の箇所を変更すれば自由に設定可能
RUN echo 'c.NotebookApp.token = "pycaret"' >> jupyter_notebook_config.py

RUN mkdir /work
WORKDIR /work

RUN pip install pycaret
```

これを以下のようなディレクトリに配置します。Dockerfile がある階層に work というフォルダを作成します。

```
.
┣━ Dockerfile
┗━ Work/
```

### 2. イメージをビルドしてコンテナを作成

上記の Dockerfile を用いて環境構築を行います。
以下のコマンドを使ってコンテナ作成を行っていきます。
パスは Dockerfile がある階層で行ってください。

* イメージビルド
```
$ docker image build . -t イメージ名
```

イメージ名は任意です。

* コンテナ立ち上げ
```
$ docker run -v "$(pwd)"/work:/work -it -p 7777:8888 イメージ名 jupyter-lab --ip 0.0.0.0 --allow-root --name コンテナ名
```
コンテナ名は任意です。イメージはビルドしたときに指定したイメージ名を入力してください。
ポートは7777にしてありますが、好きな番号に変えていただいて問題ありません。他にポートを使うコンテナがある場合は、それらと競合しないようにユニークな番号を選ぶことをお勧めします。

コンテナ立ち上げが完了したら、webブラウザを開き、以下のリンクにアクセスします。

![pycaret_docker1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726209/acbd8247-904f-0faf-c43a-09393655fd9f.png)

このときにtokenの入力が求められますので、Dockerfileにて決めたtokenを入力します。コピペした人は「pycaret」となっているはずです。

以下のような Jupyter Notebook の画面が表示できていれば完了です。

![pycaret_docker2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1726209/b19677ed-4861-dfbe-8342-ca13a480c2ac.png)

PyCaret の使い方については以下の方の記事を参考にしました。
(勝手に引用して申し訳ありません)

https://qiita.com/shuhigashi/items/0fb37468e64c76f4b245

### まとめ

本記事では Pycaret のための環境構築を行い、Jupyter Notebook で使えるように構築を行いました。

上記の方法で何かエラーが起きたなどがあればご連絡いただけると幸いです。

以上になります。