安装torch113、cuda116并运行demo【Transformer】

2023-09-14 12:20:09

01. 导读

安装torch113、cuda116并运行demo【Transformer】

02. 显卡驱动版本

C:\Users\Administrator>nvidia-smi -l 10
Wed Sep 13 23:35:08 2023
±----------------------------------------------------------------------------+
| NVIDIA-SMI 512.89 Driver Version: 512.89 CUDA Version: 11.6 |
|-------------------------------±---------------------±---------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=++==============|
| 0 NVIDIA GeForce … WDDM | 00000000:01:00.0 On | N/A |
| N/A 73C P0 47W / N/A | 2210MiB / 4096MiB | 99% Default |
| | | N/A |
±------------------------------±---------------------±---------------------+

03. 创建环境、下载安装必要包

创建一个gpy38torch 的虚拟环境,并配置到改路径地址D:/AworkStation/Anaconda3/envs
conda create -p D:/AworkStation/Anaconda3/envs/gpy38torch python=3.8 【不知为何,管理员的windows身份了,仍然需要使用管理员身份运行】
pip install pandas transformers scipy ipykernel
pip install torch==1.13.0+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
python -m ipykernel install --user --name gpy38torch

04. 运行参考代码:

# -*- coding: utf-8 -*-

'''
@Author   :   Corley Tang
@contact  :   cutercorleytd@gmail.com
@Github   :   https://github.com/corleytd
@Time     :   2023-08-14 22:22
@Project  :   Hands-on NLP with HuggingFace Transformers-sentiment_analysis_with_rbt3
使用3层RoBERTa模型进行评论情感分析
'''

# 导入所需的库
import pandas as pd
import torch
from torch import optim
from torch.utils.data import Dataset, DataLoader, random_split
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import pipeline
from transformers import set_seed



# 超参数
device = 'cuda' if torch.cuda.is_available() else 'cpu'
seed = 20230814
batch_size = 8
max_length = 256
lr = 2e-5
num_epochs = 2
log_interval = 100
train_ratio = 0.8
model_path = 'hfl/rbt3'
model_path = r'D:\Auser\YZH\Pytorch深度学习入门与实战\Models\rbt3'

# 设置随机种子、保证结果可复现
set_seed(seed)

# 1.构造数据
## (1)查看数据

# 读取酒店评论数据:https://github.com/SophonPlus/ChineseNlpCorpus
path = 'ChnSentiCorp_htl_all.csv'  # 在我当前路径
data = pd.read_csv(path)
data.head()
# 查看缺失值
data.info()  # review有1条缺失值
# 删除缺失值
data.dropna(inplace=True)
data.info()  # 不存在缺失值

## (2)构造数据集
# 定义数据集类
class ReviewDataset(Dataset):
    def __init__(self, path):
        super().__init__()
        self.data = pd.read_csv(path)
        self.data.dropna(inplace=True)

    def __len__(self):
        return self.data.shape[0]

    def __getitem__(self, index):
        item = self.data.iloc[index]
        return item['review'], item['label']
# 实例化
dataset = ReviewDataset(path)

for i in range(5):
    print(dataset[i])
# 划分数据集
sample_length = len(dataset)
train_length = int(train_ratio * sample_length)
train_set, valid_set = random_split(dataset, lengths=[train_length,
                                                      sample_length - train_length])  # PyTorch从1.13及以后的版本中也支持lengths使用浮点数比例
len(train_set), len(valid_set)
# 查看训练集
for i in range(5):
    print(train_set[i])

# (3)创建DataLoader
# 创建Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_path)


def text_collate(batch):
    '''
    将单个样本数据组成的列表转换成一个批次的数据,通常会对数据进行一些处理
    :param batch: 一个批次数据的列表,一个元素为一条样本(包含输入和标签等)
    :return: 一个批次的数据,可以是一个列表、元组或者字典
    '''
    texts, labels = [], []
    for item in batch:
        texts.append(item[0])
        labels.append(item[1])

    # 先将数据整理成一批、再进行分词,效率更高
    inputs = tokenizer(texts, max_length=max_length, padding='max_length', truncation=True, return_tensors='pt')
    inputs['labels'] = torch.tensor(labels)

    return (inputs)
# 构造DataLoader
train_loader = DataLoader(train_set, batch_size=batch_size, shuffle=True, collate_fn=text_collate)  # 自定义数据处理方式
valid_loader = DataLoader(valid_set, batch_size=batch_size * 2, collate_fn=text_collate)
# 查看验证集
next(enumerate(valid_loader))[1]  # 为字典形式

# 2.搭建模型
## (1)创建模型
model = AutoModelForSequenceClassification.from_pretrained(model_path)  # 选择带序列分类头的模型
model.to(device)
model

## (2)定义优化器
optimizer = optim.AdamW(model.parameters(), lr=lr)
optimizer
# 3.训练与预测
# 评估
def evaluate():
    total_correct = 0  # 计数
    model.eval()
    with torch.inference_mode():  # 在推断模式下优化内存使用和计算量,以提高推断性能(只允许进行前向传播操作,不支持反向传播或梯度计算)
        for batch in valid_loader:
            batch = {k: v.to(device) for k, v in batch.items()}
            output = model(**batch)
            preds = output.logits.argmax(-1)
            total_correct += (preds == batch['labels']).sum().item()

    return total_correct / len(valid_set)


# 训练
def train():
    global_step = 0  # 计数
    for epoch in range(num_epochs):
        model.train()
        for batch in train_loader:
            batch = {k: v.to(device) for k, v in batch.items()}
            output = model(**batch)
            output.loss.backward()
            optimizer.step()
            optimizer.zero_grad()

            if global_step % log_interval == 0:
                print(f'Epoch: {epoch}, Step: {global_step:4d}, Loss: {output.loss.item():.6f}')
            global_step += 1
        acc = evaluate()
        print(f'Epoch: {epoch}, Acc: {acc:.2%}')
# 开始训练
train()
# 手动实现预测
review = '总体来说还是不错,不足之处可以谅解,毕竟价格放在这里,要求不能太高。'
id2label = {0: '差评', 1: '好评'}
model.eval()
with torch.inference_mode():
    inputs = tokenizer(review, return_tensors='pt')
    inputs = {k: v.to(device) for k, v in inputs.items()}
    logits = model(**inputs).logits
    pred = logits.argmax(-1).item()
    print(f'评论:{review}\n预测结果:{id2label.get(pred)}')
# 借助pipeline
model.config.id2label = id2label
pipe = pipeline('text-classification', model=model, tokenizer=tokenizer, device=device)
# 进行评价
pipe(review)
更多推荐

微软宣布推广数字助理 Copilot;GPT 应用开发和思考

🦉AI新闻🚀微软宣布推广基于生成式人工智能的数字助理Copilot摘要:微软宣布将基于生成式人工智能的数字助理Copilot推广到更多软件产品中。新的AI助理MicrosoftCopilot将在Windows中无缝可用,包括Windows11桌面、Microsoft365、Outlook、Edge浏览器和必应。它能

【Linux网络编程】序列化与反序列化

我们网络收发数据实际上只能接收到字符串,但是在现实生活中描述一个客观物体都是以很多属性来描述的,所以在网络中结构体类型的数据更常见,那我们如何发送结构体数据呢?这里就涉及到协议的概念了。我们想象一个场景,在特种兵执行任务时,他们有特定的战术手语,这样他们就能根据手语进行相应的战术配合了。所以协议也是一样,客户端和服务器

【计算机网络】IP协议

文章目录TCP与IP之间的关系IP地址的认识协议报头格式1.报头和有效载荷如何分离?2.8位协议3.4位版本4.8位服务类型5.16位总长度6.8位生存时间TTL网段划分IP地址的划分子网划分CIDR的提出如何理解CIDRTCP与IP之间的关系如:假设你上高中时,班里有个同学叫张三,他的老爹是学校的校长你感觉每次考试都

微前端qiankun简易上手指南

微前端架构一、什么是微前端架构微前端是一种多个团队通过独立发布功能的方式来共同构建现代化web应用的技术手段及方法策略。微前端借鉴了微服务的架构理念,将一个庞大的前端应用才分为多个独立灵活的小型应用,每个应用都可以独立开发,独立运行,独立部署,再将这些小型应用联合为一个完整的应用。微前端既可以将多个项目融合为一,又可以

Pixea Plus for Mac:极简图片浏览,高效图片管理

在处理和浏览图片时,我们往往需要一个得心应手的工具,尤其是当你的图片库包含了各种不同格式,例如JPEG、HEIC、psd、RAW、WEBP、PNG、GIF等等。今天,我们要推荐的,就是一款极简、高效的Mac图片浏览和管理工具——PixeaPlus。PixeaPlusMac版是一款专为Mac用户设计的图片浏览器和管理工具

【Linux】自动化构建工具 —— make/makefile&&Linux第一个小程序 - 进度条

​​📝个人主页:@Sherry的成长之路🏠学习社区:Sherry的成长之路(个人社区)📖专栏链接:Linux🎯长路漫漫浩浩,万事皆有期待上一篇博客:Linux编译器gcc/g++的使用&&初识动静态链接库文章目录一、前言二、概念三、代码实现四、实现原理1、依赖关系和依赖方法2、清理①.PHONY伪目标②.PHO

ZABBIX 6.4安装部署

ZABBIX6.4安装部署zabbix的主要组成:1、ZabbixServer6.4:Zabbix服务端,是Zabbix的核心组件。它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中。2、ZabbixAgent:Zabbix客户端,部署在被监控设备上,负责采集监控数据,采集后的数据发送给ZabbixServ

林木种苗生产vr虚拟实训教学降低培训等待周期

林业种植管理在保护水土流失、气候变化及经济社会发展中发挥重要的作用,林业教学往往需要进入林区进行实操察验,在安全性、时间及效率上难以把控,因此有更多林业畜牧院校创新性地引进VR虚拟现实技术。在林业领域,实地调查是获取准确数据和深入了解森林生态的重要手段。然而,传统的实地调查方法存在诸多问题,如时间成本高、人力物力投入大

每天一个面试题之类加载机制、spirngboot的启动机制

jvm类加载机制Java虚拟机(JVM)的类加载机制是Java的关键部分,它负责加载、链接和初始化类。类加载机制的主要任务是将Java类的字节码文件转换为可以在JVM上执行的运行时数据结构。这个过程包括以下三个主要步骤:加载(Loading):在此阶段,类加载器负责查找并加载类的字节码文件。这个过程通常从类路径(Cla

搭建私人图床结合内网穿透实现公网访问,让您的摄影作品连接世界

文章目录1.树洞外链网站搭建1.1下载安装树洞外链1.2树洞外链网页测试1.3cpolar的安装和注册2.本地网页发布2.1Cpolar临时数据隧道2.2Cpolar稳定隧道(云端设置)2.3Cpolar稳定隧道(本地设置)3.公网访问测试社交平台具有庞大的用户基础和活跃的社交功能,我们将图片发布到社交平台可以让照片更

Learn Prompt-ChatGPT 精选案例:内容总结

ChatGPT可以通过分析内容并生成一个浓缩版本来总结文本。这对节省时间和精力很有帮助,特别是在阅读长篇文章、研究论文或报告时。通用总结​你所要做的就是把具体的文字复制并粘贴到提示中,并要求ChatGPT对所选文本进行简化总结。这里我们参考openai官网提供的例子Summarizefora2ndgrader来总结一下

热文推荐