Closed6

Hugging Face の Candle を使ってみる

PlatPlat

インストール方法に従ってインストールしてみる

https://huggingface.github.io/candle/guide/installation.html

cargo でプロジェクトを作成して、

cargo add --git https://github.com/huggingface/candle.git candle-core --features "cuda"

で入れる。

main.rs を公式の短いサンプルに変えてみる

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 を再起動する。

PlatPlat

その後、 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を再起動する。

参考:

PlatPlat

せっかくなので 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 になっているのだ...

このスクラップは2023/08/29にクローズされました