いろいろひと段落ついて時間ができてきたので、やりたいこと詰めていきます。
今回は、今話題のHuggingfaceのCandleをとりあえず触ってみたいと思います。
以前はWindows x Ubuntuのデュアルブートで運用していたのですが、WSLが軽く使う分には優秀なので、クリーンインストールすることに。
クリーンインストール直後は環境構築のメモ取るには最適ということで、未来を感じるRust x 深層学習のCandleを入れることにしました。
大分自分向け作業メモです。
1. Candleって?
CandleはHuggingfaceが最近(2023/6 下旬)公開したRustの機械学習向けCrateです。
PyTorchを意識しており、灯りつながりでTorch→Candleってネーミングみたいです。
特徴をざっと上げると(ほぼREADME.mdママ)
- PyTorchっぽいシンプルな構文
- 当然Rustの長所の恩恵を受けられる バイナリが小さい(実行環境入れなくていい)、静的型付け、メモリ安全
- GPU対応&WASM対応
アツい。Tauriとかと組み合わせればWebViewベースのマルチプラットフォームAI開発とか行けそう。
あと、最近の有名なモデル(LlamaとかStable Diffusionとか)はすぐに使える状態になってるみたいです。
2. なぜにWindows?
深層学習やりたいだけだったら、現状はUbuntuのマシン(実機 or クラウド)を用意してそれでやるのが一番いいと思うのですが、以下の観点であえてWindowsでやっています。
リッチメンで広い書斎と最新スペックのWindows PCとLinux PC一台ずつ用意できるんだったら個人的にはたぶんそうします。はよ、リッチメンになりたいです。
今回はWindows11のProを使用しています。Homeの人は本記事の手順でうまく動作しないかもしれませんが…開発やるならPro買っときましょう。
2.1 to BでWindows Targetが求められる
to Bでソフトを作成する際に、法人のお客様のターゲットがオンプレミスのWindowsということは多々あります。
- メーカーサポートが受けられる(保障の問題)
- Linuxを取り扱える人材が社内にいない(人材問題)
- 過去のノウハウがある(教育コスト)
- 新しいものを導入する土壌がない(責任とりたくないから稟議通らない)
などなど。
また、まだPoC段階とか、取り扱い情報が秘匿性が高くイントラのみで使いたい(工場関連はこれが多い)など、クラウドが利用できないケースも結構あります。
2.2. 個人的に使うソフトがある
Steamとパワレンぐらいかな…あとはWeb CamとかVideoCaptureとかAudio Interfaceとかの商用デバイスに関してはDriverがWindows版の方がちゃんとしているケースが多いのでそれくらいか。
それしか残ってないな???
正直たいていの人がChrome動けばあとは比較的どうでもいいでしょ???
3. 環境構築
今回は初手としては、いきなりCrateを入れずにリポジトリをダウンロードしsampleを動作させることで確認しました。
また、作業開始時点ではWindows 11を入れて、Windows Updateでとりあえず最新にした状態になります。
3.1. Windows Native
以下のものを順に入れています
3.1.1. Visual Studio 2022
Visual Studio C++のビルドツールもインストール時に入れます。
また、Rustがコンパイルにcl.exe
を使用するのでpathを通しておきます。
今回デフォルト設定でインストールしたので以下のpathになっていました
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64
3.1.2. OpenSSL
以下からインストーラーをとってきます。
開発者向けのWin64 OpenSSL v3.1.2
を選択。
3.1.3. CUDA
事前にNvidia Driverは最新にしておきます。(執筆環境ではGeforce RTX 3090Ti を使用し、versionは536.99のGame Readyです)。
CUDAは12.2でした。
cuDNNは入れていません。今回試した範囲ではエラーが出ませんでした。
もしかするとパフォーマンスに影響があったり、モデルによってはエラーが出るかもしれないので入れておくといいかもしれませんね。
3.1.4. Git
令和の世なのでwinget一発(とはいえwingetちゃんと使えるようになったの最近ですが)。管理者Power Shellから
winget install Git.Git
で終了。
3.1.6. Rust
公式にしたがってrustupのインストーラを使って入れます。
rustcだけならwingetだけでも行けますが、その他のツールチェーンの管理が面倒なのでrustupを入れましょう。
3.1.7. 動作確認
今回はwhisperのサンプルを実行することで動作確認しました。
全部は確認してないです。
cloneしたCandleのリポジトリに移動して
cargo run --example whisper --release
を実行するとビルドされ、CPU版でwhisperが実行されます。
音声の解析結果がコンソールに出力されるはずです。
無事実行されたら以下を実行し、GPU版の動作も確認します。
cargo run --example whisper --release --features cuda
3.2. WSL2
以下の順に入れていきます。
3.2.1. WSL環境構築
つい最近(2023/6)に更新があってコマンド一発で環境構築されるようになりました。
Hyper-Vの有効かとかをWindowsの機能の追加とかでいちいち入れなくてよくなりました。
wsl --install -d Ubuntu-20.04
今回はUbuntu-20.04のディストリビューションを使用しました。(22.04でもおそらくは行けると思うのですが念のため)
あまりにもあっさり入ります。
なお、この簡単手順はWindows10の場合はWindows 10 バージョン 2004 以上 (ビルド 19041 以上) である必要があります。
3.2.2. pkg-config
パスの管理ツール。
これを入れとかないと後でエラーが出る。後から入れても許されたが。
sudo apt pkg-config
3.2.3. OpenSSL
openssl とlibsslを入れます。
sudo apt install openssl sudo apt install libssl-dev
3.2.5. CUDA
DriverはNativeのWindowsのものが利用されるので特に追加でのインストールは不要です。
Native環境は試さないなどの理由で 3.1.3. の作業をしていなかった場合はここで行ってください。
WSLになじみのない方向けに説明すると、
CUDAのダウンロードページから
Linux > x86_64 > WSL-Ubuntu > 2.0 > deb(network)
を選択して表示される指示に従ってください。
また、GPU版ビルド時にnvccを使うのでPATHに追加しておきます。(.bashrcなどで書いておく)
今回は以下のPathを追加しました。
/usr/local/cuda/bin
3.2.6. Rust
安定安心の公式コピペでキメ。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
3.2.7. 動作確認
3.1.7. 動作確認 に同じ。
3.3. その他
開発用にVisual Studio Codeと, rust-analyzerおよびcode lldbのプラグインを入れとけばあとりあえずはヨシ。
4. Crateから試す
(準備中)