๐Miniforge
๐ Introduction
conda๋ฅผ ์ฐ๋ฉด์ ์ด๋ฐ ๊ฒฝํ ํ ๋ฒ์ฏค ์๋ค:
- ์ค์น๋ ๋๋๋ฐ ์คํํ๋ฉด crash
- segmentation fault
- ํ๊ฒฝ์ด ์ฌํ์ด ์๋จ
Stack Overflow๋ฅผ ๋ค์ ธ๋ด๋ ๋๋ ทํ ๋ต์ด ์ ๋์ค๊ณ , ํจํค์ง๋ฅผ ์ง์ ๋ค ๊น์๋ค ๋ฐ๋ณตํ๋ค๊ฐ ๊ฒฐ๊ตญ ํ๊ฒฝ ์์ฒด๋ฅผ ๋ ๋ ค๋ฒ๋ฆฐ ๊ฒฝํ. ์ด ๋ฌธ์ ์ ๋ณธ์ง์ ๋จ์ํ์ง ์๋ค.
โ ๋๋ถ๋ถ์ ๋ฌธ์ ๋ Python์ด ์๋๋ผ ABI + linker ๋ฌธ์
์ฐ๋ฆฌ๊ฐ ํํ โconda๊ฐ ๊ผฌ์๋คโ๋ผ๊ณ ํํํ๋ ํ์์ ์๋น์๋ Python ๋ ๋ฒจ์ด ์๋ ๊ทธ ์๋, C/C++ ๋ฐ์ด๋๋ฆฌ ๋ ๋ฒจ์์ ๋ฐ์ํ๋ ํธํ์ฑ ๋ฌธ์ ๋ค. ์ด ๊ธ์์๋:
- ์ Miniforge๊ฐ ๋ ์์ ์ ์ธ์ง
- ABI / toolchain / linker ๋ ๋ฒจ์์ ๋ถ์
- ์ค์ ๋ก ์ crash๊ฐ ๋๋์ง
- ์ด๋ป๊ฒ ํด๊ฒฐ๋๋์ง
๋ฅผ ๋จ๊ณ์ ์ผ๋ก ์ค๋ช ํ๋ค.
๐ฆ Conda Ecosystem ๊ตฌ์กฐ
๋จผ์ ๊ตฌ์กฐ๋ฅผ ์ ํํ ์ดํดํด์ผ ํ๋ค. conda ์ํ๊ณ๋ ํฌ๊ฒ distribution(๋ฐฐํฌํ)๊ณผ ํจํค์ง ๋งค๋์ ๋ ๊ณ์ธต์ผ๋ก ๋๋๋ค.
๐ ํต์ฌ:
- conda = ํจํค์ง ๋งค๋์
- Miniforge = distribution
ํํ conda์ Anaconda๋ฅผ ๋์ผ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, conda๋ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ํ๊ฒฝ์ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ด๊ณ , Anaconda๋ Miniforge๋ ๊ทธ conda๋ฅผ ํฌํจํ ๋ฐฐํฌํ์ด๋ค. ์ด๋ค ๋ฐฐํฌํ์ ์ฐ๋๋์ ๋ฐ๋ผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ค ์ฑ๋(ํจํค์ง ์ ์ฅ์)์์ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๋์ง๊ฐ ๋ฌ๋ผ์ง๋ค.
๐ฅ ํต์ฌ ์ง๋ฌธ
์ ๊ฐ์ conda์ธ๋ฐ ํ๊ฒฝ์ด ๊นจ์ง๊น?
๐ ๋ต:
ํจํค์ง๋ฅผ ์ด๋์ ๊ฐ์ ธ์ค๋์ง๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ
๊ฐ์ conda install numpy๋ผ๋, defaults ์ฑ๋์์ ๊ฐ์ ธ์จ numpy์ conda-forge์์ ๊ฐ์ ธ์จ numpy๋ ๋น๋ ํ๊ฒฝ ์์ฒด๊ฐ ๋ค๋ฅด๋ค. ์ด ์ฐจ์ด๊ฐ ๋จ์ผ ํจํค์ง์์๋ ๋๋ฌ๋์ง ์์ง๋ง, ์ฌ๋ฌ ํจํค์ง๊ฐ ์๋ก ์์กดํ๋ฉด์ ๊ฒฐํฉ๋ ๋ ๋ฌธ์ ๊ฐ ํญ๋ฐํ๋ค.
โ๏ธ Miniforge vs Default Conda
๊ธฐ๋ณธ conda
Anaconda๋ Miniconda๋ฅผ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ผ๋ก defaults ์ฑ๋์ ์ฌ์ฉํ๋ค.
์ฑ๋: defaults
ํน์ง:
- ๋ณด์์
- ์ผ๋ถ proprietary
Anaconda์ฌ์์ ๊ด๋ฆฌํ๋ ์ด ์ฑ๋์ ์์ ์ฑ์ ์ฐ์ ์ํ์ง๋ง, ํจํค์ง ์ ๋ฐ์ดํธ๊ฐ ๋๋ฆฌ๊ณ ์์ ์ ์ฌ์ฉ ์ ๋ผ์ด์ ์ค ์ ์ฝ์ด ์๋ค. ๋ํ ๊ฐ ํจํค์ง๊ฐ ๋ฐ๋์ ๋์ผํ ๋น๋ ํ๊ฒฝ์์ ์ปดํ์ผ๋๋ค๋ ๋ณด์ฅ์ด ์๋ค.
Miniforge
Miniforge๋ conda-forge ์ปค๋ฎค๋ํฐ์์ ๊ด๋ฆฌํ๋ ๊ฒฝ๋ ๋ฐฐํฌํ์ด๋ค.
์ฑ๋: conda-forge
ํน์ง:
- ์ต์ ํจํค์ง
- ์คํ์์ค
- mamba ํฌํจ
conda-forge๋ ์์ฒ ๋ช
์ ์ปจํธ๋ฆฌ๋ทฐํฐ๊ฐ ์ฐธ์ฌํ๋ ์คํ์์ค ์ฑ๋๋ก, ํจํค์ง ๋น๋์ ์ผ๊ด์ฑ์ ์์คํ
์ ์ผ๋ก ๋ณด์ฅํ๋ ์ธํ๋ผ๋ฅผ ๊ฐ์ถ๊ณ ์๋ค. ๋ํ Miniforge์๋ conda์ ๊ณ ์ ๋์ฒด์ฌ์ธ mamba๊ฐ ๊ธฐ๋ณธ ํ์ฌ๋์ด ์์ด ์์กด์ฑ ํด๊ฒฐ ์๋๊ฐ ์๋ฑํ ๋น ๋ฅด๋ค.
๐ ์ค์ํ ์ฐจ์ด:
ecosystem ์์ฒด๊ฐ ๋ค๋ฅด๋ค
๋จ์ํ โ์ด๋ค installer๋ฅผ ์ผ๋๋โ์ ๋ฌธ์ ๊ฐ ์๋๋ผ, ํจํค์ง๊ฐ ๋น๋๋๊ณ ํ ์คํธ๋๊ณ ๋ฐฐํฌ๋๋ ์ ์ฒด ํ์ดํ๋ผ์ธ์ด ๋ค๋ฅด๋ค๋ ๋ป์ด๋ค.
๐ง The Real Problem: ABI
๋๋ถ๋ถ์ ๋ฌธ์ = ABI mismatch
Python ํจํค์ง ์๋น์๋ ๋ด๋ถ์ ์ผ๋ก C/C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ค. numpy, scipy, pytorch, OpenCV ๋ฑ ๊ณผํ ๊ณ์ฐ์ด๋ ๋ฅ๋ฌ๋์์ ํต์ฌ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํจํค์ง๋ค์ด ๋ชจ๋ ๊ทธ๋ ๋ค. ์ด ํจํค์ง๋ค์ด ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋น๋๋๋ฉด ABI mismatch๊ฐ ๋ฐ์ํ๋ค.
ABI๋?
ABI(Application Binary Interface)๋ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ๋ค์ด ์๋ก ์ํตํ๊ธฐ ์ํ ์ ์์ค ์ฝ์์ด๋ค. ์์ค์ฝ๋ ๋ ๋ฒจ์ API์ ๋ฌ๋ฆฌ, ABI๋ ์ปดํ์ผ ์ดํ์ ๋ฐ์ด๋๋ฆฌ ํธํ์ฑ์ ๋ค๋ฃฌ๋ค.
ABI = ๋ฐ์ด๋๋ฆฌ ๊ฐ์ ์ฝ์
- ํจ์ ์ด๋ฆ (symbol)
- ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- calling convention
- libc / libstdc++ ๋ฒ์
์๋ฅผ ๋ค์ด, ๊ฐ์ std::string์ด๋ผ๋ ์ปดํ์ผ๋ฌ ๋ฒ์ ์ด๋ ๋น๋ ์ต์
์ ๋ฐ๋ผ ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ด ์์ ํ ๋ฌ๋ผ์ง ์ ์๋ค. ์์ค์ฝ๋๋ ๋์ผํด๋ ๋ฐ์ด๋๋ฆฌ๋ ์๋ก ํธํ๋์ง ์๋ ๊ฒ์ด๋ค.
๐ฅ ABI mismatch๊ฐ ๋ฐ์ํ๋ฉด
๐ ๊ฐ์ฅ ๋๋ฒ๊น ์ด๋ ค์
์ด๊ฒ ABI ๋ฌธ์ ์ ๊ฐ์ฅ ์ ์ง์ ์ธ ํน์ฑ์ด๋ค. ์ค์น๋ ๋๊ณ , import๋ ๋๊ณ , ์ฌ์ง์ด ๊ฐ๋จํ ์ฐ์ฐ๊น์ง๋ ์ ๋์๊ฐ๋ค. ํ์ง๋ง ํน์ ํจ์ ํธ์ถ ๊ฒฝ๋ก๋ฅผ ํ๋ ์๊ฐ segfault๊ฐ ํฐ์ง๋ค. ์๋ฌ ๋ฉ์์ง๋ ๋ถ์น์ ํ๊ณ , Python traceback์ผ๋ก๋ ์์ธ์ ์ถ์ ํ ์ ์๋ค.
๐งจ ์ค์ ์ (C++ ABI)
C++ ABI ๋ฌธ์ ์ ๋ํ์ ์ธ ์ฌ๋ก๋ฅผ ํ๋ ์ดํด๋ณด์. ์๋์ ๊ฐ์ ๋จ์ํ ํจ์๊ฐ ์๋ค๊ณ ํ์:
์ด ํจ์๋ฅผ ์ปดํ์ผํ ๋, GCC 5 ์ดํ๋ก ๋์
๋ _GLIBCXX_USE_CXX11_ABI ํ๋๊ทธ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ์์ ํ ๋ฌ๋ผ์ง๋ค.
์ปดํ์ผ ์ต์ :
๊ฒฐ๊ณผ:
๐ linker ์ ์ฅ:
โ๋ค๋ฅธ ํจ์โ
๊ฐ์ std::string foo()์ธ๋ฐ, mangled symbol์ด ์์ ํ ๋ค๋ฅด๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ A๋ old ABI๋ก ๋น๋ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ B๋ new ABI๋ก ๋น๋ํ๋ค๋ฉด, ๋งํน ๋จ๊ณ์์ โundefined symbolโ ์๋ฌ๊ฐ ๋๊ฑฐ๋, ์ด์ด ๋์๋ฉด ๋งํน์ ์ฑ๊ณตํ๋ ๋ฐํ์์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์ ๋ถ์ผ์น๋ก segfault๊ฐ ๋ฐ์ํ๋ค.
๐๏ธ Why conda-forge Works
๊ทธ๋ ๋ค๋ฉด conda-forge๋ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น? ํฌ๊ฒ ๋ค ๊ฐ์ง ๋ฉ์ปค๋์ฆ์ด ์๋ค.
1. Unified Toolchain
๐ ๋ชจ๋ ํจํค์ง๊ฐ ๋์ผ compiler๋ก ๋น๋
conda-forge๋ ์์ฒด์ ์ผ๋ก ๊ด๋ฆฌํ๋ compiler toolchain์ ์ฌ์ฉํด์ ๋ชจ๋ ํจํค์ง๋ฅผ ๋น๋ํ๋ค. ์๋ฅผ ๋ค์ด, conda-forge์์ ๋น๋๋๋ ๋ชจ๋ C++ ํจํค์ง๋ ๊ฐ์ ๋ฒ์ ์ GCC์ ๊ฐ์ _GLIBCXX_USE_CXX11_ABI ์ค์ ์ ์ฌ์ฉํ๋ค. ์ด๊ฒ๋ง์ผ๋ก๋ ABI mismatch์ ๋๋ถ๋ถ์ด ์์ฒ ์ฐจ๋จ๋๋ค.
2. Global Pinning
๐ ecosystem ์ ์ฒด๊ฐ ๋ง์ถฐ์ง
conda-forge๋ conda-forge-pinning์ด๋ผ๋ ์ค์ ์ค์ ํ์ผ๋ก ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ecosystem ์ ์ฒด์ ๊ฑธ์ณ ํต์ผํ๋ค. ํน์ ์์ ์ conda-forge์์ ๋น๋๋๋ ๋ชจ๋ ํจํค์ง๋ ๋์ผํ numpy ๋ฒ์ , ๋์ผํ Python ๋ฒ์ ์ ๋ง์ถฐ์ง๋ค. ๊ฐ๋ณ ํจํค์ง ๊ด๋ฆฌ์๊ฐ ์ ๊ฐ๊ฐ ๋ฒ์ ์ ์ ํํ๋ ๊ฒ์ด ์๋๋ผ, ์ํ๊ณ ์ ์ฒด๊ฐ ํ๋์ ๋ฒ์ ์ธํธ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด๋ค.
3. Mass Rebuild
๐ ABI propagation ํด๊ฒฐ
ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: numpy, Python)์ ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ๋ฉด, ๊ทธ์ ์์กดํ๋ ์์ฒ ๊ฐ์ ํจํค์ง๋ฅผ ์ผ๊ด ๋ฆฌ๋น๋(mass rebuild) ํ๋ค. ์ด ๊ณผ์ ์ ํตํด ABI ๋ณ๊ฒฝ์ด ์ํ๊ณ ์ ์ฒด์ ๊ท ์ผํ๊ฒ ์ ํ๋์ด, โA๋ ์ ๋ฒ์ ์ธ๋ฐ B๋ ์์ง ์ ๋ฒ์ โ์ด๋ผ๋ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
4. run_exports
๐ dependency ์๋ ์ ํ
run_exports๋ conda-forge์ ๋ ์ํผ ๋ฉ์ปค๋์ฆ์ผ๋ก, ๋น๋ ํ์ ์์กด์ฑ์ด ๋ฐํ์์๋ ํ์ํ๋ค๋ ๊ฒ์ ์๋์ผ๋ก ์ ์ธํ๋ค. ์๋ฅผ ๋ค์ด libpng์ ๋น๋ ์ ์ฌ์ฉํ๋ค๋ฉด, ํด๋น ํจํค์ง๋ฅผ ์ค์นํ ๋ ํธํ๋๋ libpng์ด ์๋์ผ๋ก ๋ฐํ์ ์์กด์ฑ์ ์ถ๊ฐ๋๋ค. ์ด๋ฅผ ํตํด โ๋น๋ํ ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌโ์ โ์คํํ ๋ ๋ก๋๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌโ์ ๋ฒ์ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํ๋ค.
๐ Linker Level Deep Dive
ํ ๋จ๊ณ ๋ ๊น์ด ๋ค์ด๊ฐ๋ณด์. ์ค์ ๋ก ๋ฐ์ด๋๋ฆฌ๊ฐ ๋ก๋๋ ๋ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ์ดํด๋ณธ๋ค.
๋ฌธ์ ์ํฉ
ldd ๋ช
๋ น์ด๋ก ๋ฐ์ด๋๋ฆฌ์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ์ ํ์ธํด๋ณด๋ฉด, ์ผ๋ถ๋ conda ํ๊ฒฝ ๋ด๋ถ์์, ์ผ๋ถ๋ ์์คํ
์์ ๋ก๋๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๐ ๋ฌธ์ :
conda ํ๊ฒฝ ์์ libstdc++์ ์์คํ
์ libc๊ฐ ์๋ก ๋ค๋ฅธ ABI๋ฅผ ๊ธฐ๋ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค. ์ด๋ฐ ํผํฉ ๋ก๋ฉ์ ํนํ CUDA๋ MKL ๊ฐ์ ๋ฌด๊ฑฐ์ด ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ๋น๋ฒํ๊ฒ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค.
ํด๊ฒฐ: RPATH
๐ conda ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ์ ์ฌ์ฉ
conda-forge์์ ๋น๋๋ ํจํค์ง๋ค์ RPATH(Runtime Library Search Path)๋ฅผ $ORIGIN ๊ธฐ๋ฐ์ผ๋ก ์ค์ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐ์ด๋๋ฆฌ ์คํ ์ ์์คํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ conda ํ๊ฒฝ ๋ด๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ์ ์ ์ผ๋ก ๋ก๋ํ๊ฒ ๋์ด, ์์คํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ถฉ๋์ ํผํ ์ ์๋ค.
โ ๏ธ defaults์์ ๊นจ์ง๋ ์ด์
๋ฐ๋ฉด defaults ์ฑ๋์์๋ ์ด๋ฐ ์ผ์ด ์๊ธธ ์ ์๋ค:
๐ toolchain ๋ถ์ผ์น
Package A๋ gcc 9๋ก, Package B๋ gcc 11๋ก ๋น๋๋๋ฉด, ๊ฐ๊ฐ์ ์ ๋์ํ์ง๋ง ๊ฐ์ ํ๊ฒฝ์ ํจ๊ป ์ค์นํ๋ ์๊ฐ ABI๊ฐ ์ถฉ๋ํ๋ค. defaults ์ฑ๋์์๋ ํจํค์ง๋ณ ๋น๋ ํ๊ฒฝ์ด ํต์ผ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ํฉ์ด ๋ฐ์ํ ์ฌ์ง๊ฐ conda-forge๋ณด๋ค ํจ์ฌ ํฌ๋ค.
๐งจ Real-world Failure
์ค์ ๋ก ๊ฐ์ฅ ํํ๊ฒ ๋ง์ฃผ์น๋ ์๋๋ฆฌ์ค ํ๋๋ฅผ ๋ณด์:
์ฒซ ๋ฒ์งธ ๋ช ๋ น์ PyTorch ๊ณต์ ์ฑ๋์์, ๋ ๋ฒ์งธ๋ defaults ์ฑ๋์์ ํจํค์ง๋ฅผ ๊ฐ์ ธ์จ๋ค. ์ด ๋ ์ฑ๋์ ํจํค์ง๋ ์๋ก ๋ค๋ฅธ toolchain์ผ๋ก ๋น๋๋์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
๊ฒฐ๊ณผ:
- OpenMP ์ถฉ๋
- libstdc++ mismatch
- segfault
ํนํ OpenMP ๊ด๋ จ ์ถฉ๋์ด ์ ๋ช ๋๋ค. PyTorch๋ ์์ฒด OpenMP๋ฅผ ๋ฒ๋คํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , scipy๋ numpy๊ฐ ์ฌ์ฉํ๋ OpenMP์ ์ฌ๋ณผ์ด ๊ฒน์น๋ฉด์ ๋ฐํ์์ ์์ธก ๋ถ๊ฐ๋ฅํ ๋์์ ์ผ์ผํจ๋ค.
๐ค Robotics / RL์์ ๋ ์ค์ํ ์ด์
๋ก๋ณดํฑ์ค๋ ๊ฐํํ์ต ๋ถ์ผ์์๋ ์ด ๋ฌธ์ ๊ฐ ํนํ ์น๋ช ์ ์ด๋ค. ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ๋ถ์๊ณผ ๋ฌ๋ฆฌ, ์ด ๋ถ์ผ์ ์ํํธ์จ์ด ์คํ์ ์ฌ๋ฌ ๊ณ์ธต์ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค.
๐ ๋ณต์ก๋ โ
Python์์ ์์ํด C++ ๋ฐ์ธ๋ฉ์ ๊ฑฐ์น๊ณ , CUDA ์ปค๋์ ํธ์ถํ๊ณ , GPU ๋ฐํ์๊น์ง ๋ด๋ ค๊ฐ๋ ์ด ๊ธด ์ฒด์ธ์์, ์ด๋ ํ ์ง์ ์ด๋ผ๋ ABI๊ฐ ๋ง์ง ์์ผ๋ฉด ์ ์ฒด๊ฐ ๋ฌด๋์ง๋ค.
๐ ABI ๊นจ์ง๋ฉด:
- simulation crash
- NaN
- ํ์ต ์คํจ
ํนํ NaN์ด ์กฐ์ฉํ ํผ์ง๋ ๊ฒฝ์ฐ๊ฐ ๊ฐ์ฅ ์ํํ๋ค. crash๋ ๊ทธ๋๋ง ๋ฐ๊ฒฌ์ด ๋์ง๋ง, ABI ๋ถ์ผ์น๋ก ์ธํ ๋ฏธ๋ฌํ ์์น ์ค๋ฅ๋ ํ์ต์ด ํ์ฐธ ์งํ๋ ํ์์ผ ๋ฐ๊ฒฌ๋๊ธฐ๋ ํ๋ค.
โ Best Practice
Miniforge๋ฅผ ์ค์นํ ํ, ์๋ ์ค์ ์ผ๋ก conda-forge๋ฅผ ๊ธฐ๋ณธ ์ฑ๋๋ก ๊ณ ์ ํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
channel_priority strict์ conda-forge์ ์๋ ํจํค์ง๊ฐ ์์ผ๋ฉด ๋ฌด์กฐ๊ฑด ๊ฑฐ๊ธฐ์ ๊ฐ์ ธ์ค๋๋ก ๊ฐ์ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฑ๋ ๊ฐ ํผํฉ์ผ๋ก ์ธํ ABI ๋ฌธ์ ๋ฅผ ์์ฒ ์ฐจ๋จํ ์ ์๋ค.
ํ๊ฒฝ ์์ฑ ์์๋ mamba๋ฅผ ํ์ฉํ๋ฉด ์์กด์ฑ ํด๊ฒฐ์ด ํจ์ฌ ๋น ๋ฅด๋ค.
๐ ๏ธ Installation (Ubuntu 24.04)
1. ๋ค์ด๋ก๋
๐ ๊ณต์ installer ๋ฐฉ์ (Ask Ubuntu)
uname๊ณผ uname -m์ ์ฌ์ฉํด ํ์ฌ OS์ ์ํคํ
์ฒ์ ๋ง๋ installer๋ฅผ ์๋์ผ๋ก ์ ํํ๋ค. ARM(aarch64) ํ๊ฒฝ์์๋ ๋์ผํ ๋ช
๋ น์ด๋ก ์ค์นํ ์ ์๋ค.
2. ์ค์น
์ค์น ๊ณผ์ ์์ ๋ผ์ด์ ์ค ๋์, ์ค์น ๊ฒฝ๋ก ์ง์ ๋ฑ์ ์ง๋ฌธ์ด ๋์จ๋ค.
- conda init โ YES (NETL Multiphase Flow Science)
conda init์ YES๋ก ์ ํํ๋ฉด ์
ธ ์ค์ ํ์ผ(.bashrc ๋ฑ)์ conda ์ด๊ธฐํ ์คํฌ๋ฆฝํธ๊ฐ ์๋์ผ๋ก ์ถ๊ฐ๋์ด, ํฐ๋ฏธ๋์ ์ด ๋๋ง๋ค conda๊ฐ ํ์ฑํ๋๋ค.
3. ์ ์ฉ
์ค์น ์งํ์๋ ์ ธ์ ์ฌ์์ํ๊ฑฐ๋ ์ ๋ช ๋ น์ด๋ก ์ค์ ์ ๋ฐ์ํด์ผ conda ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
4. ํ์ธ
๋ ๋ช ๋ น์ด ๋ชจ๋ ๋ฒ์ ์ด ์ถ๋ ฅ๋๋ฉด ์ค์น๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋ ๊ฒ์ด๋ค.
โ ๏ธ Notes
- Mambaforge deprecated (2024 ์ดํ) (GitHub)
- Miniforge ๊ถ์ฅ
๊ณผ๊ฑฐ์๋ mamba๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ณ๋์ Mambaforge๋ฅผ ์ค์นํด์ผ ํ์ง๋ง, 2024๋ ๋ถํฐ Miniforge์ mamba๊ฐ ๊ธฐ๋ณธ ํฌํจ๋๋ฉด์ Mambaforge๋ ๋ ์ด์ ์ ์ง๋์ง ์๋๋ค. ์ ๊ท ์ค์น ์์๋ ๋ฐ๋์ Miniforge๋ฅผ ์ฌ์ฉํ์.
๐งพ Final Takeaway
์ด ๊ธ์ ํต์ฌ:
Miniforge๋ ๋จ์ํ installer๊ฐ ์๋๋ผ ABI๊ฐ ํต์ ๋ binary ecosystem์ด๋ค
conda-forge์ unified toolchain, global pinning, mass rebuild, run_exports ๋ฉ์ปค๋์ฆ์ด ๊ฒฐํฉ๋์ด, ์์ฒ ๊ฐ์ ํจํค์ง๊ฐ ํ๋์ ์ผ๊ด๋ ๋ฐ์ด๋๋ฆฌ ํ๊ฒฝ์ ์ด๋ฃจ๊ฒ ๋๋ค. ์ด๊ฒ์ด โ๊ทธ๋ฅ ์ ๋๋โ ํ๊ฒฝ์ ๋น๋ฐ์ด๋ค.
๐ Final Recommendation
์ด ์ธ ๊ฐ์ง ์กฐํฉ์ด๋ฉด ๋๋ถ๋ถ์ Python ๊ณผํ ๊ณ์ฐ, ๋ฅ๋ฌ๋, ๋ก๋ณดํฑ์ค ํ๊ฒฝ์ ์์ ์ ์ผ๋ก ๊ตฌ์ถํ ์ ์๋ค.
๐ฌ Closing
conda์์ ๊ฒช๋ ์ด์ํ ๋ฌธ์ ๋ค์ ๋๋ถ๋ถ:
๐ ์ฝ๋ ๋ฌธ์ ๊ฐ ์๋๋ผ ๐ ABI ๋ฌธ์ ๋ค
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฌธ์ ๋:
Miniforge๋ก ๋๋ถ๋ถ ํด๊ฒฐ๋๋ค
๋ค์์ conda ํ๊ฒฝ์์ ์์ธ ๋ชจ๋ฅผ crash๋ฅผ ๋ง๋๋ฉด, ํจํค์ง๋ฅผ ์์ฌํ๊ธฐ ์ ์ ๋จผ์ ์ด๋ค ์ฑ๋์์ ์ค์นํ๋์ง๋ฅผ ํ์ธํด๋ณด์.
Reference
- https://mamba.readthedocs.io/en/latest/installation/mamba-installation.html#fresh-install-recommended