【解決】Unslothで`NotImplementedError`? UbuntuでNVIDIAドライバを完全修復する技術ブログ

LLMのファインチューニングを高速化できるライブラリ「Unsloth」。早速使ってみようとJupyter Notebookでimportを実行したところ、無情にもエラーが...。

NotImplementedError: Unsloth currently only works on NVIDIA GPUs and Intel GPUs.

NVIDIA GPUを使っているはずなのに、なぜ?」

こんな経験はありませんか?このエラーは、Unslothがシステム上のNVIDIA GPUを認識できていないことを示しています。原因を切り分けるため、ターミナルでNVIDIAドライバの状態を確認する定番コマンドnvidia-smiを実行してみると、案の定、問題の根本原因が姿を現します。

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.

CUDAコンパイラ (nvcc) は応答するのに、ドライバ管理ツール (nvidia-smi) は応答しない。これは、システムのカーネルアップデートなどが原因で、NVIDIAドライバとカーネルの間に不整合が起きている典型的な症状です。

この記事では、この一連の問題を根本から解決し、Unslothを快適に使える状態まで完全に復旧させるための手順を、画像を交えて詳しく解説します。

解決への道筋:ドライバの完全なクリーンインストール

中途半端な修正はさらなる混乱を招く可能性があります。最も確実な方法は、一度古いNVIDIA関連のパッケージをすべて削除し、Ubuntuで最も推奨される方法で再インストールすることです。

  1. 古いNVIDIAドライバを完全にアンインストールする
  2. 新しいNVIDIAドライバを「推奨される方法」でインストールする
  3. ドライバとアプリケーションの両方で修復を確認する

ステップ1:古いNVIDIAドライバの完全アンインストール

まず、システム内に存在する可能性のある古いドライバや関連パッケージを根こそぎ削除し、クリーンな状態に戻します。

ターミナルを開き、以下のコマンドを実行してください。

# nvidia関連のパッケージをすべて削除
sudo apt-get purge "nvidia*"

# 不要になった依存関係を自動でクリーンアップ
sudo apt autoremove

💡 Zshユーザー向けの注意点

もし、sudo apt-get purge nvidia* を実行して zsh: no matches found: nvidia* というエラーが出た場合は、引数をダブルクォーテーションで囲んで sudo apt-get purge "nvidia*" としてください。これは、Zsh* をファイル名として解釈しようとするのを防ぐためです。

アンインストールが完了したら、一度システムを再起動します。

sudo reboot

ステップ2:新しいドライバのインストール(Ubuntu公式の推奨方法)

次に、新しいドライバをインストールします。ここでは、Ubuntuが公式に提供するツール ubuntu-drivers を使います。この方法は、将来のカーネルアップデート後もドライバが自動で再構築される仕組み(DKMS)を導入してくれるため、同じ問題の再発を防ぐ上で非常に重要です。

  1. (推奨) 最新ドライバのためのPPAを追加 より新しい安定版ドライバを入手するために、公式のPPAリポジトリを追加します。

    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt update
    
  2. ドライバの自動インストール 以下のコマンド一行で、あなたのハードウェアに最適なドライバが自動でインストールされます。

    sudo ubuntu-drivers autoinstall
    

    処理には少し時間がかかりますので、完了するまで待ちましょう。

ステップ3:修復の確認

インストールが完了したら、変更を有効にするために必ずもう一度システムを再起動してください。

sudo reboot

再起動後、いよいよ最終確認です。

3-1. ドライバレベルでの確認

まず、すべての問題の根源だったnvidia-smiコマンドが正常に応答するかを確認します。

このように、あなたのGPU(この例ではNVIDIA GeForce RTX 3070)の情報、ドライババージョン、CUDAバージョンなどが表示された表が出力されれば、ドライバの修復は成功です!

3-2. アプリケーションレベルでの確認

最後に、当初の目的だったUnslothがGPUを認識できるようになったかを確認します。もう一度Jupyter Notebookを開き、インポートのセルを実行してみましょう。

NotImplementedErrorはもう表示されず、代わりに「Unsloth: Will patch your computer to enable 2x faster free finetuning.」といったポジティブなメッセージが表示されれば、すべての問題が解決したことになります。

まとめ

UnslothのNotImplementedErrorから始まった今回のトラブルシューティングは、根本原因であるNVIDIAドライバとシステムの不整合を、ドライバのクリーンインストールによって解決する、という王道のアプローチで無事に完了しました。

特に、ubuntu-drivers autoinstallコマンドは、将来のカーネルアップデートにも追従してくれるため、一度設定すれば長く安定した開発環境を維持できます。同じ問題に直面した際は、ぜひこの手順を試してみてください。