在选定的任务和数据集上轻松地对机器学习模型进行基准测试-使用pytorch
torchbench的Python项目详细描述
在选定的任务和数据集上轻松地对pytorch模型进行基准测试。
安装
需要Python3.6+。
pip install torchbench
用法
此库可以与sotabench网站一起使用,也可以单独使用。下面我们将描述sotabench网站的用法。
在Sotabench网站上对模型进行基准测试的步骤:
- 在存储库的根目录中创建一个
sotabench.py
。下面您可以看到一个示例sotabench.py
文件被添加到torchvision存储库中,以测试它的一个组成模型:
fromtorchbench.image_classificationimportImageNetfromtorchvision.models.resnetimportresnext101_32x8dimporttorchvision.transformsastransformsimportPIL# Define the transforms need to convert ImageNet data to expected model inputnormalize=transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])input_transform=transforms.Compose([transforms.Resize(256,PIL.Image.BICUBIC),transforms.CenterCrop(224),transforms.ToTensor(),normalize,])# Run the benchmarkImageNet.benchmark(model=resnext101_32x8d(pretrained=True),paper_model_name='ResNeXt-101-32x8d',paper_arxiv_id='1611.05431',input_transform=input_transform,batch_size=256,num_gpu=1)
- 在您的计算机上本地运行它以验证其工作:
python sotabench.py
或者,如果笔记本是您的首选工作流,则可以在笔记本中运行相同的逻辑。
- 登录并将存储库连接到sotabench。连接存储库后,网站将在每次提交时重新评估您的模型,以确保模型正常工作并且结果是最新的—包括将其他模型添加到基准文件中。
您也可以使用没有sotabench网站的库,只需省略步骤3。在这种情况下,您也不需要将纸张细节放入benchmark()
方法中。
基准
imagenet上的图像分类
imagenet基准上的图像分类是在image_classification.ImageNet类中实现的。
基准管道
- 将模型置于评估模式并发送到设备
- 使用
input_transform
加载和转换imagenet验证数据集。
- 数据集被放入一个dataloader中,其中包含选项
batch_size
和num_workers
- 模型和数据集与可选的
model_output_transform
函数一起传递给任务的评估函数,该函数可以在推理后转换输出 - 将转换后的输出与预期输出进行比较,计算出前1和前5的精度
预期输入/输出
- 模型
output
(在model.forward()
之后,也可以是model_output_transform
)应该是包含模型输出的2d torch.Tensor
;第一个维度应该为每个示例输出(长度batch_size
),第二个维度应该为imagenet中的每个类输出(长度1000)。
wikitext-103上的语言建模
output
(在model.forward()
之后,也可以是model_output_transform
)应该是包含模型输出的2d torch.Tensor
;第一个维度应该为每个示例输出(长度batch_size
),第二个维度应该为imagenet中的每个类输出(长度1000)。wikitext-103基准上的语言建模是在language_modelling.WikiText103类中实现的。
基准管道
- 将模型置于评估模式并发送到设备
- 已加载WikiText-103文本数据集,并且:
使用
encoder
编码:这应该是具有encode
方法的对象,该方法接受原始文本并生成 令牌列表,即token_list = encoder.encode(rawtext)
。这与 在Hugging Face中。采用上下文长度
context_length
(默认1024-与gpt-2相同)。
- 数据集被放入一个dataloader中,其中包含选项
batch_size
和num_workers
- 模型和数据集与可选的
model_output_transform
函数一起传递到任务的计算函数中,该函数可以在推理后转换输出。 预期输出是logits。
LI>将Logit和标签转换为预测语言模型,并计算其困惑度量。
预期输入/输出
- 模型
output
(在model.forward()
之后,也可以选择model_output_transform
)应该是3d torch.Tensor
。
包含模型输出;第一个维度应该是每个示例的输出(长度batch_size
),第二个维度
应该为每个标记输出维度(length=context_length
),为每个vocab输出第三维度
(长度=人声大小)。这与Hugging Face中的接口相同。
即将推出更多基准…
贡献
output
(在model.forward()
之后,也可以选择model_output_transform
)应该是3d torch.Tensor
。
包含模型输出;第一个维度应该是每个示例的输出(长度batch_size
),第二个维度
应该为每个标记输出维度(length=context_length
),为每个vocab输出第三维度
(长度=人声大小)。这与Hugging Face中的接口相同。欢迎各位投稿!