尝试在 Ubuntu 22.04 WSL 下运行 GPT 检测器时出错

尝试在 Ubuntu 22.04 WSL 下运行 GPT 检测器时出错

虽然OpenAI 探测器在识别由 ChatGPT 和其他基于 OpenAI 的模型创建的内容方面很有用,但随着使用量的增加(尤其是 Stack Exchange 网站上的用户),它的宕机频率越来越高。

根据项目在本地安装后自述,当我尝试使用从 repo 目录运行它时收到以下错误python -m detector.server ../gpt-2-models/detector-base.pt

Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/ntd/src/gpt-2-output-dataset/detector/server.py", line 120, in <module>
    fire.Fire(main)
  File "/home/ntd/src/venv/openai-detector/lib/python3.10/site-packages/fire/core.py", line 141, in Fire
    component_trace = _Fire(component, args, parsed_flag_args, context, name)
  File "/home/ntd/src/venv/openai-detector/lib/python3.10/site-packages/fire/core.py", line 475, in _Fire
    component, remaining_args = _CallAndUpdateTrace(
  File "/home/ntd/src/venv/openai-detector/lib/python3.10/site-packages/fire/core.py", line 691, in _CallAndUpdateTrace
    component = fn(*varargs, **kwargs)
  File "/home/ntd/src/gpt-2-output-dataset/detector/server.py", line 89, in main
    model.load_state_dict(data['model_state_dict'])
  File "/home/ntd/src/venv/openai-detector/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1671, in load_state_dict
    raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
RuntimeError: Error(s) in loading state_dict for RobertaForSequenceClassification:
        Missing key(s) in state_dict: "roberta.embeddings.position_ids".
        Unexpected key(s) in state_dict: "roberta.pooler.dense.weight", "roberta.pooler.dense.bias".

我尝试transformers==2.9.1根据评论进行更改这个问题,但随后pip install -r requirements.txt也失败了。

答案1

保留这个答案,因为它仍然包含有用的信息,但我添加了一个更简单的方法这个答案。如果你有 Docker Desktop,你也可以使用这个答案。这两个较新的答案的优点是严格遵循原始的 HuggingSpace 实现,而这个答案则缺乏这一点。


这里的主要问题似乎可以通过使用transformers==2.5.1(而不是 2.9.1)来解决,但我还需要 Rust 编译器(和build-essential)来构建它。其中大部分,至少从第 11 步开始,也可能适用于非 WSL Ubuntu。但是,CUDA 还有一些额外的依赖项(我不能完全确定是哪些,因为我没有纯 Ubuntu GPU 系统可以进行测试)。

以下是我在 WSL 上安装 Ubuntu 22.04 的完整步骤。请注意通过不为检测器设置特殊分布、不设置 Python 或甚至跳过两者,可以大大简化它venv。老实说,从“隔离”的角度来看,两者兼而有之是过分的,但步骤都取决于你想如何处理它:

  1. 使用 PowerShell注册了新的 Ubuntu 22.04 WSL 发行版ubuntu2204.exe。之前不存在,原因如下。

  2. 按要求添加用户名和密码。

  3. 运行正常,初始sudo apt update && sudo apt upgrade -y

  4. /etc/wsl.conf使用per设置默认用户名我的答案在这里

  5. 退出 Ubuntu

  6. wsl --shutdown

  7. 为我的“openai-detector”实例创建一个目录:

    mkdir D:\WSL\instances\openai-detector
    
  8. 将刚刚创建的 Ubuntu 22.04 实例复制到名为的新发行版openai-detector

    wsl --import --vhd openai-detector D:\wsl\instances\openai-detector\ $env:localappdata\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx --version 2
    
  9. 删除了ubuntu-22.04发行版,因为我总是可以在需要时根据需要创建另一个发行版(如上所述)。但是,请仅在您确定这是您刚刚创建的发行版并且其中没有您需要的文件时才执行此操作。这是一个不可逆的可破坏操作。说实话,每次执行此操作时我都有点紧张,因为我可能会不小心使用错误的发行版名称。只是...当心

    wsl --unregister ubuntu-22.04
    
  10. 启动上面创建的新openai-detector分布:

    wsl ~ -d openai-detector
    
  11. 已安装rustupbuild-essential

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    source "$HOME/.cargo/env"
    sudo apt install build-essential
    
  12. 设置虚拟环境:

    sudo apt install python3-venv
    python3 -m venv ~/src/venv/openai-detector
    source ~/src/venv/openai-detector/bin/activate
    
  13. 克隆检测器并下载模型文件:

    cd ~/src
    git clone https://github.com/openai/gpt-2-output-dataset.git
    mkdir gpt-2-models
    cd gpt-2-models
    wget https://openaipublic.azureedge.net/gpt-2/detector-models/v1/detector-base.pt
    # and/or
    wget https://openaipublic.azureedge.net/gpt-2/detector-models/v1/detector-large.pt
    
  14. 修改使用 Transformers 2.5.1 的要求:

    editor ~/src/gpt-2-output-dataset/requirements.txt
    

    将该transformers行更改为:

    transformers==2.5.1
    
  15. 安装要求:

    pip install wheel
    cd ~/src/gpt-2-output-dataset
    pip install -r requirements.txt
    
  16. 跑步:

    python -m detector.server ../gpt-2-models/detector-base.pt
    

初始安装后,将来启动所需的全部内容是:

wsl ~ -d openai-detector
cd ~/src/gpt-2-output-dataset
source ~/src/venv/openai-detector/bin/activate
python -m detector.server ../gpt-2-models/detector-base.pt

OpenAI Detector 的本地副本应该在 上运行localhost:8080

答案2

还有一个解决方案,以防你不能使用我的基于 Docker 的答案出于某种原因。我相信这应该取代我的原始解决方案作为首选方法。

使用Dockerfile以 HuggingFace 空间为指南,我已经能够在全新 Ubuntu 22.04 上重现此问题。我在 WSL 上运行它,但感谢 @cocomac 确认这也适用于普通 Debian。它应该可以在任何最新的基于 Debian 的发行版上运行:

sudo apt update && sudo apt upgrade -y

sudo apt install -y \
    git \
    make build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
    libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev git-lfs  \
    ffmpeg libsm6 libxext6 cmake libgl1-mesa-glx

git lfs install
cd ~
git clone https://huggingface.co/spaces/openai/openai-detector
cd openai-detector

PATH=/home/user/.local/bin:$PATH
curl https://pyenv.run | bash
source ~/.bashrc
PATH=$HOME/.pyenv/shims:$HOME/.pyenv/bin:$PATH

pyenv install 3.7.5
# ^ Takes a while

pyenv global 3.7.5
pyenv rehash

python --version
# Confirm 3.7.5

pip install --no-cache-dir --upgrade pip setuptools wheel
pip install --no-cache-dir \
    datasets \
    huggingface-hub "protobuf<4" "click<8.1"

pip install --no-cache-dir -r requirements.txt
# Ignore dependency errors, as it still appears to work

python -m detector.server detector-base.pt --port 7860

对于将来的启动,请将以下内容添加到脚本中webui.sh

PATH=$HOME/.pyenv/shims:$HOME/.pyenv/bin:$PATH
pyenv global 3.7.5
pyenv rehash
cd ~/openai-detector
python -m detector.server detector-base.pt --port 7860

答案3

保留我的其他答案,因为了解如何“手动”设置很有用,但最近添加了 HuggingSpace 的“使用 Docker 运行”使得这变得更容易。

如果你有 Docker桌面安装在 Ubuntu(无论是否安装 WSL)中,您可以在容器中启动 OpenAI-Detector:

  • 首先,确保你有containerd已启用 Docker Desktop。这是 Docker Desktop 中的测试版功能——要启用,请打开 Docker Desktop 仪表板并转到设置->正在开发的功能->Beta 功能并选择“使用 containerd 来提取和存储图像”

    如果没有这个,我在尝试从 HuggingFace 拉取 Docker 镜像时会收到错误。请注意,我还没有找到在 Docker 中启用此功能的方法引擎在此刻。

  • 有了这个,我就能够使用以下命令运行 OpenAI-Detector:

    docker run -it --rm --gpus=all -p 7860:7860 --platform=linux/amd64 registry.hf.space/openai-openai-detector:latest
    

笔记:

  • 该图像占用了 5.84GB 的磁盘空间。
  • 不幸的是,该图像基于 Ubuntu 18.04,该系统将于 5 月 31 日很快到达 EoSS。
  • --rm是可选的,但建议这样做,以便在退出后删除容器。
  • --gpus=all也是可选的,因为图像似乎没有要求GPU 支持。
  • 当然,您可以通过将第一个更改7860为所需的端口来修改正在使用的端口号(例如-p 80:7860)。

相关内容