Change anaconda cache directories
Conda는 기본적으로 env마다 cache를 따로 가지고 있습니다.
서버 환경에서 여러명이 conda를 사용할 시 어느새 conda의 pkgs와 cache 용량이 몇백기가의 용량을 잡아먹는 것을 볼 수 있습니다.
conda가 사용하는 기본 cache directory는 사용자의 home 폴더 하위 (home/username/.conda
)에 생기는데, 보통 home 폴더들은 메인 SSD에 위치하므로 시간이 지남에 따라 conda cache 때문에 SSD의 용량이 매우 부족해질 수 있습니다.
따라서 전체 사용자에 대해 conda의 cache directory를 다른곳(ex: HDD) 로 변경하는 방법에 대해서 설명합니다.
Conda cache directories
conda를 별다른 세팅 없이 설치하여 사용하고 있다면, 위와 같은 구조를 통해 conda를 사용하게 됩니다.
root user 가 최초로 conda를 설치할 시 root의 유저의 home 하위의 anaconda3 라는 폴더가 생성이되고,
이후 conda를 사용하는 유저들은 해당 폴더에서 ./conda init
으로 자신의 conda를 시작합니다.
conda info
명령어를 통해서 conda의 configuration 값을 확인할 수 있습니다.
active environment : base
active env location : /home/tako/anaconda3
shell level : 1
user config file : /home/junpyo/.condarc
populated config files : /home/tako/anaconda3/.condarc
conda version : 4.10.3
conda-build version : 3.21.5
python version : 3.9.7.final.0
virtual packages : __cuda=11.4=0
__linux=5.15.0=0
__glibc=2.31=0
__unix=0=0
__archspec=1=x86_64
base environment : /home/tako/anaconda3 (read only)
conda av data dir : /home/tako/anaconda3/etc/conda
conda av metadata url : None
channel URLs : https://repo.anaconda.com/pkgs/main/linux-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/linux-64
https://repo.anaconda.com/pkgs/r/noarch
package cache : /home/tako/anaconda3/pkgs
/home/junpyo/.conda/pkgs
envs directories : /home/tako/anaconda3/envs
/home/junpyo/.conda/envs
platform : linux-64
user-agent : conda/4.11.0 requests/2.24.0 CPython/3.8.5 Linux/4.15.0-194-generic ubuntu/18.04.5 glibc/2.27
UID:GID : 1008:1008
netrc file : /home/junpyo/.netrc
offline mode : False
위의 결과에서, package cache와 envs directories의 값이 /home/(root user)/anaconda3/pkgs(envs),
/home/username/.conda/pkgs(envs)
인것을 확인할 수 있고, 이는 각각 shared cache 와 local cache directory입니다.
따라서 위의 config 값을 바꿔주면 cache의 저장 경로가 바뀌게 됩니다.
Change cache directories
.condarc
파일은 크게 두개로 나뉘어 존재합니다.
- 각 사용자의
/home/username/.condarc
- anaconda root directory
/home/rootuser/anaconda3/.condarc
당연하게도 1번의 파일을 수정할 시 해당 유저에게만 configuration이 적용되며, 2번의 파일을 수정할 시 모든 유저에게 default값으로 configuration이 적용됩니다.
따라서 /home/rootuser/anaconda3/.condarc
파일을 수정해줍니다.
anaconda를 설치한 username이 tako 라고 가정하고 변경하고 싶은 HDD의 경로는 /mnt/hdd/conda/username/.conda
라고 하겠습니다.
- Open
.condarc
file
sudo vim ~/anaconda3/.condarc
- Add lines
## Add below lines
envs_dirs:
- /mnt/hdd/conda/$USER/.conda/envs
pkgs_dirs:
- /mnt/hdd/conda/$USER/.conda/pkgs
- Check changes
위와 같이 추가 후 파일을 저장한 뒤 다른 유저로 접속하여 conda info
로 변경사항을 확인해줍니다.
active environment : base
active env location : /home/tako/anaconda3
shell level : 1
user config file : /home/junpyo/.condarc
populated config files : /home/tako/anaconda3/.condarc
conda version : 4.10.3
conda-build version : 3.21.5
python version : 3.9.7.final.0
virtual packages : __cuda=11.4=0
__linux=5.15.0=0
__glibc=2.31=0
__unix=0=0
__archspec=1=x86_64
base environment : /home/tako/anaconda3 (read only)
conda av data dir : /home/tako/anaconda3/etc/conda
conda av metadata url : None
channel URLs : https://repo.anaconda.com/pkgs/main/linux-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/linux-64
https://repo.anaconda.com/pkgs/r/noarch
package cache : /mnt/hdd/conda/junpyo/.conda/pkgs
envs directories : /mnt/hdd/conda/junpyo/.conda/envs
/home/junpyo/.conda/envs
/home/tako/anaconda3/envs
platform : linux-64
user-agent : conda/4.10.3 requests/2.26.0 CPython/3.9.7 Linux/5.15.0-52-generic ubuntu/20.04.4 glibc/2.31
UID:GID : 1002:1003
netrc file : None
offline mode : False
test env를 만들어 확인해봅니다.
conda env create -n test python==3.8
conda env list
# conda environments:
#
test /data1/conda/junpyo/.conda/envs/test
base * /home/tako/anaconda3