TMUX: ML 실무자를 위한 기본 사용법
이 글에서는 머신러닝 작업을 위해 tmux를 어떻게 시작해서 사용하면 SSH 연결이 끊겨도 원격 작업을 절대 잃지 않는지 살펴봅니다. 이 글은 AI가 번역한 글입니다. 오역이 있다면 댓글로 언제든지 알려주세요.
Created on September 15|Last edited on September 15
Comment
우리의 동안 최근 MLOps 강의/과정 우리는 사람들이 머신러닝 여정을 빠르게 반복하며 발전시킬 수 있는 방법을 보여주었습니다. 특히 모델 개발, 학습, 검증을 위한 파이프라인에서 Weights & Biases를 더 잘 활용하는 방법에 집중했습니다.
하지만 일상 업무에서는 다음과 같은 여러 다른 도구들도 함께 사용했습니다 git, github, jupyter, conda, docker2강에서는 하이퍼파라미터 최적화를 수행하기 위해 원격 머신에서 여러 개의 학습 실행을 동시에 구동했습니다. 즉, 원격에 SSH로 접속해 코드를 실행하고, 실험을 체계적으로 오케스트레이션해야 했습니다.
이런 종류의 작업에서 제게 꼭 필요한 도구는 tmux이 터미널 기반 도구는 원격(또는 로컬) 머신에서 지속되는 터미널 세션을 설정할 수 있게 해줍니다. 원격 머신을 다룰 때는 SSH 연결이 끊길 위험이 있어 특히 중요합니다. 저도 강의 중에 실수로 터미널 세션을 닫았지만, tmux를 사용하고 있었기 때문에 곧바로 작업으로 복귀할 수 있었습니다(고마워요, tmux). SSH 연결이 끊기면 tmux 세션은 단지 분리될 뿐이며, 세션에서 실행 중이던 모든 프로세스는 서버에서 백그라운드로 계속 돌아갑니다. 서버에 다시 SSH로 접속한 뒤 활성 tmux 세션에 attach하면 곧바로 작업을 이어갈 수 있습니다!
하지만 tmux는 그 이상입니다. 로컬 머신에서도 매우 유용하게 쓸 수 있는 도구죠. 아래 이미지처럼 여러 패널(Pane)을 만들고 화면을 분할할 수 있습니다. 저는 특정 작업을 위해 세션을 만들어 두고, 이어서 작업이 필요할 때 언제든 다시 접속해 재첨부(reattach)하곤 합니다. 그러면 그때 실행 중이던 모든 터미널 창과 프로그램이 그대로 제자리를 지키며 저를 기다리고 있거든요.

tmux와 기타 터미널 기반 도구에 관한 훌륭한 자료는 다음과 같습니다 MIT CSAIL 미싱 세메스터 강의.
이번 글에서 다룰 내용은 다음과 같습니다:
목차
시작하기
먼저 tmux를 사용할 머신에 tmux를 설치해야 합니다. 제 경우에는 접속할 원격 머신에 설치합니다.
원격이나 클라우드 머신에서 대부분 리눅스를 사용하도록 설정하기 때문에 이 글에서는 리눅스를 기준으로 설명합니다.
💡
# on bash/szh$ sudo apt install tmux
tmux가 제대로 동작하는지 확인하는 간단한 명령도 있습니다:
$ tmux

들어가면 화면에 여러 정보를 보여주는 비교적 풍부한 터미널 창을 볼 수 있습니다:

- 이것은 [세션: 창, 패널]의 번호 표기입니다. 지금은 세션 0, 첫 번째 창, 첫 번째 패널에 있습니다. (각각 하나만 있지만, 왜 세션 번호가 0부터 시작하는지는 모르겠네요 🤣)
- 1:szh* 별표(*)는 현재 이름이 지정된 1번 창에 있다는 뜻입니다 zsh
기본적으로 tmux의 프리픽스(prefix) 명령은 Ctrl + b (여기에서 변경할 수 있습니다 tmux.conf 파일에서 저는 사용합니다 Ctrl + a). tmux 프리픽스를 입력하면 tmux 동작을 실행할 수 있습니다. 예를 들어:
- c 새 창을 만듭니다.
- " 현재 창을 세로로 둘로 분할합니다 (보이는 대로). Shift + '
- % 세로로 분할합니다 (보이는 대로) Shift + 5 )
- 패널 간 이동: ⬅️➡️ 화살표 키
- , 창 이름 바꾸기
- exit 또는 Ctrl + d 창이나 패널을 닫기 위해
새 패널을 만들거나 창을 분할할 때마다 커서는 해당 창으로 이동합니다.

저는 사용합니다 Ctrl + a tmux 프리픽스로 사용하며, 대신 Ctrl + b
새 창도 만들 수 있습니다(실제로는 탭처럼 보입니다). 창 사이를 이동하려면 다음을 사용합니다 p (이전) 및 n (다음) 보통 저는 입력합니다 n 여러 번 반복해서 훑어보고 다시 돌아오세요. 창이 많다면 창 번호를 사용해 해당 창으로 바로 이동할 수도 있습니다.

tmux에 다시 연결하기
이래서 tmux를 쓰는 겁니다. 세션이 끊어진 뒤 tmux로 다시 돌아가려면 어떻게 하면 되나요?
요약: 실행 중인 tmux 세션이 하나뿐이라면 다음을 실행하세요 $ tmux a
💡

끝입니다! 기본 tmux 사용법을 익히셨습니다.
여러 GPU가 있는 머신에서 여러 개의 스위프 에이전트 실행하기
원격 머신에서 연산을 실행할 때는 SSH 연결 끊김이나 인터넷 장애로 작업이 중단되면 안 됩니다. 이럴 때는 tmux가 해결책입니다!
우리 MLOps 강의 2강에서, 같은 머신에서 에이전트 2개를 병렬로 실행하는 방법을 보여드렸습니다. 제 머신에는 GPU가 2개 있어서 학습 스크립트를 두 인스턴스로 병렬 실행해 스위프를 두 배 빠르게 진행할 수 있습니다. tmux를 사용해서 진행해 봅시다:
첫 번째 창에서 스위프 컨트롤러를 실행하세요

에이전트 2개를 병렬로 실행하기
GPU마다 에이전트 1개씩, 총 2개의 에이전트를 생성하겠습니다. 또한 모니터링도 진행합니다. nvidia-smi 두 GPU가 모두 사용 중인지 확인하기 위해서입니다.
- 우리는 복사합니다 wandb agent 명령
- 창을 하나 더 만듭니다: Ctrl + a + c 그리고 명령을 붙여넣습니다
- 이번에도 동일하게 진행하되, 다음과 함께 합니다 CUDA_VISIBLE_DEVICES=1 두 번째 에이전트를 두 번째 GPU에서 실행합니다(GPU는 0과 1). 기본값은 GPU 0입니다.
- 마지막으로 확인용 창을 하나 더 만듭니다 nvidia-smi 그리고 두 GPU가 모두 사용 중인지 확인합니다.
접두 키를 눌러야 합니다 wandb agent …로 호출합니다 CUDA_VISIBLE_DEVICES=<num GPU>.
💡

저는 별칭을 사용합니다 ca = conda activate 이 화면 캡처에서
How to Perform Massive Hyperparameter Experiments with W&B
In this article, we look at how Weights & Biases can help you track and organize a massive experiment with thousands of runs.
Leveraging Pre-Trained Models for Image Classification
In this article, we fine-tune a pre-trained model on a new classification dataset, to understand how well transfer learning helps the model train on new data.
결론
Add a comment