【text-generation-webui】GPTQモデル読み込み時のUnicodeDecodeError解決法

どんな問題が発生したか

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の標準エンコーディングを指定することです。

手順:

  1. Windowsのシステムプロパティを開きます(Win + Pause/Breakキー、またはコントロールパネル→システム)
  2. 「システムの詳細設定」をクリック
  3. 「環境変数」ボタンをクリック
  4. 「ユーザー環境変数」または「システム環境変数」の「新規作成」をクリック
  5. 以下の値を設定します:
変数名: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ファイルを直接修正する方法です。

手順:

  1. text-generation-webuiのインストールディレクトリを開く
  2. launch.pyファイルをテキストエディタで開く
  3. ファイルの先頭(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を確認する

稀に、モデルファイル自体が破損しているか、正しいフォーマットでない場合があります。

確認手順:

  1. Hugging Faceのモデルページで再度モデルファイルをダウンロード
  2. ダウンロード先にprevious versionがないか確認
  3. 「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のバージョン

参考元

おすすめ環境

💡 この問題を根本的に解決するには

ローカル環境でGPUトラブルが頻発する場合、クラウドGPUサービスの利用も検討してみてください。環境構築の手間なく、すぐにAI開発を始められます。

  • RunPod — RTX 4090が$0.44/h〜、ワンクリックでJupyter環境が起動
  • Vast.ai — コミュニティGPUマーケットプレイス、最安値でGPUレンタル
この記事は役に立ちましたか?