Linuxを使ってでAI関連の勉強をしようと思いたち、環境を作ろうと考えました。
PCにグラフィックボードを積んでいるので、折角なのでGPUをきちんと使える環境をLinuxベースで作ろうと考えました。
ただ、PCは1台しかないし、Windwos10の環境を壊したくないのでVirtualBox+Vagrantの仮想環境で作ることを考えました。
しかし、うまくいかないので、他を調べてみると何かWSL(Windows Subsystem for Linux)なるものがあるということでこちらで環境を作ることにしました。
結果としては、WSLでも、2020年9月現在では、うまくいきませんでした。
やろうとしたことは、
- VirtualBox+VagrantでUbuntu 20.04の環境を作る
- GPU(GeForce RTX 2070 SUPER)を認識させる
- AI関連のソフトを入れる
と、考えていました。
しかし、「1.VirtualBox+VagrantでUbuntu 20.04の環境を作る」はすんなりできましたが、
「2.GPU(GeForce RTX 2070 SUPER)を認識させる」がうまくいかない。
いろいろ調べてみると、仮想環境内からは、直接グラフィックボードを認識できないということでした。
この仮想環境から直接グラフィックボードを認識できないということは、結論から言うとWLSでも同じでしたが・・・。
あくまでも、Linuxを使いたいが、マルチブートは少しめんどくさいし、インストールに失敗したらと思うと少し勇気がいったので、Windowsベースの機能で実現を試みるためにWSLを試してみます。
※現段階では、仮想環境にGPUを認識させることは実現できていません。
WSL(Windows Subsystem for Linux)とは
WSLとは、Windows10上で、コマンドプロンプトやPowerShellのようにLinuxを使う技術です。
WSLには、WSL1とその上位バージョンであるWSL2があります。
WSL2では、ファイルシステムのパフォーマンス向上と、システムコールの完全な互換性を追加されています。
詳細は、Microsoftの公式ページに詳しく説明されています。
WSL2では、「システムコールの完全な互換性」とあったので、仮想環境上でグラフィックボードを認識してくれるのではと、期待してしまいました・・・。
※勉強不足でお恥ずかしい・・・。
WSL1とWSL2では、公式ページの「WSL 1 と WSL 2 の比較」にあるようにWSL2の使用を推奨していますので、今回も、WSL2をインストールします。
公式ページの例外的に WSL 2 ではなく WSL 1 を使用する場合を確認するとWindowsとファイルを共有する場合は、WSL1を使ったほうが良いです。
使用するLinuxは、Microsoft Storeから入手し、インストールすることができます。
- Ubuntu
- open SUSE Leap
- SUSE Linux Enterprise Sever
- Kali Linux
- Debian GNU/Linux
- WSLのためのFedoraリミックス
- Pengwin
- Pengwin Enterprise
- Alpine WSL
※インストールする時期によってバージョンが変わりますので、Microsoft Storeで確認してください
WLSは、インストールするとWindowsのメニューからLinuxが起動できます
画面では、Ubuntuをインストールしてた時のメニューです。

「Ubuntu」のアイコンから起動すると、コマンドプロンプトやPowerShellと同じような感じでUbuntuが起動されてきます。

WSL2(Windows Subsystem for Linux)のインストール
WSL2を使うために、公式ページに沿ってインストールを進めていきます。
公式ページの「Windows 10 用 Windows Subsystem for Linux のインストール ガイド」
ただ、この公式ページに沿ってインストールを進めましたが、いくつか躓いた点があります。
中でも、一番困ったのが「WSL2を実行するには、カーネルコンポーネントの更新が必要です」というエラーの解消でした。
※後で、詳しく説明します。
手順は、大きく4STEPです。
- STEP1Widows10のバージョン確認
WSLが使用できるWindows10のバージョンか、確認します。
バージョンアップが必要であれば、Windows10のバージョンアップを行います。 - STEP2WSL1の設定
「Linux 用 Windows サブシステム」オプションを有効化することで、WSL1を使用できるようにします。
- STEP3WSL2へのバージョンアップ
「仮想マシン プラットフォーム」オプションを有効化します。
さらに、カーネルのバージョンアップを行い、WSL2の設定を行います。
※ここで、はまりました。
- STEP4Linuxのインストール
Microsoft Storeから希望のLinuxを入手し、インストールします。
今回は、Ubuntuをインストールします。
Widows10のバージョン確認
WSL2は、Windows10のバージョンが1903以降、ビルド 18362 以上のWindows10である必要があります。
このバージョンより古いバージョンの場合には、Windows10のバージョンアップが必要になります。
Windowws10のバージョン確認方法は、「Windows」キー+「R」を押して、「winver」を実行します。

Windows10のバージョンが表示されるので、確認します。
Widows10のバージョンアップ
WSL2をインストールすることができるバージョンではなかった場合には、Windows10をバージョンアップします。
Windwowsのダウンロードページから最新バージョンへアップデートします。
ダウンロードページの「今すぐアップデート」を選択すると、アップデート用のプログラムがダウンロードされるので、それを実行して、アップデートします。

ダウンロードされたプログラムを実行し、Windows10を最新版へアップデートします。
Windows10のバージョンアップの確認画面が表示されるので、「今すぐ更新」でバージョンアップを開始します。

PCのインストール要件を満たしているかチェックが行われます。
問題がなければ、「次へ」を押します。

更新プログラムのダウンロードが自動的に開始されます。
ダウンロードが完了するまでしばらく時間がかかるので、待ちます。

更新プログラムのダウンロードが完了すると、「今すぐ再起動」でWindows10の更新が始まります。

何度か、再起動を行うとWindows10のバージョンアップが完了しますので、更新されたバージョンを確認します。
バージョンが2004 ビルド 19041.508にバージョンアップされました。
※2020年9月22日時点でWindows10を更新した時のバージョンです。

Windows10がバージョンアップされました。
元のバージョン :Windows10 Pro バージョン 1909(OSビルド 18363.1110)
更新されたバージョン:Windows10 Pro バージョン 2004(OSビルド 19041.572)
WSL1の設定
「Linux 用 Windows サブシステム」 オプション機能の有効化することで、WSL1を使用できるようにします。
「Linux 用 Windows サブシステム」 オプション機能の有効化
管理者としてPowweShellを開き、「Linux 用 Windows サブシステム」 オプション機能の有効化コマンドを実行します。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
このコマンドを実行し、「Linux 用 Windows サブシステム」 オプション機能を有効化します。

「Linux 用 Windows サブシステム」 オプション機能の有効化コマンドを実行後、再起動を行います。
これで、WSL1が使える状態になりました。
WSL1環境でLinuxを使う場合は、ここでMicrosoft StoreからLinuxを入手し、インストールします。
無効化
「Linux 用 Windows サブシステム」 オプション機能を有効化したが、何らかの理由で無効化したい場合は、
「コントロール パネル」ー「プログラムと機能」ー「Windows の機能の有効化または無効化」から、
「Linux 用 Windows サブシステム」のチェックを外します。
これで、無効化することができます。
WSL2へのバージョンアップ
WSL2へバージョンアップは、
「仮想マシン プラットフォーム” オプション機能の有効化」し、
「カーネルコンポーネントの更新」
します。
この「カーネルコンポーネントの更新」ではまってしまいました。
仮想マシン プラットフォーム” オプション機能の有効化
WSL2を使用するための「仮想マシン プラットフォーム” オプション機能の有効化」コマンドを実行します。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
コマンドを実行します。

ここで、日本語の公式ページでは、
さらっと
「WSL2へ更新し、再起動」
とあるので、再起動するとWSL2のコンポーネントがダウンロードされインストールされるものと勘違いしてしまいました。
その為、この後のWSL2を規定のバージョンに設定するところで「カーネルコンポーネントを更新してください」とエラーが出続けました・・・。
このエラーが出ているときは、WSL2に更新されていないので、カーネルのアップデートをしなければなりません。

実際は、WSL2のカーネルをアップデートするプログラムをダウンロードして、実行する必要があります。
いろいろ調べた結果、日本語ページではダウンロードできなかったので英語のページでカーネルアップロード用プログラムがダウンロードできましたので

ダウンロードしたプログラムを実行するとカーネルが更新されます。
カーネル更新プログラムを実行し、「Next」を押します。

しばらくするとインストールが完了するので、「Finish」でカーネル更新完了です。

ここで、再起動を行います。
WSL 2 を既定のバージョンとして設定する
WSL2をデフォルトの環境とするコマンドを実行します。
wsl --set-default-version 2
これで、この後のLinuxをインストールした時にWSL2環境にインストールされるようになります。

Ubuntuをインストールする
Microsoft Store を開き、希望する Linux ディストリビューションを選択します

今回は、Ubuntuをインストールしますので、「Ubuntu」を選択します。
「ubuntu」のページが表示されますので「入手」を押して、インストールを行います。

サインインして、複数デバイスで使用するか、確認メッセージが表示されますので必要に応じてサインインしてください。
ここでは、「必要ありません」を選択し進みます。

ダウンロードが始まりますので、完了するまでしばらく待ちます。

ファイルのダウンロードが完了すると自動的に、インストールが始まります。

インストールが完了するとWindowsからの通知と、メニューに追加されます。

通知です。

インストールされたubuntuを起動するとログインユーザ、パスワードの設定をします。

最初に、ユーザの設定を行うと次回以降は、ログインされた状態で起動します。
まとめ
WLSで、Ubuntuを使用できる環境を作りました。
ただ、本来やりたかったAI関連のソフトを動かすためにグラフィックボードをWSL環境で認識させることはできませんでした。
仕方がないので、デュアルブート環境を作成してWindows10とUbuntuを使うようにしました。
ただ、Windows Insider Programに参加している方は、最新のWindowsの機能としてWSLからグラフィックボードを認識させられるようになっています。
Windows Insider Programに参加して、先行版のWindowsをインストールしようとも考えましたが、少し怖いので製品版が出るのを待つことにしました。
製品版が出たら、最新のWSLを試してみたいと思います。
コメント