データサイエンスを始める環境構築方法

# はじめに
昨今の人工知能ブームに影響を受けて、様々な場面で機械学習を利用する動きが活発です。  
自分で高性能なGPU搭載コンピュータを準備したり、Amazon EC2のようなクラウドサービスを利用したりと、方法は人それぞれだと思いますが、いずれにせよ必要なソフトを動かしたり、プログラムを動作させるための環境構築をするのが地味に手間だったりします。  
先日、データサイエンスに必要な基本ツールなどをまとめて再セットアップする機会があったので、ついでに次回以降は自動化できるようシェルスクリプトを走り書きしたので、この場を借りて紹介しておこうと思います。  
具体的にインストールするソフトは[下に](#インストールされるソフトウェア)挙げています。  
一つ一つは何番煎じか分からないようなメジャーなソフトなので、調べればそこら中にインストール方法の説明サイトが転がってると思いますが、個別にインストール方法を調べる手間を省くという点で需要があればいいなと思ってます。  
あるいは「インストールしたいのにエラーが出て引っかかった！」なんていう方の参考にもなれば幸いです。  
とくにバイオ系の研究室で、次世代シーケンス解析や機械学習、一般化線形モデルのような応用的な統計手法の利用などを始めるための、最初の環境構築に使えるんじゃないかと思います（なぜか異様に具体的でニッチ...）。   
<font color="red">※なお、このスクリプトはOSがUbuntu18.04で、NVIDIA製のGPUのGPUの使用を前提にしています</font><br/>

# テスト環境
インストールしたマシンは以下のようなシステムになっています。
```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
```

NVIDIA製GPUの型番は以下のものです。
```
$ lspci | grep -i nvidia
03:00.0 VGA compatible controller: NVIDIA Corporation GK110GL [Quadro K5200] (rev a1)
```

# インストールされるソフトウェア
以下のソフトと、そのインストール・実行に必要な解凍・圧縮ソフト、画像・動画ファイル用のライブラリなど(\*1)がインストールされます。 

|ソフト名|webサイト|説明・主な用途|  
|--|--|--|
|NVIDIA GPUドライバ|[link](https://www.nvidia.com/)|NVIDIA製GPUを活用するのに必要|
|git|[link](https://git-scm.com/)|コマンドからGithubリポジトリを利用|
|Clang|[link](https://clang.llvm.org/)|C系で書かれたソフトのコンパイル \*2|
|CMake|[link](https://cmake.org/)|C系で書かれたソフトのコンパイル・インストール手順を簡略化|
|Perl|[link](https://www.perl.org/)|perlスクリプトの実行用|
|GNU Fortran|[link](https://gcc.gnu.org/fortran/)|Fortranが必要なプログラムの実行用|
|CUDA+CuDNN|[link](https://developer.nvidia.com/cuda-toolkit)|NVIDIA製GPUを利用した機械学習用 \*3|
|Python3(+pip)(+モジュール \*4)|[link](https://docs.python.org/ja/3/)|Ubuntu 18にプリインストールされているPythonが少し古いので更新　\*5|
|OpenJDK|[link](https://openjdk.org/)|JAVAのプログラム・ソフトを動かすのに必要|
|Docker(+NVIDIA Docker)|[link](https://www.docker.com/)|Docker \*6 上で動くソフトを利用するため|
|MySQL+SQLite|[link](https://www.mysql.com/),[link](https://www.sqlite.org/index.html)|SQLデータベースの構築|
|Node+npm|[link](https://nodejs.org/)|npmでインストールするタイプのソフトを利用(+Expressで簡易webサーバー運用)|
|R|[link](https://www.r-project.org/)|統計処理、グラフ作成などに利用|
|Graphviz|[link](https://graphviz.org/)|グラフ(グラフ理論の方)作成に利用|
|OpenCV|[link](https://opencv.org/)|画像や動画の処理に利用|
|FFmpeg|[link](https://ffmpeg.org/)|作成した動画の編集や別フォーマットへのエンコードに利用|
|cURL|[link](https://curl.se/)|コマンドラインでFTPやHTTPのアクセス|
|cifs|[link](http://cifs.com/)|NASをマウントして利用したい場合に必要|
|clamAV|[link](http://www.clamav.net/)|セキュリティ用 \*7|
|doxygen|[link](https://doxygen.nl/)|自分の書いたコードのドキュメント作成|
|mozc|[link](https://github.com/google/mozc)|日本語入力用 (英語版Ubuntuデスクトップインストール時)|
|OpenSSH(server)+ufw|[link](https://packages.ubuntu.com/en/bionic/openssh-server)|SSHサーバのインストールと起動、ファイアウォールの設定と稼働 \*8|
  
\*1 具体的にインストールされるものは[後述のスクリプト](#1.インストール用スクリプトのダウンロード)の54-62行目を直接確認してください。  
\*2 UbuntuにはGCCが入っていると思うので必須ではないですが、経験上clangの方が高速なバイナリが出来たことがあったので入れるようにしています。  
\*3 CUDAのパッケージとCuDNNのソースコードは事前にダウンロードしておく必要があります。詳細は下の[方法](#2.CUDAのパッケージとCuDNNのソースコードをダウンロード)で説明しています。  
\*4 インストールされるPython モジュールは[下表](#インストールするPythonモジュール一覧)に示しています。  
\*5 Python 3.7が入るようになっています。  
\*6 Dockerの詳細については[本家](https://www.docker.com/)のトップページにあります。日本語の解説は[udemy](https://udemy.benesse.co.jp/development/system/docker.html)などにあります。
\*7 別のセキュリティソフトを入れていればインストールしなくて大丈夫です。  
\*8 リモート操作を想定しているので、SSH serverを動かすようにしています。コンピュータ本体を直接操作して使用する場合は不要です。  

## インストールするPythonモジュール一覧
|名称|説明・主な用途|  
|--|--|
|numpy|様々な数値計算、ベクトル、行列処理|
|pandas|データ処理|
|matplotlib|グラフ、プロット図の作成と描画|
|scikit-learn|機械学習|
|hmmlearn|隠れマルコフモデルの利用|
|umap-learn|UMAP埋め込み図の作成|
|tensorflow|機械学習用ライブラリの利用、kerasの利用|
|torch|機械学習フレームワークPyTorchの利用|
|openpyxl|PythonでExcelファイル操作|
|python-docx|PythonでWordファイル操作|
|python-pptx|PythonでPowerPointファイル操作|
|reportlab|PythonでPDFファイル作成|
|graphviz|Pythonでグラフ図作成|
|selenium|Webアクセス|
|beautifulsoup4|htmlデータ解析|

# 方法
Linuxの使用経験が少ない人向けに基本から書いておきます。

## 基本システム導入
コンピュータに[Ubuntu18.04](http://releases.ubuntu.com/18.04/)をインストールしていることが前提です。  
Ubuntuの導入方法は[ウブンログさんの記事](https://ubunlog.com/ja/ubuntu-18-04lts%E3%83%90%E3%82%A4%E3%82%AA%E3%83%8B%E3%83%83%E3%82%AF%E3%83%93%E3%83%BC%E3%83%90%E3%83%BC%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89/)が分かりやすいと思います。  
少し古い18を入れているのは、[Google Colab](https://colab.research.google.com/)というサービスと環境を近づけたかったからです。  

## コマンド操作 
【ターミナル】を起動して、コマンドを入力しENTERを押します。  
起動方法が分からない場合は[こちらの記事](https://linuxfan.info/ubuntu-open-terminal-emulator)などを参照すると分かりやすいと思います。  
コマンドの入力ですが、例えば以下のような書き方をしてあった場合、"$"は無視して、それ以降の文字(Command...)をターミナルにコピペしてENTERを押します。  
```
$ Command...
```

## 本題：各ソフトのインストール手順

## 1. インストール用スクリプトのダウンロード
以下のコマンドで、[私のGitHubのリポジトリ](https://github.com/YujiSue/GeneralScripts)から、"multiple_installer.sh"をダウンロードできます。  

```
$ wget https://raw.githubusercontent.com/YujiSue/GeneralScripts/main/multiple_installer.sh
```

## 1.5 ダウンロードしたスクリプトの改変 (オプション)
上でダウンロードした"multiple_installer.sh"の中身を必要に応じて改変してください。

### インストールするソフトの選別
初期の環境構築を念頭に置いているのでGPUドライバなどは強制インストールになっていますが、他のソフトは13行から33行目まで並んでいる、**inst_XXX＝true**という文の**true**を**false**に書き換えればインストールされなくなります。  
自分には必要ないと思うソフトがあれば、あらかじめ書き換えてください。  

### バージョンの指定
CMakeとOpenCVはバージョンに依存して動かないソフトもあるので、必要に応じて自分でバージョンを指定できるようになっています。  
デフォルトでは、CMakeがv3.22.5, OpenCVはv4.5.5がインストールされるようになっています。 
変更したい場合は、"multiple_installer.sh"の36-37行目の数値を書き換えてください。  

### ダウンロード先の指定
"multiple_installer.sh"の44行目で、インストールのためにダウンロードしたファイルの保存先を【ダウンロード/Downloads】フォルダに指定しています。  
ストレージの空き容量の関係などで、ダウンロード先を変更したい場合は、この行の**TEMPORARY=**以降を、適宜別のフォルダのパスに置き換えてください。  
  
## 2. CUDAのパッケージとCuDNNのソースコードをダウンロード
NVIDIのGPUを演算に利用する上で必須のCUDAとCuDNNですが、搭載しているGPUによってインストール可能なバージョンが異なります。詳しくは[こちら](https://developer.nvidia.com/cuda-gpus#compute)を参照してください。  

この制約上、あらかじめ (1)使用するCUDAのバージョンを指定し、(2)自分の環境にあったCUDAパッケージと、(3)CuDNNソースコードをダウンロードしておく仕様にしてあります。  

(1) バージョンの指定は、"multiple_installer.sh"の38, 39行目を書き換えて行います。デフォルトではCUDA v11.5と、それに合わせたCuDNN v8.3.1.22をインストールする想定になっています。  
  
(2) CUDAのUbuntu用パッケージは、[ここ](https://developer.nvidia.com/cuda-downloads)からダウンロードできます。OSを選んでいくとダウンロードできる **~.deb** というファイルが目的のファイルです。  
デフォルト設定のままCUDA11.5を利用する場合は、下記のコマンドでダウンロードできます。  
```
$ wget https://developer.download.nvidia.com/compute/cuda/11.5.1/local_installers/cuda-repo-ubuntu1804-11-5-local_11.5.1-495.29.05-1_amd64.deb
```
  
(3) CuDNNのソースコードをダウンロードするには、[ここ](https://developer.nvidia.com/cudnn-download-survey)からダウンロードサイトに進む必要がありますが、NVIDIAのアカウントが必要です。  
アカウント作成は無料なので、持っていない方はアカウントを作ってダウンロードをしてください。  
ログインしたら、CUDAのバージョンに合わせたCuDNNのソースコードをダウンロードしてください。  
デフォルトの設定を利用する場合は "cudnn-linux-x86_64-8.3.1.22_cuda11.5-archive.tar.xz"というファイルをダウンロードすることになります。  
  
最後に、取得した両ファイルは、"multiple_installer.sh"の44行目で指定しているフォルダに保存してください。  
デフォルトでは、【ダウンロード/Downloads】フォルダが指定されています。  
<font color="red">※バージョンや保存先が食い違うと、上手くスクリプトが働かないのでご注意ください。</font>
  
## 3. "multiple_installer.sh"をbashで実行
以下のコマンドで実行します。  

```
$ bash multiple_installer.sh
```

最初に一度だけパスワードを聞かれるので(内部でsudoを実行するため)、ログイン用に設定したパスワードを入力して、ENTERキーを押してください。  
以後は、ひたすら待ちです。  
  
## 4. [オプション]ダウンロードしたファイルの削除

```
$ rm multiple_installer.sh
```


# 参考にしたサイト
* [NVIDIA GPUドライバのインストール](https://note.com/setoyama60jp/n/n600df9f34230)
* [CUDAのインストール](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)
* [CuDNNのインストール](https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html)
* [Clangのインストール](https://apt.llvm.org/)
* [CMakeのインストール](https://github.com/Kitware/CMake)
* [Dockerのインストール](https://docs.docker.com/engine/install/ubuntu/)
* [NVIDIA Dockerのインストール](https://docs.nvidia.com/ai-enterprise/deployment-guide/dg-docker.html#installing-docker)
* [NodeJS+npmのインストール](https://www.npmjs.com/package/n)
* [Rのインストール](https://cran.r-project.org/bin/linux/ubuntu/)
* [OpenCVのインストール](https://github.com/jayrambhia/Install-OpenCV)
* [SSH serverの稼働](https://linuxize.com/post/how-to-enable-ssh-on-ubuntu-18-04/)