⚡

開発環境を一瞬で復元!tmux + tmuxinator で作る機械学習ワークフロー

に公開

機械学習(ML)の実験を行う際、毎回ターミナルで同じ作業を繰り返していませんか?

  1. 仮想環境(conda/venv)を有効化する
  2. エディタを立ち上げる
  3. nvidia-smi でGPU監視画面を作る

今回は、端末多重化ツール tmux と、その設定管理ツール tmuxinator を組み合わせて、この環境構築をコマンド一発で自動化する方法を紹介します。

tmux とは?

tmux (Terminal Multiplexer) は、1つのターミナルウィンドウ内で複数のセッション、ウィンドウ、ペイン(分割画面)を管理できるツールです。

最大の特徴は 「セッションの維持」 です。SSH接続が切れてしまっても、tmux内で実行しているプロセス(長い学習ジョブなど)はバックグラウンドで生き続けます。再接続時に attach すれば、元の画面がそのまま戻ってきます。(私の場合は機械学習の実行に丸1日かかるのでtmuxがないとやっていけません...)

最低限覚えておくべきショートカット

tmuxの操作は、基本的に プレフィックスキー(デフォルトは Ctrl + b)を押してから、コマンドキーを押します。

操作 キー(Ctrl+bの後) 説明
画面分割(上下) " 現在のペインを上下に分割
画面分割(左右) % 現在のペインを左右に分割
ペイン移動 矢印キー アクティブなペインを移動
ウィンドウ作成 c 新しいウィンドウ(タブ)を作成
デタッチ d セッションを残したまま抜ける

tmuxinator とは?

tmuxだけでは、「PC再起動後のレイアウト復元」までは自動化できません。
そこで登場するのが tmuxinator です。

これは、tmuxのウィンドウ構成や実行コマンドを YAMLファイル に記述し、コマンド一発でその環境を再現してくれるツールです。

インストール

Ruby製のツールなので、gemを使ってインストールします。

gem install tmuxinator

実践:機械学習用レイアウトを作る

ここからが本題です。ML開発に必要な「コーディング」「リソース監視」を2つのウィンドウに分けた設定例を作成します。

1. プロジェクト作成

以下のコマンドを実行すると、設定ファイルが生成されます。

tmuxinator new ml_project

2. 設定ファイル (YAML) の記述

生成されたファイル(~/.config/tmuxinator/ml_project.yml)を以下のように編集します。

name: ml_project
root: ~/projects/my_ml_experiment

# 【重要】ウィンドウが開くたびに自動実行されるコマンド
# ここで仮想環境を activate しておくと非常に楽です
pre_window: conda activate my_env

windows:
  - editor: # 1. 作業用メイン画面
      layout: main-vertical
      panes:
        - nvim .   # 左側: 
        -          # 右上: git操作用などのシェル
        -          # 右下: python train.py などを実行する場所

  - monitor: # 2. リソース監視画面
      layout: even-vertical
      panes:
        - watch -n 1 nvidia-smi  # GPU監視 (1秒更新)
        - htop                   # CPU/メモリ監視

ポイント解説

  • pre_window: conda activate ...
    全てのペインで最初から仮想環境が有効化された状態で立ち上がります。
  • monitor ウィンドウ
    学習中はGPUメモリの枯渇やCPUボトルネックが起きやすいため、専用の監視画面を固定で作っています。

使い方

設定が終われば、あとは以下のコマンドを打つだけです。

tmuxinator start ml_project

これだけで、分割された画面、監視ツールが全て立ち上がった「いつもの開発環境」が一瞬で完成します。

まとめ

  • tmux: 画面分割とセッション維持(SSH切断対策)
  • tmuxinator: 複雑なレイアウトとコマンド実行の自動化

この2つを組み合わせることで、開発を開始するまでのリードタイムをゼロにできます。ぜひ試してみてください。

Discussion