애플리케이션이 다국어를 지원할 수 있도록 docker image에 다른 locale을 설치하는 것이 필요할 수 있습니다. 올바른 locale이 설치되지 않는다면 텍스트 데이터가 올바르게 표현되지 않는 문제를 겪을 수 있습니다. alpine docker image는 locale, locale-gen 명령어가 존재하지 않으며, apk add locale로 설치를 시도할 경우 locale이라는 패키지가 없다는 에러를 확인할 수 있습니다. alpine에서 locale을 사용하기 위해서는 alpine과 호환되는 locale 패키지를 별도로 설치해줘야합니다.
# install ko_KR locale # Note that locale -a is not available in alpine linux, use `/usr/glibc-compat/bin/locale -a` instead RUN /usr/glibc-compat/bin/localedef -i ko_KR -f UTF-8 ko_KR.UTF-8
위 명령어는 alpine linux를 지원하는 locale 패키지를 설치합니다. 해당 명령어를 실행하고나면, /usr/glibc-compat/bin 디렉토리에서 locale관련 명령어인 locale과 localedef를 확인할 수 있습니다.
compile locale
locale관련 패키지를 설치하고나면, 현재 시스템이 사용중인 locale과 사용 가능한 locale을 /usr/glibc-compat/bin/locale 명령어와 /usr/glibc-compat/bin/locale -a로 확인할 수 있습니다. 이를 확인해보면, 내가 사용하고자하는 ko_KR.UTF-8 이 없음을 확인할 수 있습니다.
locale을 정의한 파일들은 /usr/glibc-compat/share/i18n/locales 폴더 아래에 있고, charmap(캐릭터맵)에 대한 정보는 /usr/glibc-compat/share/i18n/charmaps 폴더 아래에 있습니다. 이 두 가지 정보가 localedef의 명령어로 컴파일 되며 컴파일을 하게되면 /usr/glibc-compat/lib/locale 폴더에 locale-archive라는 접두사(prefix)를 가진 파일이 생성되게 됩니다.
ko_KR.UTF-8 locale을 사용하기 위해서 아래 명령어로 locale을 컴파일 합니다.
1
RUN /usr/glibc-compat/bin/localedef -i ko_KR -f UTF-8 ko_KR.UTF-8
Set locale
이제 locale 관련 패키지도 설치하였고 필요한 locale도 컴파일 해줬으니, 환경변수에 locale을 설정해봅시다.
ubuntu는 기본적으로 bash shell을 사용하기 때문에, 환경변수를 로그인 쉘의 경우에는 ~/.bashrc에 미 로그인 쉘에는 /etc/profile에 설정합니다. alpine은 bash shell이 아닌 ash를 제공하는 busybox를 기본 shell로 사용합니다. 따라서 환경변수 설정은 로그인 쉘의 경우 ~/.profile, 미 로그인 쉘은 /etc/profile에 설정해야합니다.
(저의 경우는 미로그인 쉘을 사용했으므로 환경변수를 /etc/profile에 설정하였습니다.)
Check locale setting
설정을 완료하고나면, /usr/glibc-compat/bin/locale와 /usr/glibc-compat/bin/locale -a를 통해 locale이 ko_KR.UTF-8로 잘 설정되었음을 확인할 수 있습니다.
MML book 스터디를 진행하고있습니다. 이번 포스팅은 MML book Chapter 3.5. Orthonormal Basis에 대해서 정리한 내용입니다.
Chapter 2.6.1에서 basis vector의 속성을 살펴봤었습니다. 이 때, $n$-차원 벡터 공간에서 서로 선형 독립인 $n$개의 basis vector가 필요함을 배웠었습니다.
또한 Chapter 3.3과 3.4에서는 inner product를 벡터의 길이, 벡터 간 각도를 구하기 위해서 사용했었습니다. 이번 Chapter에서는 basis vector가 서로 orthogonal하고 basis vector의 길이가 1인 orthonormal basis basis에 대해서 이야기할 것입니다.
이 orthonormal basis의 개념은 나중에 support vector machine과 PCA를 다루는 Chapter 12, Chapter10에서 활용하게 될 것입니다.
2021.05.05 현재 RTX3090은 CUDA11 이상을 지원하는 딥러닝 프레임워크에 버전에서만 사용할 수 있습니다. 하지만 단순하게 pip install torch==1.7.1 torchvision==0.8.2 형태로 설치하면 CUDA error: no kernel image is available for execution on the device 에러를 마주할 수 있습니다. 이 때에는 반드시 pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 -f https://download.pytorch.org/whl/torch_stable.html형태로 설치해주어야합니다.
Alpine linux는 용량이 80MB이고, 컨테이너 이미지는 5MB밖에 안되는 초경량화된 리눅스 배포판입니다. alpine linux는 용량을 줄이기 위해 시스템의 기본 C runtime을 glibc 대신 musl libc 를 사용하는데요. 이로 인해 제가 즐겨쓰는 ubuntu기반의 작업들이 동작하지 않는 경우가 있습니다. 그 중 ubuntu에서의 locale 명령어가 대표적입니다. ubuntu의 locale은 glibc 기반으로 구현되어있기 때문에 alpine linux에서는 apk add locale 명령어로는 설치할 수 없습니다. 이번 포스팅은 alpine linux에서 locale을 설정하는 방법에 대해서 다룹니다.