こんにちは!日々のデータ分析やAI開発、お疲れ様です。
JupyterLab、便利ですよね。ブラウザ一つでコードが書けて、グラフもその場ですぐに出力できる。データサイエンティストやAIエンジニアにとって、もはやなくてはならない母艦と言えます。
しかし、こんな経験はありませんか?
「巨大なCSVファイルを読み込んだり、複雑な機械学習モデルを学習させていたら、突然ブラウザがフリーズした……」
「今、自分のPC(あるいはクラウドサーバー)のCPUやメモリがどれくらい逼迫しているのか分からず、怯えながらコードを実行している……」
大規模なデータ処理やAI・データサイエンスの世界では、「今、リソースがどうなっているか」を把握することは、コードを書くことと同じくらい重要です。
今回は、JupyterLabを単なるコードエディタから「リアルタイム・リソース監視ダッシュボード」へと進化させるエンジニアリング手法を解説します。さらに、分析用の重い処理とは別に「監視専用のカーネル」を独立させることで、メモリ枯渇によるフリーズを未然に防ぐ、プロの現場で即座に使える実践知をお伝えします。
これをマスターすれば、リソース不足による作業ロストの恐怖から解放され、毎日の開発体験が劇的に安定しますよ。一緒に仕組みを紐解いていきましょう!
—
1. 为什么我们需要在 JupyterLab 中做「リソース監視」なのか?
一般的な開発では、タスクマネージャーや `htop` コマンドを別画面で立ち上げてCPUやメモリの消費量を監視します。しかし、JupyterLab上でデータ分析やAIの実験をしている最中に、わざわざ別ウインドウを確認するのは集中力が途切れますよね。
また、JupyterLabの背後では「IPythonカーネル」という実行エンジンが動いています。このカーネルと監視プロセスを同じ土俵(同じプロセス空間)で動かしていると、万が一メモリが枯渇した際、監視システムごと仲良くフリーズしてしまい、原因追及すらできなくなります。
これを解決するのが、「マルチカーネルアーキテクチャによるリソース分離」です。
本記事で構築するアーキテクチャの全貌
1. メインカーネル: 通常のデータ分析やAIモデルの学習を行う場所。
2. 監視用別カーネル: システムのCPU・メモリ使用率を常にポーリング(定期取得)し、JupyterLab上に美しいリアルタイムグラフを描画し続ける場所。
3. 隔離のメリット: メインカーネルがメモリを食いつぶしてハングアップしても、監視カーネルは生き残り続けるため、リソースの暴走状況を最後まで確認できます。
—
2. 基礎セットアップ:環境構築と必要ライブラリ
まずは、この監視ダッシュボードを動かすための最小限にして最強の環境を整えます。Anaconda環境(あるいは仮想環境)をターミナルで開き、以下のコマンドを実行してください。
必要なパッケージのインストール
システムのハードウェアメトリクス(CPU、メモリ等)を高精度で取得する業界標準ライブラリ
pip install psutil
ノートブック上にリッチな動的グラフを描画するためのライブラリ
pip install plotly
> 先輩エンジニアからのワンポイントアドバイス
> グラフ描画には定番の `Matplotlib` も使えますが、今回はブラウザ上で滑らかにインタラクティブに動く `Plotly` を採用します。PlotlyはJupyterLabとの相性が抜群で、追加の拡張機能なしでも美しく軽量なダッシュボードを描画できます。
—
3. 実装:リアルタイム・プロセスメトリクス監視ノートブックの作成
ここからが本番です。JupyterLabを起動し、新しいPythonノートブックを開いてください。
今回は、`psutil` で自マシンのリソース情報を取得し、`plotly` を使って数秒おきにグラフを更新するスクリプトを構築します。
ステップ1: 動作確認(HelloWorld的アプローチ)
まずは、`psutil` が正しくOSからハードウェア情報を取得できているか、シンプルなコードで確認しましょう。
import psutil
現在のCPU使用率を0.5秒間隔のサンプリングで取得(パーセンテージ)
cpu_percent = psutil.cpu_percent(interval=0.5)
現在のメモリ使用状況を取得
memory_info = psutil.virtual_memory()
print(f”現在のCPU使用率: {cpu_percent}%”)
print(f”総メモリ容量: {memory_info.total / (10243):.2f} GB”)
print(f”使用中メモリ: {memory_info.used / (10243):.2f} GB ({memory_info.percent}%)”)
このコードを実行し、現在のPCの正確な数値が出力されれば、センサー部分は正常に機能しています。
—
ステップ2: リアルタイム・ダッシュボードのコード実装
それでは、JupyterLabのセル内で動的にグラフが更新される、リアルタイム監視ダッシュボードのコードを組み立てます。
JupyterLabの出力エリアをリアルタイムに書き換えるために、IPythonの `display` と `clear_output` を利用します。
import time
from IPython.display import clear_output, display
import plotly.graph_objects as go
import psutil
監視データを蓄積するリスト(直近20データ分を保持)
max_history = 20
time_history = []
cpu_history = []
memory_history = []
print(“=== リアルタイム・リソース監視を開始します(停止するにはセルを中断してください) ===”)
try:
while True:
# 1. 現在時刻とメトリクスの取得
current_time = time.strftime(“%H:%M:%S”)
cpu_p = psutil.cpu_percent(interval=1.0) # 1秒かけてCPU使用率を計測
mem_p = psutil.virtual_memory().percent # メモリ使用率(%)
# 2. 履歴データに追加
time_history.append(current_time)
cpu_history.append(cpu_p)
memory_history.append(mem_p)
# データ数が上限を超えたら古いものを削除(スライド窓の作成)
if len(time_history) > max_history:
time_history.pop(0)
cpu_history.pop(0)
memory_history.pop(0)
# 3. Plotlyを使ったインタラクティブなグラフの構築
fig = go.Figure()
# CPU使用率のトレース(赤系のライン)
fig.add_trace(
go.Scatter(
x=time_history,
y=cpu_history,
name=”CPU Usage (%)”,
mode=”lines+markers”,
line=dict(color=”firebrick”, width=3),
)
)
# メモリ使用率のトレース(青系のライン)
fig.add_trace(
go.Scatter(
x=time_history,
y=memory_history,
name=”Memory Usage (%)”,
mode=”lines+markers”,
line=dict(color=”royalblue”, width=3),
)
)
# グラフのレイアウト調整(Y軸は0〜100%に固定)
fig.update_layout(
title=”Live System Resource Monitor (CPU & Memory)”,
xaxis_title=”Time”,
yaxis_title=”Usage (%)”,
yaxis=dict(range=[0, 100]),
template=”plotly_dark”, # 開発者に優しいダークテーマ
height=400,
margin=dict(l=40, r=40, t=40, b=40),
)
# 4. 前回の出力をクリアして最新のグラフを描画
clear_output(wait=True)
display(fig)
except KeyboardInterrupt:
# ユーザーがセルの実行を停止(Interrupt)したときのクリーンアップ
print(“\n監視を安全に終了しました。”)
このコードを実行すると、JupyterLabのセル内にダークテーマの美しい折れ線グラフが現れ、1秒ごとにリアルタイムでニョキニョキと右側にデータが追加されていきます。
—
4. プロの技:リソース監視用カーネルを「別立て」する運用術
さて、ここからがアーキテクトとしての真骨頂です。
先ほど作成した監視スクリプトは無限ループ(`while True:`)で動き続けます。これを普段データ分析をしている同じカーネルで動かしてしまうと、他のノートブックやコードを同時に実行できなくなります。
JupyterLabで真に堅牢な監視環境を作るには、「監視専用のIPythonカーネル(別プロセス)」を立てる必要があります。その手順をスマートに解説します。
手順1: 監視専用の仮想環境またはカーネルの登録
Anaconda環境であれば、既存の環境をそのまま別のカーネルとしてJupyterに登録できます。
ターミナルを開き、以下のコマンドを実行してください。
現在のPython環境に「ipykernel」がインストールされていることを確認・導入
pip install ipykernel
Jupyterに対して、この環境を「MonitorKernel」という名前で登録する
python -m ipykernel install –user –name=monitor_kernel –display-name=”Python (Resource Monitor)”
手順2: JupyterLabでの切り替え
JupyterLabの画面右上(カーネル名が表示されている部分、例えば `Python 3` と書かれている箇所)をクリックし、「Python (Resource Monitor)」に変更します。
これで、
- メインタブのカーネル: 重い機械学習の学習やデータ処理用
- 別タブ(監視用)のカーネル: 先ほどのリアルタイム監視スクリプト専用
という完全なプロセス分離が完了しました。
仮にメインの処理がメモリを食いつぶしてフリーズしても、監視タブ側は独立したOSプロセスとして動いているため、「今メモリが何%までいって落ちたのか」を正確に視認できます。
—
5. まとめと、明日からの開発が変わるポイント
今回は、JupyterLabを「監視ダッシュボード」化し、プロセスメトリクスをリアルタイム描画するエンジニアリング手法を解説しました。
- `psutil` を使って、OSレベルのCPU・メモリメトリクスを安全に取得した。
- `Plotly` を組み合わせて、JupyterLab上で美しく滑らかに動くライブグラフを構築した。
- `ipykernel` を用いて監視プロセスを別カーネルに独立させ、システム耐障害性を高めた。
毎日のコーディングで「いつ落ちるか分からない不安」を抱える必要はもうありません。この監視ダッシュボードをJupyterLabの一番左側のタブに常駐させておくことで、あなたの開発環境はプロ仕様の堅牢なコントロールセンターへと生まれ変わります。
ぜひ、今日の開発から取り入れて、快適でストレスフリーなAI・データサイエンスライフを満喫してください!