lama-cleaner 安裝時tokenizers問題的處理

sodynamic發表於2024-07-20
這幾天嘗試安裝lama-cleaner,試一試其自動處理圖片的功能。在兩臺電腦上試過,作業系統分別是Windows 10和銀河麒麟V10(SP1),Python的版本都是3.12。
安裝命令簡單說就是下面這一句

pip install lama-cleaner -i https://pypi.tuna.tsinghua.edu.cn/simple --verbose

這裡的網址表示使用的是清華大學的更新源,可以加快下載速度。--verbose是為了顯示更多的安裝過程資訊,這對發現安裝時錯誤的線索有幫助,不新增不影響安裝效果。

由於lama-cleaner是需要Rust語言,因此需要提前安裝Rust,以及C++的編譯工具,這個網上有很多教程,包括如何使用國內映象(例如中國科技大學)加快Rust下載速度,這裡就不重複了。

再反覆確認lama-cleaner各種安裝依賴條件都具備之後,多次安裝都會報以下錯誤:

error: `cargo rustc --lib --message-format=json-render-diagnostics --manifest-path Cargo.toml --release -v --features pyo3/extension-module --crate-type cdylib --` failed with code 101

其中具體產生錯誤的語句是

error: casting `&T` to `&mut T` is undefined behavior, even if the reference is unused, consider instead using an `UnsafeCell`
--> tokenizers-lib/src/models/bpe/trainer.rs:526:47
|
522 | let w = &words[*i] as *const _ as *mut _;
| -------------------------------- casting happend here
...
526 | let word: &mut Word = &mut (*w);
| ^^^^^^^^^
|
= note: for more information, visit <https://doc.rust-lang.org/book/ch15-05-interior-mutability.html>
= note: `#[deny(invalid_reference_casting)]` on by default

在網上搜尋,發現了有一個網頁介紹瞭解決問題的辦法

https://github.com/huggingface/tokenizers/issues/1359

產生這個問題的因素,有的說是transformers、python等軟體的版本匹配問題,有的解釋說上文中的錯誤說明安裝包中mutable reference的使用是不安全的,導致了Rust安全檢查報錯,建議修改程式碼……最後看起來最簡單的處理辦法是增加以下環境變數

在Linux系統中,在終端命令列視窗輸入

export RUSTFLAGS="-A invalid_reference_casting"

在Windows系統中,可以在PowerShell的視窗中輸入

$ENV:RUSTFLAGS="-A invalid_reference_casting"

加入這個環境變數後,Rust的安全檢查會把以上的error轉變成warning,程式編譯得以繼續。

在兩個作業系統上測試,都管用(lama-cleaner啟動時還要在GitHub上下載模型,由於網路問題,可能會下載很慢)。

相關文章