環境
Windows | Windows 11 Pro 24H2 |
---|---|
WSLのOS | Ubuntu noble 24.04 |
症状
ローカル(ターミナルやVSCode上でのSSH接続)では nvidia-smi
コマンドが使えていたのだが、外部からWSLにSSH接続したときだけ使えなかった。
nvidia-smiコマンドの仕組み
どうやらWSLでnvidia-smiを実行すると、Windows側にインストールされているexe形式の実行ファイル nvidia-smi.exe
を呼び出すようだ。
(本来Ubuntuからexeファイルを直接実行できるはずもないが、WSLでは interop という仕組みでうまく実行できるようにしているそうだ。)
なのでWSL上で
/mnt/c/Windows/System32/nvidia-smi.exe
を実行すると nvidia-smi
コマンドを使ったときと同じことが起こるはず。
SSHログイン時に機能しない原因
WSLにはWindows側のPATHを自動でWSLのPATHに付け足す機能があるらしい。(参考)これによって nvidia-smi
コマンドが使えている。
外部からSSHでWSLにログインしたとき、Windows側のPATHをうまく取り込めていなかったようだ。
対処
シェルへログインしたときにエイリアスを設定する。
nvidia-smi
コマンドが機能しているときにエイリアスを設定してしまうと干渉してしまう。なのでコマンドが認識されないときだけエイリアスを設定するようにしている。
以下を ~/.bash_rc
の末尾に追記する。
# nvidia-smiコマンドが認識されないときだけエイリアスを設定して使えるようにする
if ! command -v nvidia-smi >/dev/null 2>&1; then
alias nvidia-smi='/mnt/c/Windows/System32/nvidia-smi.exe'
fi
nvidia-smi.exe
のインストールパスは各自の環境に合わせてください。自分はWindows上でファイルエクスプローラーを使って探しました。