GPU+pytorch环境论文复现在CPU+pytorch——Memory-Guided Multi-View Multi-Domain Fake News Detection朱勇椿

具体的复现细节无法在此呈现,还需要实践,利用好ChatGPT

代码复现背景:

(1)了解简单python语法,无pytorch基础,复现要求只要代码可运行,不要求读懂,不要求模型训练;

(2)工具Anaconda3-5.2.0-Windows-x86_64.exe(Python 3.6)和pycharm-community-2021.3.3.exe;

(3)科学上网,能用ChatGPT最好。

(4)硬件是联想G40-70(老古董笔记本)。

提前了解:

(1)可直接在这个微信公众号文章上看到源码地址,应该是作者自己发的。TKDE 2022 | 记忆引导的多视图多领域虚假新闻检测

(2)虽然作者在github上说明了环境,但是确实需要进行更改,一共三处:

        ①在所有库导入后,会有一个dataset参数报错;

        ②项目文件夹当中缺少从 Hugging Face 模型库中加载预训练的 BERT 模型(hfl/chinese-bert-wwm-ext)和 RoBERTa 模型(roberta-base),需要下载后,手动放到项目文件夹中;

        ③由于我是GPU+pytorch切换到CPU+pytorch,需要把涉及到.cuda的地方修改成适合GPU和CPU可同时使用的代码。

(3)pycharm是用来导入项目,Anaconda3用来创建虚拟环境,防止需要配置不同版本的环境。

(4)ChatGPT可以根据报错告诉你下一步改啥,甚至可以直接改好了直接引用。

复现过程:

1. 环境配置

(1)创建虚拟环境

conda create --name 虚拟环境名称 python=3.6

(2)激活虚拟环境

conda activate 虚拟环境名称

(3)ModuleNotFoundError: No module named 'torch'

这一步要说明,直接百度搜conda如何安装pytorch即可,一开始搜了很多攻略使用pip安装导致出现了奇怪的序列长度错误。

conda安装pytorch命令,在不确定有没有CUDA的情况下,可以使用以下命令安装PyTorch:

conda install pytorch torchvision torchaudio cpuonly -c pytorch

(4)ModuleNotFoundError: No module named 'tqdm'

conda install -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ tqdm

这里也要说明,在下面用conda安装transformers时会报tqdm的相关错误,但我不明白为什么。

(5)ModuleNotFoundError: No module named 'sklearn'

不用用conda安装是因为装不上

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn

(6)ModuleNotFoundError: No module named 'pandas'

conda install pandas

(7)ModuleNotFoundError: No module named 'transformers'

因为用conda安装会报错,所以选择用pip

#因为pip和conda安装混用有可能冲突,pip安装后提示tqdm报错,故只能先卸载
conda remove tqdm
pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers==3.4.0

2.代码修改

(1)TypeError: __init__() got an unexpected keyword argument 'dataset'

这个错误提示表明在实例化 `M3FENDTrainer` 类时,它的构造函数 (`__init__`) 不支持 `dataset` 这个参数。

根据在grid_search.py搜索'M3FENDTrainer'可知

from models.m3fend import Trainer as M3FENDTrainer

就是说实际上问题在Trainer中,Trainer在m3fend.py中

根据`M3FENDTrainer` 类的构造函数 (`__init__`) 源代码,表明它确实没有 dataset 这个参数。因此,导致在调用该类时传递 dataset 参数时出现了 TypeError 异常。

我选择了添加参数到构造函数:  dataset 参数确实是必要的,需要修改 M3FENDTrainer 类的构造函数,使其能够接收和处理 dataset 参数。

首先,在 m3fend.py 文件中找到 Trainer 类的构造函数 (__init__)。在参数列表中添加 dataset 参数,并在函数体内处理它。以下是处理后的代码:

两处修改,增加了dataset形参,增加了self.dataset = dataset 

这样就能在实例化 M3FENDTrainer 对象时传递 dataset 参数了。

接下来会继续报NameError: name 'dataset' is not defined,把错误交给ChatGPT,根据提示修改

def __init__(self, emb_dim, mlp_dims, use_cuda, lr, dropout, train_loader, val_loader, 
test_loader, category_dict, weight_decay, save_param_dir, semantic_num, emotion_num, 
style_num, lnn_dim, dataset, early_stop=5, epoches=100):
    self.lr = lr
    self.weight_decay = weight_decay
    self.use_cuda = use_cuda
    self.train_loader = train_loader
    self.test_loader = test_loader
    self.val_loader = val_loader
    self.early_stop = early_stop
    self.epoches = epoches
    self.category_dict = category_dict
    self.use_cuda = use_cuda

    self.emb_dim = emb_dim
    self.mlp_dims = mlp_dims
    self.dropout = dropout
    self.semantic_num = semantic_num
    self.emotion_num = emotion_num
    self.style_num = style_num
    self.lnn_dim = lnn_dim
    self.dataset = dataset  # 新添加的参数

    if os.path.exists(save_param_dir):
        self.save_param_dir = save_param_dir
    else:
        self.save_param_dir = save_param_dir
        os.makedirs(save_param_dir)

(2)OSError: Can't load weights for 'hfl/chinese-bert-wwm-ext'.

这个错误表明 Hugging Face 模型 `hfl/chinese-bert-wwm-ext` 无法正确加载。可能的原因包括:模型标识符错误、网络连接问题、或路径错误。

根据这句报错

File "F:\PycharmProjects\zdy1\M3FEND-main\models\m3fend.py", line 93, in __init__
    self.bert = BertModel.from_pretrained('hfl/chinese-bert-wwm-ext').requires_grad_(False)

可以找到

这两句代码是尝试从 Hugging Face 模型库中加载预训练的 BERT 模型(hfl/chinese-bert-wwm-ext)和 RoBERTa 模型(roberta-base)。它们与报错直接相关,因为报错表明模型 hfl/chinese-bert-wwm-ext 无法正确加载。

具体来说,这两行代码的含义是:

  1. if self.dataset == 'ch':
    1. 如果 dataset'ch'(表示使用中文数据集),则从 Hugging Face 模型库加载 hfl/chinese-bert-wwm-ext 模型,并将其设置为不可训练状态(冻结其参数)。
  2. elif self.dataset == 'en':
    1. 如果 dataset'en'(表示使用英文数据集),则从 Hugging Face 模型库加载 roberta-base 模型,并将其设置为不可训练状态(冻结其参数)。

 手动下载模型,访问'https://huggingface.co/models',在models页面搜索相关模型,即hfl/chinese-bert-wwm-ext和roberta-base

(3)AssertionError: Torch not compiled with CUDA enabled

报错信息表明当前的 PyTorch 版本没有启用 CUDA 支持。

①确认 GPU 是否可用

在 Python 环境中运行以下代码以确认 PyTorch 是否检测到了 GPU:

import torch
print(torch.cuda.is_available())

如果输出为 `True`,则表示 GPU 可用。如果输出为 `False`,则表示 GPU 不可用或 CUDA 未正确安装。

②如果确定 GPU 不可用,需要将所有依赖 CUDA 的代码修改为在 CPU 上运行。这里是如何修改 `M3FENDModel` 类的构造函数,以便在 GPU 不可用的情况下在 CPU 上运行。

1. 移除所有 `.cuda()` 调用

2. 使用 `.to(device)` 调用来确保在 GPU 可用时仍可以运行在 GPU 上

③根据提示,要求我修改

(1)m3fend.py 文件中的 train 函数: def train(self, logger = None);

(2)main.py 文件中的内容;

(3)grid_search.py 文件中。

但是根据实际情况,我只使用了(1)和(2)。

  • 22
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值