主として機械学習用を目的としたサーバーをセットアップした際の備忘録。
Contents
構成
主として開発機, 利用実機, およびその予備機の3台。
微妙に構成が異なるところもあるが構成は以下の通り。
- OS: Ubuntu Server 20.04
- CPU: AMD EPYC 7742 (64C128T) xN
- Memory: 64GB x8 xN
- GPU: NVIDIA A100 (HGX NVLink x4, PCIe)
- N/W: 10GbE x2
- Xilinx Alveo U50LV
- Storage:
- Samsung Pro 980 NVMe/PCIe SSD 1TB xN
- WD-Red SA500 SATA SSD 4TB xN
- NFS など
基本
ネットワーク
/etc/netplan/*.yaml
$ sudo netplan apply
NTP, タイムゾーン
/etc/systemd/timesyncd.conf
NTP=ntp.nict.jp
$ sudo systemctl restart systemd-timesyncd.service
$ timedatectl set-timezone Asia/Tokyo
apt
思いついたものを適当に。
$ sudo apt install emacs nfs-common cmake build-essential autofs gkrellm gkrelltop gkrellm-cpufreq
$ sudo apt install screen clang libhiredis-dev redis-server gv mosh net-tools source-highlight
~/.bashrc
less で強調表示(highlight)
- LESS='-RN'
- LESSOPEN='| /usr/share/source-highlight/src-hilite-lesspipe.sh %s'
ホスト名変更
- /etc/hostname
- /etc/hosts
アプリケーション
- SmartGit
- Visual Studio Code
別途 Remote-SSH 拡張機能で接続しておく
その他
/etc/fstab
tmpfs, relatime など
~/.screenrc
proxy の使用 (必要に応じて)
1 2 3 4 5 |
/etc/apt/apt.conf.d/proxy.conf Acquire { HTTP.proxy "~"; HTTPS.proxy "~"; } $ sudo snap set system proxy.http=~ $ sudo snap set system proxy.https=~ |
NVIDIA driver
DKMS を活用する。
1 2 3 4 5 6 7 8 9 |
$ sudo apt install dkms /etc/modprobe.d/blacklist-nouveau.conf blacklist nouveau options nouveau modeset=0 $ sudo update-initramfs -k all -u $ sudo shutdown -r now $ sudo ./NVIDIA-Linux-x86_64-xxx.xx.run --no-opengl-files dkms/yes, 32bit/no ($ nvidia-smi) |
機械学習関連でガッツリGPUに負荷を掛けるとほぼ固まる問題対応
1 2 3 4 5 |
/etc/default/grub GRUB-CMDLINE-LINUX-DEFAULT="" # remove maybe-ubiquity GRUB-CMDLINE-LINUX="iommu=off amd_iommu=off" $ sudo update-grub $ sudo reboot |
ZFS
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sudo apt install zfsutils-linux $ sudo zpool create rpool raidz/mirror /dev/sda /dev/sdb /dev/... $ zpool status/list, zdb $ zfs get all rpool 初期状態 dedup: off, compression: off, atime: on, acltype: off, xattr: on $ sudo zfs set atime=off rpool $ sudo zfs set compression=on rpool $ sudo zfs set acltype=posixacl rpool $ sudo zfs set xattr=sa rpool $ sudo zfs set canmount=off rpool $ sudo zfs create rpool/xxx /etc/cron.d/zfsutils-linux --> 3か月毎に変更 |
ROOT
1 2 3 4 5 6 |
$ sudo apt install libx11-dev libxpm-dev libxft-dev libxext-dev libssl-dev python3-dev python3-numpy $ cmake ../root-6.24.00/ -DCMAKE_INSTALL_PREFIX=/home/xxx/local/root/root_v6.24.00 -DCMAKE_C_FLAGS="-O3 -mtune=native" -DCMAKE_CXX_FLAGS="-O3 -mtune=native" -Dminuit2=ON -Drootfit=ON -Dbuiltin_fftw3=ON -Dbuiltin_gsl=ON -- Enabled support for: asimage builtin_afterimage builtin_clang builtin_cling builtin_fftw3 builtin_gsl builtin_llvm builtin_lz4 builtin_lzma builtin_nlohmannjson builtin_openui5 builtin_pcre builtin_tbb builtin_vdt builtin_xrootd builtin_xxhash builtin_zstd clad dataframe exceptions fftw3 gdml http imt mathmore mlp minuit2 pyroot roofit webgui root7 runtime_cxxmodules shared ssl tmva tmva-cpu tmva-pymva spectrum vdt x11 xrootd $ cmake --build . -- -j300 $ cmake --build . --target install |
Nginx
後続の JupyterHub や Docker駆動の各種Webサービスへ、
サブディレクトリからアクセスさせるための reverse-proxy として動作させる。
1 2 3 |
$ sudo apt install nginx /etc/nginx/conf.d/reverseproxy.conf /var/www/html/index.html |
Python/Conda
python/conda 環境は conda-forge で問題なさそうなので、Miniforge (link)を用いる。
Python v3.8系列の最終版をインストールした。
(PyROOT が v3.8系を参照するようにビルドしたため)
JupyterHub/Lab
(Rootless-) Docker
GitLab の移設
[オンプレ] GitLab を移設, アップデートする [Docker]
PukiWiki
Portainer
RedisInsight
phpVirtualBox
VirtualBox をブラウザから全て制御できるようにする → TBU
NVIDIA driver persistence
Xilinx Alveo U50LV
その他
スレッド数制限
XXX: OPENBLAS, OMP, MKL
1 2 3 4 5 6 |
/etc/systemd/system/jupyterhub.service Environment="XXX_NUM_THREADS=32" /root/jupyter/jupyterhub_config.py c.Spawner.env_keep: 'XXX_NUM_THREADS' /etc/profile --> bash.bashrc export XXX_NUM_THREADS=32 |