反面教師あり学習

*/

(旧)反面教師あり学習

Negative Supervised Learning

AnacondaとJuliaをインストールしたDockerのコンテナを作るDockerfile

概要

  • AnacondaとJuliaが両方使えるDockerfile書いた
  • コンテナ起動時にJupyterLabを起動するシェルスクリプト付き

DockerfileとJupyterLabを起動するシェルスクリプト

本当はcookiecutterのパッケージにしてあるのだが,まだちゃんとデバッグできてないのでとりあえず動いてる生成物を貼っておく. Dockerfileの上の方にある,user_idgroup_idの設定だけホストのマシンと合わせておかないとバグると思う.

以下のDockerfileで作ったコンテナ起動時にその下に貼ってあるシェルスクリプトを実行するとTensorboardとJupyterLabを起動してくれる. 起動時にポートフォワーディングの設定もしておけばブラウザからlocalhostにアクセスすればそれらをホストのマシンからつつける.

コンテナに外部からアクセス(ポートフォワード) - Qiita

自分は計算用のサーバ上でコンテナを立ててSSHポートフォワーディング使ってコンテナにアクセスする,みたいな使い方をしてる.

SSH port forwarding - Example, command, server config

Juliaのインストール時にIJuliaもインストールしてるので,下図のようにJupyterLabのLauncherにJuliaも表示される.

f:id:eqseqs:20200726175249p:plain:w400

FROM ubuntu:16.04

RUN apt-get -y update --fix-missing && apt-get -y upgrade
RUN apt-get -y install sudo wget bzip2 git vim cmake

# settings
ARG user_name=ubuntu
ARG user_id=1000
ARG group_name=ubuntu
ARG group_id=1000

# create user
RUN groupadd -g ${group_id} ${group_name}
RUN useradd -u ${user_id} -g ${group_id} -d /home/${user_name} \
    --create-home --shell /bin/bash ${user_name}
RUN echo "${user_name} ALL=(ALL) NOPASSWD:ALL \n" >> /etc/sudoers
RUN echo "Defaults env_keep += \"PATH\" \n" >> /etc/sudoers
RUN chown -R ${user_name}:${group_name} /home/${user_name}

# user settings
ENV HOME /home/${user_name}
ENV LANG en_US.UTF-8

USER ${user_name}

# Intall Anaconda
RUN sudo bash -c "echo 'export PATH=/home/${user_name}/anaconda3/bin:$PATH' N> /etc/profile.d/anaconda.sh" && \
    wget --quiet https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-x86_64.sh -O $HOME/anaconda.sh && \
    /bin/bash $HOME/anaconda.sh -b -p $HOME/anaconda3 && \
    rm $HOME/anaconda.sh

ENV PATH $HOME/anaconda3/bin:$PATH

WORKDIR /work
RUN echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib' >> /home/ubuntu/.bashrc
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8

# Update Anaconda
RUN conda update --prefix /home/ubuntu/anaconda3 anaconda

# Install Julia
RUN wget --quiet https://julialang-s3.julialang.org/bin/linux/x64/1.4/julia-1.4.2-linux-x86_64.tar.gz \
    -O $HOME/julia-1.4.2-linux-x86_64.tar.gz && \
    cd $HOME && \
    tar -xvzf julia-1.4.2-linux-x86_64.tar.gz
ENV PATH $HOME/julia-1.4.2/bin:$PATH

# ------------- Install Python packages -------------

RUN conda install -c conda-forge nodejs
RUN jupyter labextension install @jupyter-widgets/jupyterlab-manager

RUN pip install tensorboard tensorboardX

# ------------- Install Julia packages -------------

RUN julia -e 'using Pkg; Pkg.add(["IJulia"]); using IJulia'
RUN sudo apt-get install -y build-essential
RUN julia -e 'using Pkg; Pkg.add(["PackageCompiler"]); using PackageCompiler'
RUN sudo apt-get install -y qt5-default
RUN julia -e 'using Pkg; Pkg.add(["UnicodePlots", "GR", "Plots"]); \
              using UnicodePlots, GR, Plots'
RUN julia -e 'using Pkg; Pkg.add(["Distributions"]); using Distributions'
RUN julia -e 'using Pkg; Pkg.add(["LinearAlgebra"]); using LinearAlgebra'
RUN julia -e 'using Pkg; Pkg.add(["PDMats"]); using PDMats'
RUN julia -e 'using Pkg; Pkg.add(["ProgressBars"]); using ProgressBars; '

CMD ["/bin/bash"]
#!/bin/bash

LC_ALL=C tensorboard --logdir="/work/log" --port=6006 --bind_all &
jupyter lab --ip=0.0.0.0 --allow-root --port=8888 \
    --NotebookApp.token='token' \
    --NotebookApp.terminado_settings='{"shell_command": ["/bin/bash"]}'

参考

Anacondaのインストールも参考にしたページがあったけどメモが消失してしまった.