わくわく計算ライフ

ドムプラをキメつづけるブログになりつつある。

【Rust/機械学習】WindowsでCandleを触ってみる(書き途中)

いろいろひと段落ついて時間ができてきたので、やりたいこと詰めていきます。 今回は、今話題のHuggingfaceのCandleをとりあえず触ってみたいと思います。
以前はWindows x Ubuntuのデュアルブートで運用していたのですが、WSLが軽く使う分には優秀なので、クリーンインストールすることに。
クリーンインストール直後は環境構築のメモ取るには最適ということで、未来を感じるRust x 深層学習のCandleを入れることにしました。
大分自分向け作業メモです。

1. Candleって?

CandleはHuggingfaceが最近(2023/6 下旬)公開したRustの機械学習向けCrateです。

github.com

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ということは多々あります。

  1. メーカーサポートが受けられる(保障の問題)
  2. Linuxを取り扱える人材が社内にいない(人材問題)
  3. 過去のノウハウがある(教育コスト)
  4. 新しいものを導入する土壌がない(責任とりたくないから稟議通らない)

などなど。
また、まだ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

以下からインストーラーをとってきます。

slproweb.com

開発者向けの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を入れましょう。

www.rust-lang.org

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の機能の追加とかでいちいち入れなくてよくなりました。

learn.microsoft.com

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

安定安心の公式コピペでキメ。

www.rust-lang.org

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から試す

(準備中)