---
# System prepended metadata

title: Updating Nvidia driver 20230826

---

---
tags: 2023年度, log, gpu
---

# Updating Nvidia Driver 2023/08/26


概ね前回のアップデートログに従って進めている
- https://hackmd.io/7aQqVEFkTg-m08zD5qG8FA?both

## Updated versions:
- GPU Driver Update
    - Driver: 520.61.05
    - CUDA  : 11.8 (latest: 12.2 [2023/08/26])
        - https://discuss.pytorch.org/t/pytorch-for-cuda-12/169447?page=2
        - CUDA12は、まだPytorchの動作が不安定ぽい？
    - cudnn : 8.9.3


## progress

前回のアップデート時にスキップされていたサーバ
- gpu06 (460.32.03, 11.2)
- gpu15 (460.32.03, 11.2)
- gpu25 (479.57.02, 11.4)→ (470.57.02, 11.4)

前回のアップデート時にスキップされている表記だったが、実際に見てみたらアップデートが実行されていたサーバー
- gpu07 (460.32.03, 11.2)　→ (495.29.05, 11.5)
- gpu19 (460.91.03, 11.2) → (495.29.05, 11.5)

実行済みリスト
- [x] gpu01
- [x] gpu02
- [x] gpu03
- [x] gpu04
- [ ] gpu05 (skip: 稼働していない)
- [ ] gpu06 (skip: 稼働していない)
- [ ] gpu07
- [x] gpu08
- [x] gpu09 (495.29.05, 11.5)
- [x] gpu10 (495.29.05, 11.5)
- [ ] gpu11 (skip: 稼働していない)
- [x] gpu12
- [x] gpu13
- [x] gpu14
- [x] gpu15 
- [ ] gpu16 (skip: 稼働していない)
- [x] gpu17 (error: gpu-driver-setupでSSH ERROR -> 実行時先頭に`ANSIBLE_SCP_IF_SSH=y`を付けることで対応)
- [x] gpu18
- [x] gpu19 (495.29.05, 11.5)
- [ ] gpu20 (error: シンボリックリンクの作成でerror, 個別対応が必要)
- [ ] gpu21 (skip: 稼働していない)
- [x] gpu22
- [x] gpu23
- [x] gpu24
- [ ] gpu25 (error: シンボリックリンクの作成でerror, 個別対応が必要)
- [x] gpu26 (error: 再起動に失敗)　-> 再度実行して成功
- [ ] gpu27 (skip: 起動のたびにLANが切り替わるため保留)
- [ ] gpu28 (skip: 稼働していない)

## Update Process

### cuda ファイル設置
- [cuda toolkit platform](https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local) → cuda_11.8.0_520.61.05_linux.run
- ansible-playbooks/setup_minimal/gpu-driver-setup/files/ に設置



### cudnn ファイル設置
- [cudnn-archive](https://developer.nvidia.com/rdp/cudnn-archive) → cudnn-linux-x86_64-8.9.3.28_cuda11-archive.tar.xz
- ansible-playbooks/setup_minimal/gpu-driver-setup/files/ に設置


過去のアップデートログに従ってcudnnファイルを編集
```bash=
TGT_NAME="cudnn-linux-x86_64-8.9.3.28_cuda11-archive"
TGT_PATH=$TGT_NAME.tar.xz 
TGT_DIR=$TGT_NAME

#ファイル解凍
tar -Jxvf $TGT_PATH

#元の圧縮ファイルを削除
rm $TGT_PATH 

#libディレクトリ名変更 (site.ymlに対応できるようにするため)
mv $TGT_DIR/lib $TGT_DIR/lib64

#再圧縮
tar -Jcvf $TGT_PATH $TGT_DIR 

```


### Ansible
1. `gpu-driver-setup/tasks/install_cuda.yml`修正
```
- name: install nvidia driver and cuda via run file
  include: driver_cuda.yml
  become: yes
  with_items:
    - { filename: 'cuda_11.8.0_520.61.05_linux.run', driver: '--driver', override: '--override' }
    # - { filename: 'cuda_11.5.1_495.29.05_linux.run', driver: '--driver', override: '--override' }

```

```
- name: link CUDA
  file: src=/usr/local/cuda-11.8 dest=/usr/local/cuda state=link
  #file: src=/usr/local/cuda-11.5 dest=/usr/local/cuda state=link

```

2. `gpu-driver-setup/tasks/install_cudnn.yml`修正
```
- name: install cudnn
  include: cudnn.yml
  became: yes
  with_items:
    - { version: 11.8, filename: cudnn-linux-x86_64-8.9.3.28_cuda11-archive.tar.xz }
    # - { version: 11.5, filename: cudnn-linux-x86_64-8.3.1.22_cuda11.5-archive.tar.xz }
```

3. 空いてるgpuサーバ（gpu09）で動作確認する
- 08/26 森の作業はここまで
```bash=
# syntax check
ansible-playbook site.yml --syntax-check
# check list of task
ansible-playbook site.yml -i hosts -l gpu09.lrlab --tags "gpu-setup" --list-tasks
# dry run
ansible-playbook site.yml -i hosts -l gpu09.lrlab --tags "gpu-setup" --ask-sudo-pass -C
# run
ansible-playbook site.yml -i hosts -l gpu09.lrlab --tags "gpu-setup" --ask-sudo-pass
```

1回目の実行時、エラー発生
> fatal: [gpu09.lrlab]: FAILED! => {"changed": true, "cmd": "cp -P /home/lrlab-admin/cuda/lib/libcudnn* /usr/local/cuda-11.8/lib64", "delta": "0:00:00.004587", "end": "2023-08-26 17:00:47.086948", "msg": "non-zero return code", "rc": 1, "start": "2023-08-26 17:00:47.082361", "stderr": "cp: cannot stat '/home/lrlab-admin/cuda/lib/libcudnn*': No such file or directory", "stderr_lines": ["cp: cannot stat '/home/lrlab-admin/cuda/lib/libcudnn*': No such file or directory"], "stdout": "", "stdout_lines": []}

ここで、`gpu-driver-setup/tasks/cudnn.yml` を修正
- /home/lrlab-admin/cuda/lib → /home/lrlab-admin/cuda/lib64
```
- file: path=/home/lrlab-admin/cuda state=directory
- unarchive:
    src: ../files/cudnn_files/{{ file.filename }}
    dest: /home/lrlab-admin/cuda
    extra_opts:
        - --strip-components=1
- shell: cp /home/lrlab-admin/cuda/include/cudnn*.h /usr/local/cuda-{{ file.version }}/include
- shell: cp -P /home/lrlab-admin/cuda/lib64/libcudnn* /usr/local/cuda-{{ file.version }}/lib64
- shell: chmod a+r /usr/local/cuda-{{ file.version }}/include/cudnn*.h /usr/local/cuda-{{ file.version }}/lib64/libcudnn*
- file: path=/home/lrlab-admin/cuda state=absent
```
2回目の実行時、書き換えの保存を忘れたため、同じエラーを出力した。
3回目の実行にて完了した。


4. 全てのGPUサーバーで実行
- TODO: 08/30
```bash=
# syntax check
ansible-playbook site.yml --syntax-check
# check list of task
ansible-playbook site.yml -i hosts -l gpu --tags "gpu-setup" --list-tasks
# dry run
ansible-playbook site.yml -i hosts -l gpu --tags "gpu-setup" --ask-sudo-pass -C
# run
ansible-playbook site.yml -i hosts -l gpu --tags "gpu-setup" --ask-sudo-pass
```