どんな問題が発生したか
Windows環境でtext-generation-webuiを使用してGPTQモデルを読み込もうとした際に、以下のエラーが発生する場合があります。
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 1284: character maps to
このエラーは、Windowsのデフォルト文字コード(cp1252)がモデルのファイル内のUnicode文字を読み取れないときに発生します。モデルの読み込みが途中で失敗し、text-generation-webuiが起動しないという症状になります。
発生環境例:
- OS: Windows 10/11
- text-generation-webui: 最新のmainブランチ
- Python: 3.10〜3.11
- transformers: 4.x系
結論
Windows環境の文字コード設定をUTF-8に変更することで、このUnicodeDecodeErrorを解決できます。環境変数PYTHONIOENCODINGを設定するか、Python起動時にencoding引数を指定してください。
具体的な手順
方法1:環境変数でPythonの文字コードを設定する(推奨)
最も簡単な方法は、環境変数にPythonの標準エンコーディングを指定することです。
手順:
- Windowsのシステムプロパティを開きます(Win + Pause/Breakキー、またはコントロールパネル→システム)
- 「システムの詳細設定」をクリック
- 「環境変数」ボタンをクリック
- 「ユーザー環境変数」または「システム環境変数」の「新規作成」をクリック
- 以下の値を設定します:
変数名:PYTHONIOENCODING
変数値:utf-8
または、PowerShellで現在のセッションのみ設定する場合:
$env:PYTHONIOENCODING="utf-8"
python server.py
または、コマンドプロンプトの場合:
set PYTHONIOENCODING=utf-8
python server.py
方法2:launch.pyを修正して文字コードを設定する
text-generation-webuiのlaunch.pyファイルを直接修正する方法です。
手順:
- text-generation-webuiのインストールディレクトリを開く
- launch.pyファイルをテキストエディタで開く
- ファイルの先頭(import文の前)に以下を追加:
import sys
import io
# WindowsでのUnicodeDecodeError対策
if sys.platform == 'win32':
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
# すべてのプラットフォームでUTF-8をデフォルトに
sys.argv.append('--force-enable-devices=cpu')
より簡単な方法として、launch.pyの冒頭にこれを追加してください:
import sys
import os
# Pythonの標準出力をUTF-8に設定
if sys.platform == 'win32':
os.add_dll_directory(os.environ['LOCALAPPDATA'] + 'ProgramsPythonPython311')
os.environ['PYTHONIOENCODING'] = 'utf-8'
方法3:transformersのバージョンを更新する
古いバージョンのtransformersにはUnicode処理のバグが含まれています。最新版に更新することで解決する場合あります。
手順:
text-generation-webuiのディレクトリで、conda環境をアクティブにした後:
pip install --upgrade transformers
または、requirements.txtを直接編集してバージョンを指定:
transformers>=4.37.0
その後、再インストール:
pip install -r requirements.txt
方法4:モデルファイルのEncodingを確認する
稀に、モデルファイル自体が破損しているか、正しいフォーマットでない場合があります。
確認手順:
- Hugging Faceのモデルページで再度モデルファイルをダウンロード
- ダウンロード先にprevious versionがないか確認
- 「Files and versions」タブから正しいGPTQQuantizedファイルを選択
ファイル名が「no-act-order」を含むものは、Windows環境での互換性が高いとされています。
補足・注意点
バージョン依存の情報
- transformers 4.35以前:Unicode処理に問題较多
- transformers 4.36以降:UTF-8サポートが改善
- text-generation-webui 2024年以降:内部でUTF-8処理が強化されている
Windows以外のOSでの注意
LinuxやmacOSでは通常、このUnicodeDecodeErrorは発生しません。これらのOSではUTF-8がデフォルトの文字コードとなっているためです。
もしLinuxで同様のエラーが発生した場合:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
python server.py
よくある落とし穴
落とし穴1:環境変数のスコープ
システム環境変数を設定した場合、既存のコマンドプロンプトやPowerShellは再起動が必要です。新しいセッションで開いてください。
落とし穴2:モデルの選択
text-generation-webuiのModelタブで、「loader」として「ExLlama」または「ExLlama_HF」を選択している場合、Windows環境での文字コード問題が発生しやすいようです。「Transformers」ローダーで試すことをお勧めいたします。
落とし穴3:VRAM不足との混同
「VRAM不足」のエラーと混同しないでください。VRAM不足の場合は「CUDA out of memory」という異なるエラーが発生します。
落とし穴4: модели файловのパスに日本語を含む
モデルの保存先に日本語が含まれているパス тоже会导致问题。建议将模型放置在纯英文路径中。
それでも解決しない場合
上記の方法をすべて試しても解決しない場合、以下の情報を確認してフォーラムで質問することをお勧めします:
- 完全なエラーメッセージ
- OSバージョン
- GPU型号とVRAM容量
- text-generation-webuiのコミットハッシュ
- transformersのバージョン
参考元
- TheBloke/WizardCoder-15B-1.0-GPTQ – Error when loading with text gen webui
- TheBloke/orca_mini_13B-GPTQ – text generation webui / Error in GPTQ_loader.py