Change conda cache directory

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를 별다른 세팅 없이 설치하여 사용하고 있다면, 위와 같은 구조를 통해 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 파일은 크게 두개로 나뉘어 존재합니다.

  1. 각 사용자의 /home/username/.condarc
  2. 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