本文分享自華為云社區(qū)《昇騰CANN 7.0 黑科技:DVPP硬件加速訓(xùn)練數(shù)據(jù)預(yù)處理,友好解決Host CPU預(yù)處理瓶頸》,作者: 昇騰CANN 。
在NPU/GPU上進行模型訓(xùn)練計算,為了充分使用計算資源,一般采用批量數(shù)據(jù)處理方式,因此一般情況下為提升整體吞吐率,batch值會設(shè)置的比較大,常見的batch數(shù)為256/512,這樣一來,對數(shù)據(jù)預(yù)處理處理速度要求就會比較高。對于AI框架來說,常見的應(yīng)對方式是采用多個CPU進程并發(fā)處理,比如PyTorch框架的torchvision就支持多進程并發(fā),使用多個CPU進程來進行數(shù)據(jù)預(yù)處理,以滿足與NPU/GPU的計算流水并行處理。
然而,隨著NPU算力和性能的倍速提升,host CPU數(shù)據(jù)預(yù)處理過程逐漸成為性能瓶頸。模型端到端訓(xùn)練時間會因為數(shù)據(jù)預(yù)處理的瓶頸而拉長,這種情況下,如何解決性能瓶頸,提升端到端模型執(zhí)行性能呢?
# Data loading code traindir = os.path.join(args.data, 'train') normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) train_dataset = datasets.ImageFolder( traindir, transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), normalize, ]))
import torchvision_npu # 導(dǎo)入torchvision_npu包 # Data loading code traindir = os.path.join(args.data, 'train') normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) torchvision_npu.set_image_backend('npu') # 設(shè)置圖像處理后端為npu train_dataset = datasets.ImageFolder( traindir, transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), normalize, ]))
if img.device.type == 'npu': _assert_image_npu(img) return F_npu.resize(img, size=size, interpolation=interpolation.value)
return torch.ops.torchvision.npu_resize(img, size=sizes, mode=mode)
下面來看下替換之后的性能如何。以ImageNet中最常見的分辨率375*500的jpeg圖片為例,CPU上執(zhí)行預(yù)處理操作需要6.801ms:
使用DVPP不但能加速數(shù)據(jù)預(yù)處理,還能異步執(zhí)行host下發(fā)任務(wù)和device任務(wù),整個流程只需要2.25ms,單張圖片處理節(jié)省了60%+的時間。
在ResNet50訓(xùn)練過程中,512batch數(shù)據(jù)處理只需要1.152 s,預(yù)處理多進程處理場景下性能優(yōu)勢更加明顯。
基于Atlas 800T A2 訓(xùn)練服務(wù)器,ResNet50使用DVPP加速數(shù)據(jù)預(yù)處理,單P只需要6個預(yù)處理進程即可把NPU的算力跑滿;而使用CPU預(yù)處理,則需要12個預(yù)處理進程才能達到相應(yīng)的效果,大大減少了對host CPU的性能依賴。
典型網(wǎng)絡(luò)場景,基于Atlas 800T A2 訓(xùn)練服務(wù)器,在CPU預(yù)處理成為性能瓶頸的情況下,使用DVPP預(yù)處理加速即可獲得整網(wǎng)訓(xùn)練速度顯著提升,其中ShuffleNetV2整網(wǎng)性能提升25%,MobileNetV1提升38%。
昇騰CANN內(nèi)置的預(yù)處理算子是比較豐富的,后續(xù)在繼續(xù)豐富torchvision預(yù)處理算子庫的同時,也會進一步提升預(yù)處理算子的下發(fā)和執(zhí)行流程,讓流水處理的更好,減少數(shù)據(jù)處理的時間,持續(xù)提升昇騰CANN的產(chǎn)品競爭力,滿足更廣泛的業(yè)務(wù)場景訴求。
點擊關(guān)注,第一時間了解華為云新鮮技術(shù)~文章來源:http://www.zghlxwxcb.cn/news/detail-750184.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-750184.html
到了這里,關(guān)于昇騰CANN DVPP硬件加速訓(xùn)練數(shù)據(jù)預(yù)處理,友好解決Host CPU預(yù)處理瓶的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!