---
# System prepended metadata

title: Deep Learning Train 注意事項
tags: [Deep Learning, Docker]

---

Author : @juirmin 
<style>
    img{
        width:50vw;
        margin:10px;
    }

</style>
<div style="display:flex;">
    

<svg role="ITALAB" width="32" height="32" viewBox="0 0 325 246" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M235 0H89.5L81 22H147L65.5 246H111L192.5 22H243L235 0Z" fill="#B7A978"/>
<path d="M75 40H121L46.5 246H0L75 40Z" fill="black"/>
<path d="M250 40H204L278.5 246H325L250 40Z" fill="black"/>
<path d="M167.613 147H242.703L258.613 191H151.613L167.613 147Z" fill="black"/>
</svg>

<p style="margin-top:5px;margin-left:5px;">
ITALAB    
</p>
</div>

# Deep Learning Training Environment Creat 注意事項
## Ubuntu Drivers 安裝
1. `sudo apt update`
1. `sudo apt upgrade`
1. `sudo ubuntu-drivers install`

執行完上述步驟後安裝獨立顯卡驅動器
先透過`ubuntu-drivers devices`查看適合自己的Driver
![image.png](https://hackmd.io/_uploads/HJpANUcXT.png)
選取一個適合的，如 :`sudo apt install nvidia-driver-535`
:::danger
接下來有可能不會出現下面的畫面
:::
:::info
安裝過程中會設置 boot password 要記住密碼，等等會用到
:::
安裝完成後重新開機會看到以下畫面，請務必按照以下步驟
![image.png](https://hackmd.io/_uploads/SkujHL5Xa.png)
1. 選擇 enroll mok
2. 選擇 continue
3. 選擇 yes
4. 輸入剛剛設定的 boot password
5. 接著 reboot

完成以上步驟後即可測試`nvidia-smi`


### 安裝失敗

1. sudo apt purge nvidia-*
2. sudo apt autoremove


## Docker

為了避免過往的套件與現存套件產生衝突，或任何不必要的資源殘留，我們在訓練前通常會需要format電腦，確保每次進行實驗皆能擁有乾淨的環境。也方便未來在撰寫環境時能輕易地整理出需要的資訊。

而一個完整的、乾淨的訓練環境，必須包含CUDA、Python3以及相關套件（Pytorch、Keras和Tensorflow）。在那之前我們還必須先安裝Ubuntu等OS在主機上，過於耗費時間。因此，我們使用[Docker](https://aws.amazon.com/tw/docker/)作為基礎架設實驗環境。

### 安裝Docker
更新Update list:
``` bash
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
       && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
       && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
```
安裝 Docker
``` bash
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
```


確認 Docker
```
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```

本 [ITALAB](https://hub.docker.com/r/juirmin/italab/tags) 系列在 [nvcr.io](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tensorflow) 所釋出的Images上進行一系列小幅度的調整(安裝opencv、調整使用者等)，方便未來使用者即便在不熟悉linux的情況下也能快速上手。
### 將 User 加入 docker group
使用`getent group`即可確認Group list裡是否有docker
![image.png](https://hackmd.io/_uploads/HJH5XLqQa.png)
接著透過`sudo gpasswd -a $USER docker`將使用者加入docker群組中
可以使用`newgrp docker`更新docker群組狀態

## 執行ITALAB Docker環境
在完成Docker安裝後，只須執行以下指令即可快速建立所需環境

``` bash
cd ~ #進入使用者的專屬資料夾
mkdir MyFloder #建立一個名稱為MyFloder的資料夾
```

### tensorflow
``` bash
docker run --ipc=host --gpus all -it --rm -v ~/MyFloder:/MyFloder juirmin/italab:juirmin-0.1
```

### torch
```
docker run --ipc=host --gpus all -it --rm -v ~/MyFloder:/MyFloder juirmin/italab:22.01-torch
```


:::warning
如果要確認有沒有成功連接到GPU，可以在<font  color='red'>**Emulator內**</font>執行 `nvidia-smi`
:::

* Docker 指令介紹

|          指令           |                                解釋                                |
|:-----------------------:|:------------------------------------------------------------------:|
| -v ~/MyFloder:/MyFloder |          將本機端上的~/MyFloder與Docker上的/MyFloder同步           |
|       --ipc=host        |                Use the host system’s IPC namespace.                |
|       --gpus all        | 將主機上的 GPU 控制權<font  color='red'>全部</font >轉移至Docker上 |

* SSH Docker專區


| command                        | discribe              |
| ------------------------------ |:--------------------- |
| docker images                  | 查看現有的image       |
| docker image rm -f <images_id> | 刪除image             |
| docker container ls            | 查看執行中的container |
| docker attach <container_id>   | 加入container         |



更多關於Docker的介紹可以參考以下幾篇 
[撰寫Dockerfile](https://hackmd.io/@TUOoRfcaRqKKblaFNrq36A/dockerfile)、
[Docker & Container 介紹](https://hackmd.io/@TUOoRfcaRqKKblaFNrq36A/docker)、
[安裝 docker & docker-compose on Ubuntu18.04](https://hackmd.io/@TUOoRfcaRqKKblaFNrq36A/install_docker)、
[docker-compose 啟動多個容器](https://hackmd.io/@TUOoRfcaRqKKblaFNrq36A/composeyml)






### [CUBLAS_WORKSPACE_CONFIG DOC](https://docs.nvidia.com/cuda/cublas/)









###### tags: `Deep Learning` `Docker`