王慶林,裴向東,廖林玉,王浩旭,李榮春,梅松竹,李東升
(1. 國防科技大學 計算機學院, 湖南 長沙 410073;2. 國防科技大學 并行與分布處理國防科技重點實驗室, 湖南 長沙 410073)
隨著人工智能+(artificial intelligence+, AI+)的快速發展,深度學習技術逐漸在各個領域實現了技術落地。作為一類代表性深度神經網絡,卷積神經網絡(convolutional neural networks, CNNs)被廣泛應用在各種場景中,如自動駕駛[1]、視頻處理[2]、科學計算[3]等。在CNNs中,卷積層占據了大部分的計算開銷,從而使得卷積層的優化成為CNNs網絡性能的關鍵,目前成為學術界和工業界研究的熱點。
實現卷積層計算的方法主要有直接卷積[4-5]、快速傅里葉變換(fast Fourier transform, FFT)卷積[6-9]、Winograd卷積[10-11]、矩陣乘卷積[12-14]四種算法。直接卷積算法根據卷積層的定義直接進行實現,為獲得較高的性能,通常需要針對卷積核大小、卷積步長等卷積參數進行優化。FFT和Winograd卷積算法分別通過FFT和Winograd轉換來降低卷積復雜度,因此這兩種算法也常被稱為快速卷積算法。盡管如此,快速卷積算法通常只適用于部分卷積配置,如Winograd算法通常只適合于卷積核大小為3×3的情況。矩陣乘卷積算法是將卷積計算轉換為通用矩陣乘操作,是實現卷積計算的通用算法,是PyTorch[15]、TensorFlow[16]等深度學習框架以及cuDNN[17]、oneDNN[18]等神經網絡庫首要提供的算法。矩陣乘卷積算法可分為顯式算法和隱式算法。如果矩陣轉換和矩陣乘融合為一體,則無須存儲完整的轉換矩陣,稱為隱式算法,否則稱為顯式算法。本文主要聚焦顯式矩陣乘卷積算法,構建完整的轉換矩陣,通過調用已有的矩陣乘函數庫來實現卷積計算,為各種卷積參數配置提供高性能實現基礎。……