본문 바로가기

Env

Apple Silicon (M1pro) 환경에서, C++ 을 Python처럼 Jupyter notebook에서 사용하기 with Docker

코딩 테스트를 준비해볼 생각도 있고, 코드 자체를 너무 안만진지 오래된것 같아서 자료 구조부터 다시 공부해보려고 했습니다.

언어는 C++이 가장 익숙했기 때문에, 그대로 C++ 준비하려고 하였는데, 파이썬처럼 Jupyter notebook에 코드와 함께 마크다운으로 정리하면서 공부하면, 나중에 복습할때도 좋을 것 같아서, 관련 자료를 찾아봤는데, Xeus-Cling 이라는 Jupyter 커널을 발견했습니다.

https://github.com/jupyter-xeus/xeus-cling

 

GitHub - jupyter-xeus/xeus-cling: Jupyter kernel for the C++ programming language

Jupyter kernel for the C++ programming language. Contribute to jupyter-xeus/xeus-cling development by creating an account on GitHub.

github.com

Xeus-cling은 C++ 인터프리터인 Cling을 기반으로 합니다. Cling은 LLVM의 일부로 개발되었으며, C++ 코드를 즉시 컴파일하고 실행할 수 있는 REPL(Read-Eval-Print Loop) 환경을 제공합니다. Xeus-cling을 사용함으로써 사용자는 C++의 강력한 기능을 활용하여 실시간으로 코드를 실험하고, 데이터 시각화, 알고리즘 테스트, 대화형 문서 작성 등 다양한 작업을 수행할 수 있습니다.

 

하지만 문제가 있었는데, Xeus-cling이 아직 ARM 프로세서를 지원하지 않는다고 합니다. 따라서 Docker를 통해 환경을 구축하려고 했는데, Docker Hub에 다른 유저가 이미 Xeus-cling용으로 세팅해둔 이미지 파일이 있어서, 그걸 이용하였습니다.

아마 x86 환경에서 Linux 및 Conda 를 이용하는 것 같습니다.(뇌피셜임) 

https://hub.docker.com/r/datainpoint/xeus-cling-notebook

 

Docker

 

hub.docker.com

저도 Docker 사용이 처음이였어서, 관련 세팅에서 어려움을 겪었으니, Docker의 개념 및 사용 방법 등은 나중에 블로그에 따로 정리하도록 하고, 여기선 계속 진행하겠습니다.

docker pull datainpoint/xeus-cling-notebook

이미지 pull 하고,

docker run -p 8888:8888 --name <컨테이너 이름> <이미지 이름>

해당 이미지로 컨테이너 만들어준 뒤, 실행해줍니다.

포트의 경우, 로컬 머신의 8888 포트와 컨테이너의 8888 포트를 매핑하였습니다.

웹 브라우저 상에서 잘 구동 되는것을 확인하였습니다.

저는 Jupyter를 사용할 때, 주로 Vscode를 이용하므로 연동 작업까지 진행하였습니다. 

오른쪽 위의 Kernel이 아마 처음에는 선택이 안되있을 것이므로, Jupyter 익스텐션 설치 후에 선택해줍시다.

Jupyter Kernel 선택해주시면, 아마 처음에는 바로 Kernel 목록이 안뜨고, Jupyter URL을 입력하라고 할 텐데,

이때 Docker의 log를 확인해주시고, URL 복사 붙여넣기 해주시면 됩니다. 

 

Xeus-cling의 C++ 커널을 확인할 수 있습니다.

 

아무래도 로제타를 이용하여 구동하는 것이므로 성능이 좀 떨어질 수도 있다고 생각하지만, 학습 기록용으로 사용하기에 전혀 문제가 없다고 생각합니다.