如何将FinBert/BERT代码从CPU迁移至NVIDIA GPU运行?
解决FinBert代码迁移至GPU运行的问题
核心问题原因
你使用的是基于PyTorch的Hugging Face Transformers库实现FinBert,但尝试用TensorFlow的tf.device上下文指定GPU,这两个框架的设备管理体系完全独立,因此该方法无法生效。
正确的GPU迁移步骤
1. 将模型与Pipeline绑定到GPU
修改模型加载和Pipeline创建代码,明确指定使用GPU:
# 导入必要包 import pandas as pd from transformers import BertTokenizer, BertForSequenceClassification from transformers import pipeline import nltk # 加载预训练FinBert模型并移至GPU finbert = BertForSequenceClassification.from_pretrained('yiyanghkust/finbert-tone', num_labels=3).to('cuda') tokenizer = BertTokenizer.from_pretrained('yiyanghkust/finbert-tone') # 创建Pipeline时指定device=0(对应你的GPU设备索引) nlp = pipeline("sentiment-analysis", model=finbert, tokenizer=tokenizer, device=0)
2. 验证GPU运行状态
添加以下代码确认模型是否成功迁移到GPU:
print(f"模型是否在GPU上运行: {next(finbert.parameters()).is_cuda}")
若输出True,则说明模型已正确部署到GPU。
额外提速优化
你的循环为逐条处理数据,效率较低,可尝试批量处理优化:
- 将所有文本拆分出的句子合并为一个大列表,一次性传入
nlp进行批量预测 - 根据原文本的句子数量拆分结果,再计算单条文本的情感占比
这种方式能减少GPU设备的来回切换开销,进一步提升运行速度。
注意事项
你的NVIDIA GeForce MX130为入门级GPU,显存4GB,处理大批次数据时需控制批量大小避免显存溢出:
- 通过Pipeline的
batch_size参数调整(例如batch_size=8或batch_size=16) - 若出现显存不足错误,继续减小
batch_size即可。
内容的提问来源于stack exchange,提问作者Kyle_Stockton
相关产品推荐
相关产品推荐

