问题标签 [pytorch-lightning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pytorch - 在 Pytorch Lightening 训练期间切换模型
我正在增量学习中体验知识蒸馏。基本上,在每个阶段我都会初始化一个新模型并将其作为学生模型在当前数据上进行训练,并使用旧模型(在前一阶段训练)作为教师。到目前为止,代码中没有错误,但问题是损失在每个阶段之后都不会减少。另外,PL 中有没有办法在 on_train_epoch_start 中初始化新的优化器?
python - 为什么 Databricks 笔记本单元一直在训练我的 ML 模型“正在运行命令……”?
我正在使用 PyTorch Lightning 在 Azure Databricks 集群(在笔记本上)上训练 PyTorch 模型,并使用 mlflow 进行跟踪。
我想在 Databricks 托管的跟踪服务器上存储训练指标 + 工件。
要启用它,代码如下:
但是,笔记本单元格在“运行命令...”状态中停留的时间太长:
即使在驱动程序日志中执行似乎已经结束:
并且实验在 mlflow UI 中标记为 FINISHED:
手动停止执行也无法解决,因为单元格将永远处于“正在取消...”状态。所以剩下的唯一选择就是清除集群状态。
这是一个问题,因为我无法执行对工件日志记录有用的进一步命令:
这个问题似乎与 GC 问题有关:
2021-04-22T07:58:58.025+0000: [GC (分配失败) [PSYoungGen: 28399104K->100290K(28499456K)] 28696488K->397698K(85935104K), 0.0755720 secs] [Times:06, user=0.真实=0.08 秒] 2021-04-22T08:01:01.645+0000: [GC (System.gc()) [PSYoungGen: 4522724K->54360K(28561920K)] 4820132K->351776K(85997568K), 0.0237712 秒] :用户=0.09 sys=0.01,真实=0.02 秒] 2021-04-22T08:01:01.669+0000:[完整 GC (System.gc()) [PSYoungGen: 54360K->0K(28561920K)] [ParOldGen: 297416K ->123173K(57435648K)] 351776K->123173K(85997568K), [元空间: 203356K->203325K(219136K)], 0.3513905 秒] [时间: user=0.99 sys=0.00, real=0.36 secs]
难道我做错了什么?我应该以其他方式跟踪实验 + 工件吗?运行单节点和集群都不起作用,也不能减少训练集的大小。
python - 在 PyTorch Lightning 中累积和绘制回归结果
我正在使用 PyTorch 闪电为回归问题开发卷积神经网络。我已将数据划分为训练、验证和测试数据加载器,并为 LightningModule 训练和验证步骤编写了基本代码。这是我到目前为止所拥有的:
在训练阶段之后,我想冻结模型,并收集所有三个数据集的测试预测。最后,我想为所有点制作预测值与实际值的奇偶散点图(通过它们所属的集合区分颜色)。我研究的一种方法是修改init以声明 6 个单独的列表,如下所示:
然后我尝试分别在三个数据加载器上运行 trainer.test(),但我不确定如何指定每次调用 test() 时要填充哪对列表。我也不确定这是否是记录最终回归结果的最佳方式。对此的任何见解将不胜感激。
nlp - 在特定领域继续训练预训练的 BERT 模型的最简单方法是什么?
我想使用预训练的 BERT 模型,以便在文本分类任务中使用它(我正在使用 Huggingface 库)。但是,预训练模型是在与我不同的领域上训练的,并且我有一个大型未注释数据集,可用于对其进行微调。如果我只使用我的标记示例并在针对特定任务 (BertForSequenceClassification) 进行训练时“随时随地”对其进行微调,那么数据集太小而无法适应特定领域的语言模型。最好的方法是什么?谢谢!
pytorch - Pytorch 闪电推理
我使用多个 GPU 训练了一个模型,pytorch lightning
并特别欣赏了使用多个 GPU 的便利性。现在在训练之后,我如何仍然利用闪电 GPU 功能在测试集上运行推理并存储/导出预测?
关于推理的文档并不针对此。
提前致谢。
python - Pytorch Lightning:在训练期间获取模型在完整训练数据上的输出
TL;DR:在 on_train_epoch_start 期间,我想获得模型在所有训练数据上的输出,作为一些预训练计算的一部分。我在问闪电友好的方法是什么。
这是一个奇怪的问题。
在我的项目中,每 10 个 epoch 我选择完整训练数据的一个子集,并仅在该子集上进行训练。在计算要使用哪个子集的部分过程中,我在训练数据集中的每个数据点上计算模型的输出。
我的问题是,在 pytorch 闪电中做到这一点的最佳方法是什么?目前我有一个带on_train_epoch_start
钩子的回调。在此挂钩期间,回调从生成自己的数据加载器trainer.datamodule.train_dataloader()
,并手动迭代数据加载器,计算模型输出。这并不理想,对吧?
这让我遇到了 pytorch 闪电的问题。例如,在 GPU 上训练时,我得到一个错误,因为我的回调使用它自己的数据加载器,而不是训练器的train_dataloader
,所以它不在 GPU 上。但是,我不能使用 trainer's train_dataloader
,因为在我的回调选择了它的子集之后,它会将 trainer's 更改train_dataloader
为只是那个子集,而不是完整的数据集。
我想我有两个主要问题:
- 有什么办法可以避免制作单独的数据加载器?我可以以某种方式调用火车循环吗?在完整数据集上获取模型输出似乎是一个简单的操作,我认为这将是单行的。
- 如何获取/使用与所有 Pytorch Lightning 自动修改同步的数据加载器?(例如 GPU/CPU、数据加载工作者、pin_memory)
pytorch - 计算精度问题
我正在使用 Torch Metrics 来尝试计算我的模型的准确性。但我收到了这个错误。我尝试使用.to(device="cuda:0")
,但出现 cuda 初始化错误。我也尝试过使用.cuda()
,但这也不起作用。我正在使用带有 Titan Xp GPU 的 PyTorch 闪电。我在电影镜头数据集上使用了一个 mish 激活函数。
代码:
错误:
text-classification - 如何在 BertForSequenceClassification 之上添加额外的密集层?
我想在分类层之前添加一个额外的层(和 dropout)(我正在使用 PyTorch 闪电)最好的方法是什么?
numpy - 如何在 Pytorch Lightning 中使用 numpy 数据集
我想制作一个数据集NumPy
,然后想训练和测试一个简单的模型,比如“线性或逻辑”。
我正在努力学习Pytorch Lightning
。我找到了一个教程,我们可以使用 NumPy 数据集,并且可以在这里使用均匀分布。作为一个新人,我没有得到完整的想法,我该怎么做!
我的代码如下
这部分是根据给出的答案 [Here, I want to take a and b as features
and c
as label or target variable
.]
现在,如何将数据集传递到“训练和验证方法”中?
pytorch - 如何在 PyTorch Lightning 中将数据集从 prepare_data() 获取到 setup()
我使用PyTorch LightningNumPy
的prepare_data()
方法制作了自己的数据集。DataModules
现在,我想将数据传递给setup()
方法以拆分为训练和验证。