리눅스를 사용하다 보면 예기치 않게 어떤 사용자는 cuda-10.0을 사용하게 될 것이고 어떤 사용자는 cuda-10.1을 사용하게 될 것이다. 물론 사용자 home 폴더의 .bashrc에서 지역변수를 사용하여 각각 다른 환경에서 사용할 수 있지만 cuda뿐만 아니라 cuda에 어떤 mpi를 사용하고 다른 compiler 등을 사용할 때는 구성하기가 약간 복잡해질 수가 있다. 그래서 오늘은 나도 이번에 배우게 된 environment-modules에서 대해 알아보도록 하겠다. 나는 사전작업을 위해 cuda10.0과 cuda10.1이 설치되어 있는 상태이다.
(base) root@ckkim:~# apt-get install environment-modules
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libtcl8.6 tcl8.6
Suggested packages:
tcl-tclreadline
The following NEW packages will be installed:
environment-modules libtcl8.6 tcl8.6
0 upgraded, 3 newly installed, 0 to remove and 26 not upgraded.
Need to get 0 B/1,106 kB of archives.
After this operation, 4,652 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
..
..
(base) root@ckkim:~# logout
Connection to 192.168.15.159 closed.
✘
──────────────────────────────────────────────────────────────────────
[2020-09-08 17:23.03] ~
[.LAPTOP-OJ2LO4LK] ➤ ssh root@192.168.15.159
root@192.168.15.159's password:
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-45-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
33 packages can be updated.
9 updates are security updates.
Your Hardware Enablement Stack (HWE) is supported until April 2023.
Last login: Tue Sep 8 17:21:54 2020 from 192.168.15.166
-bash: /usr/bin/tclsh: No such file or directory
-bash: export: _moduleraw: not a function
-bash: export: module: not a function
위와 같이 environment-modules를 설치 하고 logout후 다시 login을 하게 된다면 bash 쪽에 보기 좋지 않은 모습으로 나올 것이다. 그렇다면 tcl이란 패키지도 설치하면 된다.
(base) root@ckkim:~# apt-get install tcl
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
tcl
0 upgraded, 1 newly installed, 0 to remove and 26 not upgraded.
위와 같이 tcl 패키지를 설치 하고 logout후에 다시 login을 하게 되면 정상적인 login 화면을 볼 수 있다.
(base) root@ckkim:/usr/share/modules/modulefiles# ls
dot module-git module-info modules null use.own
(base) root@ckkim:/usr/share/modules/modulefiles# mkdir cuda
(base) root@ckkim:/usr/share/modules/modulefiles# cp modules cuda/cuda-10.1
(base) root@ckkim:/usr/share/modules/modulefiles# vim cuda/cuda-10.1
#%Module1.0#####################################################################
##
## modules modulefile
##
proc ModulesHelp { } {
global version prefix
puts stderr "\tmodules - loads the modules software & application environment"
puts stderr "\n\tThis adds $prefix/* to several of the"
puts stderr "\tenvironment variables."
puts stderr "\n\tVersion $version\n"
}
module-whatis "loads the modules environment"
# for Tcl script use only
set version 4.1.1
set prefix /usr/share/modules
setenv MODULESHOME $prefix
prepend-path PATH /usr/bin
prepend-path MANPATH /usr/share/man
# enable module versioning modulepath
#module use /usr/share/modules/versions
기본 설정 경로는 위와 같이 /usr/share/modules/modulesfiles이다. 저기서 우리가 환경변수를 설정하기 위해서는 기본 제공되어 있는 modules파일을 수정 후 사용해야 한다. 그래서 cuda를 예로 들기 위하여 cuda폴더를 만들고 modules파일을 cuda-10.1 파일로 이름 변경하여 복사하였다. 그 아래는 cuda-10.1 파일이다 원본(modues 파일).
#%Module1.0#####################################################################
##
## modules modulefile
##
module-whatis "cuda-10.1"
# for Tcl script use only
prepend-path PATH /usr/local/cuda-10.1/bin
prepend-path LD_LIBRARY_PATH /usr/local/cuda-10.1/lib64:/usr/local/cuda-10.1/extras/CUPTI/lib64
# enable module versioning modulepath
#module use /usr/share/modules/versions
위와 같이 본인에 환경에 맞는 경로로 설정 해 주면 된다. 이후 나는 cuda-10.1 파일을 복사 후 수정하여 cuda-10.0 파일도 동일하게 만들었다.
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# module avail
--------------------- /usr/share/modules/modulefiles -------------------------------
cuda/cuda-10.0 cuda/cuda-10.1 dot module-git module-info modules null use.own
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# module load cuda/cuda-10.0
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# module list
Currently Loaded Modulefiles:
1) cuda/cuda-10.0
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# module unload cuda/cuda-10.0
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# module list
No Modulefiles Currently Loaded.
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# module load cuda/cuda-10.1
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# module list
Currently Loaded Modulefiles:
1) cuda/cuda-10.1
(base) root@ckkim:/usr/share/modules/modulefiles/cuda# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Apr_24_19:10:27_PDT_2019
Cuda compilation tools, release 10.1, V10.1.168
위에 코드블록을 보고 자세히 이해하길 바라며,
module avail은 현재 modules/modulefiles에 생성되어 있는 리스트를 보여주는 것이며, module load cuda/cuda-10.0을 통하여 cuda-10.0의 환경을 불러올 수 있다. 또한 module list는 현재 사용하고 있는 module환경을 보여준다. 마지막으로 module unload를 통해 사용하는 환경을 unload 시킬 수 있다. 위에 nvcc -V를 통해 cuda-10.0과 cuda-10.1 환경으로 변경되는 것을 확인할 수 있을 것이다.
supermicro ipmiview 사용법 (0) | 2020.09.18 |
---|---|
ubuntu 18.04 netplan - bonding 구성 (0) | 2020.09.16 |
Supermicro IPMICFG 사용법 (2) | 2020.09.02 |
Supermicro server ipmi_web 접속 및 사용법 (2) | 2020.08.31 |
LSI Raid - MSM (Megaraid-storage-management) 설치 및 사용 (7) | 2020.08.27 |