Hugging Face の Candle を使ってみる
Candle とわ
Candle は、パフォーマンス (GPU サポートを含む) と使いやすさに重点を置いた、Rust 用の最小限の ML フレームワークです。
Google翻訳
インストール方法に従ってインストールしてみる
cargo でプロジェクトを作成して、
cargo add --git https://github.com/huggingface/candle.git candle-core --features "cuda"
で入れる。
main.rs
を公式の短いサンプルに変えてみる
use candle_core::{Device, Tensor};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let device = Device::Cpu;
let a = Tensor::randn(0f32, 1., (2, 3), &device)?;
let b = Tensor::randn(0f32, 1., (3, 4), &device)?;
let c = a.matmul(&b)?;
println!("{c}");
Ok(())
}
その後、
cargo build
でちゃんと入ったか検証する。
うちの環境では $CUDA_ROOT/include/cuda.h
がない!!って怒られたので環境変数を設定した。
環境変数を更新したら PC を再起動する。
その後、 CUDA_ROOT がないの怒られはなくなったが別のエラーが出た
nvcc fatal : Cannot find compiler 'cl.exe' in PATH
と言われた。
どうやら Visual Studio インストーラーからインストールできる、C++ によるデスクトップ開発のやつに含まれているらしい。
確認したら、インストールされているがパスが通っていなかったようなので手動で通さないといけないみたいだ。
エクスプローラーで C:\Program Files\Microsoft Visual Studio
に入り、使っているバージョンの年、 Community/VC/Tools/MSVC
、バージョン番号?、bin/Hostx64/x64
の順に進んだとこのパスを PATH に追加する。
もう一回PCを再起動する。
参考:
無事実行できた。
せっかくなので Stable Diffusion の example を使って画像生成してみる。
candle のレポを clone して中で実行する。
ただ、公式の cargo run --example stable-diffusion --release -- --prompt "a rusty robot holding a fire torch"
では CPU を使ってしまって超遅いので --release
の後ろに --features cuda
をつけるとよい。
cargo run --example stable-diffusion --release --features cuda -- --prompt "photo of a nendoroid of hatsune miku" --uncond-prompt "ugly, horror, blurry, low quality" --height 768 --n-steps 20 --num-samples 1 --sd-version v1-5 --use-f16 --use-flash-attn
うちの環境では flash-attn はビルドでエラーが発生したので使えなかった...
flash attention がないせいか GPU 使っても1ステップに6秒くらいかかってて超遅くて謎だった。
生成画像↓
初音ミクのねんどろいど写真
生成画像もホラーみがあって謎だった。てか height に 768 指定してるのに横幅が 768 になっているのだ...
最適化中らしい。今後に期待という感じかな。