# NVIDIA DRIVER AND INSTALL DOCKER
## 1. 安裝 NIVIDA 驅動程式 (GPU)
```bash
# 更新系統
sudo apt update && sudo apt upgrade -y
# 移除所有nvidia套件
sudo apt autoremove nvidia* --purge -y
# 安裝ubuntu nvudia 套件
sudo apt install ubuntu-drivers-common -y
# 列出nvidia可安裝DRIVER版本
ubuntu-drivers devices
ubuntu-drivers list
# 並動更新, 若移除以下第二行之# 指定版本
sudo ubuntu-drivers autoinstall
#sudo apt install nvidia-driver-525
# 列出顯卡硬體內容
sudo lshw -C display
# 重開機
sudo reboot now
```
## 2. 安裝 Docker (GPU)
- 移除
```bash
sudo apt-get remove docker docker-engine docker.io containerd runc -y
sudo apt-get update -y
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1
docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
```
- 安裝 docker-ce (GPU/CPU)
```bash
sudo apt-get update -y
sudo apt-get install php-cli zip jq apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" -y
sudo apt-get update -y
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
```
- 安裝NVIDIA Container Toolkit (nvidia-docker2) (GPU)
```bash
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update -y
sudo apt-get install nvidia-docker2 -y
sudo systemctl restart docker.service
sudo systemctl restart docker
```
- 測試是否成功 (GPU)
```
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```
- 加入 Docker 群組, 記得你的身分為ubuntu (GPU/CPU)
```
sudo groupadd docker
sudo usermod -aG docker $USER
sudo systemctl enable docker # 啟動 Docker 服務
docker --version
```
- 測試安裝結果, 記得你的身分為ubuntu (GPU/CPU)
```
sudo su
su ubuntu
docker run hello-world
```
## :a: 到這裡就可以了, 以下參考用
## 3. 安裝 Docker Composer
```
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
```
## 4. GPU Support (Optional)
If you have a GPU and want to leverage its power within a Docker container, follow these steps to install the NVIDIA Container Toolkit:
```
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# Configure NVIDIA Container Toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# Test GPU integration
docker run --gpus all nvidia/cuda:11.5.2-base-ubuntu20.04 nvidia-smi
```
# old Docker
https://unimimic.github.io/posts/docker-gpu/
## 移除舊版Docker (可選)
```
sudo apt-get remove docker docker-engine docker.io containerd runc
```
## 更新apt安裝包以及所需的相關套件
```
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
```
## 加入docker的官方GPG Key
```
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```
## 設置repository
```
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```
## 更新apt安裝包
```
sudo apt-get update
```
## 安裝docker
```
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
## 加入 Docker 群組, 記得你的身分為ubuntu
```
sudo groupadd docker
sudo usermod -aG docker $USER
sudo systemctl enable docker # 啟動 Docker 服務
docker --version
```
## 確認是否安裝成功
```
docker run hello-world
```
# :a: 新版
## 1. 安裝 NIVIDA 驅動程式 (GPU)
```bash
# 更新系統
sudo apt update && sudo apt upgrade -y
# 移除所有nvidia套件
sudo apt autoremove nvidia* --purge -y
# 安裝ubuntu nvudia 套件
sudo apt install ubuntu-drivers-common -y
# 列出nvidia可安裝DRIVER版本
ubuntu-drivers devices
ubuntu-drivers list
# 並動更新, 若移除以下第二行之# 指定版本
sudo ubuntu-drivers autoinstall
#sudo apt install nvidia-driver-525
# 列出顯卡硬體內容
sudo lshw -C display
# 重開機
sudo reboot now
```
## 2. 移除 Docker (GPU/CPU)
```bash
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1
docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
```
## 3. 安裝 Docker (GPU/CPU)
```bash
sudo apt-get update -y
sudo apt-get install php-cli zip jq apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" -y
sudo apt-get update -y
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
```
### 4. Install the NVIDIA Container Toolkit.
- Configure the repository
```bash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update -y
```
- Install the NVIDIA Container Toolkit packages
```bash
sudo apt-get install -y nvidia-container-toolkit
```
### 5. Configure Docker to use Nvidia driver
```bash
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
```
### 6. 測試是否成功 (GPU)
```bash
sudo docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
```
### 7. 加入 Docker 群組, 記得你的身分為ubuntu (GPU/CPU)
```
sudo groupadd docker
sudo usermod -aG docker $USER
sudo systemctl enable docker # 啟動 Docker 服務
docker --version
```
### 8. 測試安裝結果, 記得你的身分為ubuntu (GPU/CPU)
```
sudo su
su ubuntu
docker run hello-world
```
### 9. Start the container
```bash
docker run -d --gpus=all -v ollama:/root/.ollama -p 443:11434 --name ollama ollama/ollama
```
```bash
docker run -d --gpus=all -v ollama:/root/.ollama -p 443:11434 -e OLLAMA_MAX_LOADED_MODELS=4 -e OLLAMA_NUM_PARALLEL=16 --name ollama ollama/ollama
```
啟動 ollama 前面加上這個
OLLAMA_NUM_PARALLEL=4 OLLAMA_MAX_LOADED_MODELS=4 ollama xxxxxxxxxxxxx
### 10. 模型下載
```bash
docker exec ollama ollama pull jcai/llama3-taide-lx-8b-chat-alpha1:Q4_K_M
docker exec ollama ollama pull jcai/llama3-taide-lx-8b-chat-alpha1:f16
docker exec ollama ollama pull jcai/breeze-7b-32k-instruct-v1_0:f16
```
### 11. 驗測
```bash
curl http://localhost:443/api/generate -d '{"model": "jcai/breeze-7b-32k-instruct-v1_0:f16","prompt":"Why is the sky blue?"}'
curl http://localhost:443/api/generate -d '{"model": "jcai/llama3-taide-lx-8b-chat-alpha1:f16","prompt":"Why is the sky blue?"}'
curl http://localhost:443/api/generate -d '{"model": "jcai/llama3-taide-lx-8b-chat-alpha1:Q4_K_M","prompt":"Why is the sky blue?"}'
curl http://localhost:443/api/chat -d '{"model": "jcai/breeze-7b-32k-instruct-v1_0:f16","messages": [{"role": "user", "content": "why is the sky blue?" }]}'
curl http://localhost:443/api/chat -d '{"model": "jcai/llama3-taide-lx-8b-chat-alpha1:f16","messages": [{"role": "user", "content": "why is the sky blue?" }]}'
curl http://localhost:443/api/chat -d '{"model": "jcai/llama3-taide-lx-8b-chat-alpha1:Q4_K_M","messages": [{"role": "user", "content": "why is the sky blue?" }]}'
```
```bash
curl http://203.145.222.186:443/api/generate -d '{"model": "jcai/breeze-7b-32k-instruct-v1_0:f16","prompt":"Why is the sky blue?"}'
curl http://203.145.222.186:443/api/generate -d '{"model": "jcai/llama3-taide-lx-8b-chat-alpha1:f16","prompt":"Why is the sky blue?"}'
curl http://203.145.222.186:443/api/generate -d '{"model": "jcai/llama3-taide-lx-8b-chat-alpha1:Q4_K_M","prompt":"Why is the sky blue?"}'
curl http://203.145.222.186:443/api/chat -d '{"model": "jcai/breeze-7b-32k-instruct-v1_0:f16","messages": [{"role": "user", "content": "why is the sky blue?" }]}'
curl http://203.145.222.186:443/api/chat -d '{"model": "jcai/llama3-taide-lx-8b-chat-alpha1:f16","messages": [{"role": "user", "content": "why is the sky blue?" }]}'
curl http://203.145.222.186:443/api/chat -d '{"model": "jcai/llama3-taide-lx-8b-chat-alpha1:Q4_K_M","messages": [{"role": "user", "content": "why is the sky blue?" }]}'
```