深度学习中的内存管理问题研究综述
點擊上方藍字關注我們
深度學習中的內存管理問題研究綜述
馬瑋良1,2,?彭軒1,2,?熊倩1,2,?石宣化1,2,?金海1,2
1?華中科技大學計算機科學與技術學院,湖北 武漢 430074
2?華中科技大學大數據技術與系統國家地方聯合工程研究中心,服務計算技術與系統教育部重點實驗室,湖北武漢 430074
論文引用格式:
馬瑋良,?彭軒, 等.深度學習中的內存管理問題研究綜述[J].大數據, 2020, 6(4):56-68.
MA W L, PENG X, et al.Memory management in deep learning:a survey[J].Big Data Research, 2020, 6(4):56-68.
1 引言
互聯網規模的迅速擴張促使全球數據呈現爆炸式增長、海量聚集的特點,社交媒體、物聯網等技術的迅速發展導致了大量非結構化數據的出現,從海量數據中提取有價值的信息的難度越來越大。在大數據時代,深度神經網絡(deep neural network, DNN)借助大規模數據的訓練取得了極高的準確率,深度學習得以快速發展,并逐漸應用于人們生活的方方面面。
近年來,人們見證了深度神經網絡在許多領域取得的成功,如計算機視覺、語音識別、自然語言處理等。這些成功是由深度神經網絡新架構的創新帶來的。卷積神經網絡(convolutional neural network,CNN)對空間模式進行建模,在計算機視覺任務中能夠達到當前最優的預測結果;循環神經網絡(recurrent neural network, RNN)在序列建模和結構預測方面也取得了令人備受鼓舞的結果。深度和寬度是構建深度神經網絡最重要和有效的兩個因素。神經網絡的深度越深、功能層越多,越能有效地降低超參數選擇的復雜性,提高模型的魯棒性。與深度相比,寬度是構建網絡的另一個重要因素,它通過不同大小的卷積積累了更多的特征圖。
深度學習應用是一種計算密集型和內存密集型的任務。圖形處理器(graphic processing unit,GPU)、專用集成電路(application specific integrated circuit, ASIC)、可編程邏輯門陣列(fieldprogrammable gate array,FPGA)、張量處理器(tensor processing unit,TPU)等各種專用加速設備為深度神經網絡的發展提供了強大的算力支撐。設計更深層次的深度神經網絡可以達到更高的精度,但是這也給各種加速設備帶來了極大的挑戰。例如,谷歌公司提出的基于轉換器的雙向編碼表征(bidirectional encoder representations from transformers, BERT)模型在訓練中使用了768個隱藏層,占用了73 GB的內存(批處理大小為64)。然而,高帶寬的GPU內存是一種稀缺資源,目前比較強大的NVIDIA GPU V100內存最多只有32 GB,而主流商用云計算GPU類型(如P100)只有16 GB內存。這一限制阻礙了深度學習研究者去探索更先進的模型架構。目前,有一些工作探討了大數據環境下新型存儲系統的相關內容,從存儲系統的角度來解決大數據時代的內存瓶頸問題。王孝遠等人從體系結構、系統軟件等多方面對當前面向大數據的異構內存系統進行了分析研究,提出了一系列異構內存系統的優化方法;陳游旻等人詳細闡述了構建大數據環境下的存儲系統所面臨的挑戰、當前的研究方向以及未來的發展趨勢;李鑫等人則從大數據應用的角度對混合存儲架構進行了深入的探討。本文從深度學習應用的角度,側重于探討深度學習系統中的內存管理問題,與之前的工作有本質的不同。
內存管理是大規模深度學習發展的一個重要挑戰。深度學習中的內存管理已經成為當前深度學習系統研究的重要問題。本文將介紹深度神經網絡的基本特征以及訓練過程,分析深度學習中內存管理的問題,從技術的角度對一些代表性工作進行分類闡述,對比它們的優缺點,并對深度學習中內存管理的未來發展趨勢進行展望。
2 背景介紹
2.1 DNN的結構及訓練過程
DNN是由多種不同類型的層組成的層次結構模型,例如,用于計算機視覺任務的卷積神經網絡、用于自然語言處理的循環神經網絡都可以被稱為深度神經網絡。
筆者將通過一個典型的卷積神經網絡對DNN的模型結構進行具體說明, 如圖1所示。神經網絡需要經過訓練才能用于推理或分類任務。訓練通過執行正向傳播(forward propagation)算法和反向傳播(backward propagation)算法,學習和更新神經網絡各層的權值。
對于正向傳播和反向傳播來說,遍歷的方向以及必須執行的操作是不同的。正向傳播從第一層執行到最后一層,而反向傳播從相反的方向執行(從最后一層到第一層)。正向傳播遍歷了整個神經網絡層,并針對給定的輸入執行特征提取和分類任務,從而完成圖像分類。在正向傳播過程中,每一層的數學操作應用于其輸入特征圖X,將計算結果進行保存,并作為輸出特征圖Y。對于線性神經網絡來說,第N?1層的輸出結果Y直接用作第N層的輸入X,如圖1所示。因此正向傳播的計算是一個序列化的過程,第N層只有在第N?1層完成計算并將其輸出結果Y傳遞到第N層的輸入X時,才能開始相應的操作。
對于未經充分訓練的DNN來說,推斷的圖像類別可能是不準確的。因此,筆者使用一個損失函數來推導正向傳播結束時推理誤差的大小。具體來說,損失函數的梯度是根據最后一層的輸出值推導出來的:
由式(1)可以得到最后一層的輸出結果的梯度dY,進而根據鏈式法則,能夠得到最后一層輸入的梯度dX:
由式(2)可以看出,計算第N層的輸入X的梯度值dX需要的內存空間包括輸入/輸出梯度映射(dY和d X)的內存空間和該層的輸入/輸出特征映射(X和Y)的內存空間。對于線性網絡,將計算得到的第N層的dX直接傳遞到第N?1層,作為第N?1層dX推導的dY。類似地,這個鏈式法則被用來推導權值的梯度,從而更新網絡模型。與正向傳播類似,反向傳播也對各個梯度映射按層執行。當反向傳播到達第一層時,利用權值梯度調整權值,以減少下一個分類任務的預測誤差。
2.2 深度學習中的內存管理問題
近年來,機器學習框架如雨后春筍般蓬勃發展,如TensorFlow、Theano、PyTorch和MxNet等。這些框架提供了豐富的特性來幫助開發者快速設計各種各樣的神經網絡,并且使用各種加速設備來加速DNN的訓練和推理,極大地簡化了神經網絡的實現過程,成為幫助研究者開展研究的利器。但是這些機器學習框架在內存管理方面受到嚴重的限制。
圖1???CNN模型的訓練過程
現有的機器學習框架在訓練DNN時, DNN所有層所需的內存空間必須能夠被放在加速設備的內存中,以此來獲得性能上的優勢。由于層與層之間存在數據依賴關系,加速設備在任何給定時間都只能處理單層的計算。因此,不管神經網絡的結構如何,神經網絡在訓練過程中的計算都是分層進行的。整個神經網絡的內存分配策略沒有考慮到DNN分層訓練的特點,這對內存資源造成了極大的浪費。訓練一個神經網絡需要經過數百萬甚至數億次的迭代才能達到理想的訓練效果。由于基于隨機梯度下降(stochastic gradient-descent, SGD)的反向傳播算法具有隨機性,神經網絡的輸入通常成批地訓練數據,這也將顯著增加內存占用,但是有助于網絡模型更好地收斂到最優解。隨著DNN的網絡結構向著更深、更廣的方向發展,訓練DNN時所需的內存空間越來越大,單個加速設備的內存已經不能滿足訓練的需求。
包括DistBelief等在內的一些系統試圖分割神經網絡模型,從而在多個GPU上進行分布式訓練。這種類型的訓練方式通常被稱為模型并行,其可以顯著地緩解單個加速設備的內存壓力。然而,由于多GPU之間需要頻繁地通信來更新模型參數,導致它的性能較差。
因此,需要通過內存管理解決現有內存分配策略帶來的內存浪費問題,使得深度學習系統能夠充分利用加速設備的算力和有限的內存資源,保證大規模神經網絡在單個加速設備中能夠快速訓練。
在訓練過程中,加速設備的內存主要被3個部分消耗:存儲正向傳播中產生的特征映射、存儲反向傳播中的梯度映射以及卷積算法需要的額外內存空間。與之相比,模型的權值消耗的內存非常少,并且其通常在加速設備內存中長期存在,可以持續更新。在這3個部分中,后兩個部分是臨時內存,可以在當前計算完成后立即釋放。正向傳播和反向傳播的計算都需要特征映射,只有在反向傳播計算完成后,對應層的特征映射占用的內存空間才能夠被釋放。參考 文獻[18]中也指出特征映射和卷積算法所需的緩存空間占據著主要的內存空間。因此,降低特征映射的內存消耗成為目前大多數工作的主要目標,而特征映射在正向傳播和反向傳播中參與的兩次計算之間存在很大的時間間隔,這也為內存管理帶來很多可能。
經過訓練的神經網絡模型常常被部署在邊緣計算設備中。在邊緣計算設備中執行神經網絡模型的推理階段具有隱私保護和實時處理的優勢,但是邊緣計算設備往往具備更少的計算和內存資源,并且部分設備的能源是有限的,對應用能耗的要求很高。與訓練階段不同,在推理階段,神經網絡模型只執行正向傳播的計算過程。因為沒有反向傳播過程來更新模型權值,所以正向計算過程中的中間結果不需要保存。因此,在推理階段,計算設備的內存主要被模型的權值以及計算時所需的臨時內存空間消耗。而這些內存需求已經給邊緣計算設備帶來了較大的內存開銷。因此,在推理階段進行內存管理也是必要的。優化模型結構是當前研究的主要方向。優化模型結構一方面能夠通過剔除一些不必要的模型權值來降低模型的大小;另一方面能夠優化層與層之間的連接,從而減少計算過程。通過優化模型結構能夠有效地降低推理過程中的內存消耗。
3 深度學習中內存管理的關鍵技術
目前已經有很多工作致力于降低單個設備訓練神經網絡時的內存消耗。筆者從深度學習中內存管理用到的技術的角度對當前一些代表性工作進行分類闡述,并對其優缺點進行分析。
3.1 內存交換
內存交換技術是指在加速設備內存和主存之間交換數據,通過在不使用變量時將其從加速設備的內存交換到主存的方式來降低加速設備的內存消耗,并在下一次訪問變量之前將其交換回加速設備內存。加速設備的內存容量相對于主存來說要小很多。例如,目前比較新的NVIDIA GPU V100最大只有32 GB的內存,而服務器中主存的大小通常在100 GB左右,甚至更大。內存交換能夠交換幾乎所有的設備內存數據,因此其能夠大幅度地降低設備內存的占用率。在理想情況下,數據在主存和設備內存之間的通信可以隱藏在計算之下,從而最小化數據傳輸開銷。
Rhu等人提出了一個運行時內存管理解決方案,并將其稱為虛擬深度神經網絡(virtualized deep neural network, vDNN)。vDNN在主存和GPU內存之間虛擬化了神經網絡的內存使用。特征映射作為中間數據結構長期駐留在GPU內存中,并且消耗了大量的GPU內存。因此,vDNN在正向傳播時,將特征提取層的輸出結果特征映射交換至主存中,從而降低GPU內存的占用;在反向傳播時,及時地將其交換至GPU內存中參與梯度計算。為了減少傳輸時間,vDNN將計算與數據傳輸并發進行,以此隱藏數據傳輸的時間。但是,vDNN在每一層的末端同步數據計算和數據傳輸,也就是說,只有在計算和傳輸都完成之后,它才會繼續下一層的計算。這可能導致GPU在開始下一層計算之前必須等待數據傳輸完成。數據在主存和GPU內存之間的傳輸時間并不能完全與GPU的計算時間重疊,筆者還觀察到,卷積(CONV)層相對于激活(ACTV)層和池化(POOL)層有更長的計算時間。為了降低內存交換帶來的性能損失,vDNN也提供了只將CONV層的特征映射交換至主存的策略,這樣就有更多的時間來隱藏由交換內存帶來的通信時延。vDNN僅適用于分層的卷積神經網絡。
TensorFlow使用一個統一的數據流圖來表示一個模型訓練任務。圖中的節點表示計算。在節點之間的邊則保存張量信息。每個節點都由執行程序調度執行。可以將這個圖看作訓練任務的中間表示,因此對于模型來說,對這個圖的優化是通用的和透明的。Chen等人通過修改數據流圖的方式實現了內存交換的策略。根據對數據流圖的分析,選擇生命周期較長的特征映射作為交換到主機內存的目標,這有助于降低通信帶來的開銷。此外,過早地將其交換進來會加劇GPU內存的占用,而過晚地將其交換進來又會帶來性能開銷,因此需要選擇合適的觸發器來將交換出去的特征映射交換至GPU內存中。Chen等人評估了數據流圖中每個節點的計算時間,以此為基礎為每一個目標特征映射選擇合適的觸發器。優化后的數據流圖可以直接在TensorFlow中運行。該方法適用于所有的神經網絡模型。
Chen等人應用數據卸載和數據預取的思想,使用啟發式的調度算法完成數據傳輸。此外作者提到不同的CONV算法計算所需的內存空間大小不同,因此提出了動態選擇CONV算法,根據當前設備內存的占用情況選擇合適的CONV算法,最終使得內存占用和性能都得到優化。Jin等人提出了一種基于CPU-GPU數據遷移的層間內存復用策略,作者記錄了在GPU中每一層數據的內存訪問順序,并跟蹤被其他層引用的數據的引用計數。通過這種方式,可以建立訓練過程的細粒度內存訪問序列,以確定何時遷移數據。作者提出的方法能夠有效地降低內存交換帶來的性能損失。
Wang等人創建了一個統一的張量池,實現了對張量的分配和釋放,同時能夠將一些張量交換至主存中,以降低GPU內存的占用。此外,運行時系統會盡可能地將通信與計算重疊,以保證訓練性能。然而,計算的時間是固定的,因此這種重疊的機會是有限的。作者在GPU內存上創建了一個張量緩存,通過張量復用來最小化總通信開銷。
Peng等人提出了基于張量的GPU內存管理(tensor-based GPU memory management)方案——Capuchin。作者觀察到,所有機器學習框架都基于數據流圖執行DNN模型,其中處理過程是基于張量的運算。深度學習訓練中的張量訪問表現出數據重用和固定訪問模式的特征。此外,一次訓練過程通常由數百萬次的迭代組成。作者還觀察到,張量訪問模式具有跨迭代的規律和重復訪問的特點,通過分析時序和張量訪問模式可以實現高效的內存管理。Capuchin通過動態分析模型訓練時的張量訪問特征,在主存和GPU內存之間精確地執行張量的卸載和預取操作,在保證訓練性能的同時大幅降低了DNN模型訓練時的內存占用。
通過對神經網絡訓練過程中一些特征的觀察,許多工作采用內存交換的方式進行訓練時的內存管理,使得有限的GPU內存能夠充分發揮作用,滿足更深、更廣的神經網絡模型的訓練需要。但是如何降低內存交換產生的性能損失還激勵著研究者們不斷探索新的內存交換策略,最終實現在保證訓練性能的同時大幅降低設備內存占用的目的。
3.2 重計算
重計算技術的思想是將特征映射這樣的中間結果在正向傳播過程中及時地釋放,在反向傳播的計算需要用到特征映射時,再通過重新計算的方式生成,進而參與到當前計算中。這是一種利用計算來換取內存空間的思想。目前有一些工作采用這種方式進行神經網絡訓練時的內存管理,他們通常將計算成本低的中間結果作為重計算的目標,在保證訓練性能的同時盡可能地減少內存消耗。
Chen等人提出了一種GradientCheckpoint算法。具體地說,作者將神經網絡劃分成幾個部分,算法只保留每部分的輸出結果,刪除了所有中間結果。在反向傳播期間,如果需要用到被刪除的結果,則根據每一部分保留的信息重新進行計算。該算法需要的內存空間包括存儲每一部分輸出結果的內存空間和每一部分反向傳播計算時所需的最大內存空間,其通過一次額外的正向計算降低占用的內存。作者在該算法的基礎上,對如何進行神經網絡的劃分以及選取重計算的目標數據做了進一步的探討,最終實現了通過為每層增加一個額外的正向計算,即可訓練一個只有內存開銷的N層線性深度神經網絡的目的。
Gruslys等人將重計算的思想與基于時間的反向傳播(backpropagation through time)算法結合,提出了一種在訓練RNN時減少內存消耗的方法。該方法通過動態編程來平衡中間結果的緩存和重計算,能夠在用戶指定的任何內存約束下完成神經網絡的訓練。但是Chen等人和Gruslys等人提出的方案都基于對線性計算圖的一個強力假設:計算圖中所有中間變量的內存開銷都是相同的,因此他們的工作都局限于一些特定的神經網絡中。通常,有以速度為中心和以內存為中心的重計算策略。以速度為中心的策略保留了重新計算的張量,以便反向計算時其他層也可以直接重用它們。以內存為中心的策略總是重新計算每個反向計算層依賴的張量,與以速度為中心的策略不同,它會釋放重新計算的中間結果,充分利用了節省內存的機會。Wang等人提出的CostAware重計算方法充分利用了這兩種策略的優勢,確保最高的內存占用情況與以內存為中心的策略保持一致,而額外的計算開銷則與以速度為中心的策略相當。
Kusumoto等人提出了一種新的有效的重計算方法,該方法可以應用于更廣泛的神經網絡模型。作者使用圖論的語言將在固定的內存大小約束下最小化計算開銷的一般重計算問題形式化,并提供了一種動態規劃的解決方案。
基于對張量訪問模式的分析,Capuchin能夠根據當前內存的占用情況動態地選取重計算的張量,并決定張量的重計算時間,有效地降低了重計算帶來的性能開銷。Chen等人提出的Checkpointing方案假設計算圖中所有節點的內存開銷是相同的,并且梯度是無法被重構的。Jain等人注意到這些假設限制了先前方法的效率和通用性,因此,他們提出了Checkmate方案,將DNN訓練時間與訓練時內存需求之間的權衡問題抽象為張量重構的優化問題,并將其形式化為混合整數線性規劃問題,根據求得的結果選擇可用于重構的張量,進而制定高效的重計算策略。Checkmate是對Checkpointing策略的一般化,適用于任意類型的深度神經網絡。
任何重計算方法的有效性都取決于其定義的規則:緩存哪些變量以及如何重計算其他變量。目前的研究者圍繞這一問題不斷提出新的方法,以期望用最小的性能開銷換取最大的內存空間。
3.3 內存共享
內存共享技術指的是通過對不同變量生命周期的分析,在不同變量之間重復使用同一塊內存空間。在機器學習框架中有兩種類型的內存共享方式:置換操作和內存復用。置換操作是將輸出結果直接存儲在輸入數據的物理地址上。例如,當計算y=sigmod(a)時,y可以直接存儲在a的內存中。內存復用則是指在生命周期不重疊的變量之間共享同一塊內存。
Chen等人也應用了內存共享的思想。作者構造了以每個變量為節點的沖突圖,然后按拓撲順序遍歷整個圖,并使用計數器來表示節點的生命周期。如果當前操作的輸入變量沒有被其他操作引用,那么當前操作的輸出變量就可以使用置換操作。當節點的生命周期沒有重疊時,節點之間就會發生內存復用。此外作者使用靜態內存分配算法,在訓練開始之前將內存分配給每個節點,以避免運行時的垃圾回收開銷。
Jin等人在層內以及層間應用了內存復用的策略。作者提出了一種層內內存復用策略,該策略根據每一層內正向傳播和反向傳播之間的獨立性來復用它們的內存空間,即節點的梯度能夠重用節點數據的內存空間。這種策略能夠使得當前層的內存占用降低50%,適用于層的范圍較寬的神經網絡。此外作者還觀察到:深度神經網絡中的計算和內存占用都遵循逐層的方式。因此,對于來自不同層的獨立和順序操作而言,可以重復地使用相同的內存空間。
Wang等人通過對張量生命周期進行分析,實現了不同的張量在不同的時間復用同一塊內存空間的目的。生命周期分析經常在一個訓練迭代中動態地保存和釋放張量,而一個典型的訓練階段包含數百萬個迭代,如果使用cudaMalloc和cudaFree,這種高強度的內存操作會帶來巨大的性能開銷。為了解決這個問題,作者實現了一個基于堆的GPU內存池,提前分配一個大的GPU內存作為共享內存池。
內存共享一直以來都是優化內存占用的常見思想。通過對數據結構生命周期的分析,可以較好地應用內存共享策略。目前主流的機器學習框架應用了內存共享的策略。
3.4 壓縮
壓縮在深度學習中的應用有多種方式。在深度學習的訓練階段,通過壓縮算法對變量進行壓縮,能夠有效降低變量占據的內存空間,減少加速設備內存的占用;而在深度學習的推理階段,為了能夠將訓練好的模型部署在內存受限的邊緣設備上,研究者提出了模型剪枝、量化等方法,通過優化模型結構、減少模型參數占用的內存空間等方式對神經網絡模型進行壓縮。
vDNN的工作能夠較好地解決深度神經網絡在訓練時GPU內存占用高的問題,使得更深層次的神經網絡模型能夠在單個GPU中進行訓練。然而,由于PCIe帶寬的限制,當數據移入和移出CPU內存所需的時間比計算DNN的反向傳播算法所需的時間長時,vDNN就會產生不可忽略的性能開銷。為了解決這個問題,Rhu等人[28]實現了一個壓縮直接內存訪問(compressing direct-memory-access,cDMA)引擎,它通過降低交換的數據結構的大小來減小PCIe帶寬較低帶來的性能損失。作者注意到,被廣泛用于DNN的ReLU層產生的可交換的數據具有顯著的稀疏性和高度可壓縮的特征。cDMA引擎利用交換的數據固有的稀疏性,實現了平均提供2.6倍(最大13.8倍)的壓縮比,將vDNN的性能平均提高了53%(最高79%)。由于ReLU層被廣泛應用于CNN模型,所以cDMA在CNN模型中有較好的性能,在其他類型的神經網絡中效果一般。
Jain等人針對訓練過程中的特征映射,提出了一種高效的分層編碼機制,以減少訓練內存的占用。作者注意到在POOL層后的ReLU層的輸出結果能夠用1 bit的數據來代替之前32 bit的數據,通過這種編碼方式能夠實現32倍的壓縮率;此外CONV層后的ReLU層的輸出結果具有高度稀疏性的特征,作者實現了對這種類型的特征映射高效稀疏格式的存儲,利用稀疏性減少內存占用。這兩種編碼方式沒有造成對網絡模型進行訓練時的精度損失。作者對DNN的數據流圖進行靜態分析,識別出適用的編碼方式,并通過插入相關的編碼和解碼函數創建了一個新的數據流圖。
Han等人介紹了“深度壓縮方法”,包括模型剪枝、參數量化和哈夫曼編碼3個階段,這3個階段共同作用,減少了神經網絡的存儲需求,從而使得神經網絡模型能夠被部署在內存受限的嵌入式設備中。首先是模型剪枝,作者通過正常的網絡訓練來學習連接性,修剪小權重的連接:所有權值低于閾值的連接都將從網絡中刪除;然后,對網絡進行再訓練,以獲取剩下的稀疏連接的最終權值;接著是參數量化,作者通過減少表示每個權值所需的比特數來進一步壓縮修剪后的網絡,此外作者還通過權值共享讓多個連接共享相同的權值,減少了需要存儲的有效權值的數量,并且對這些共享的權值進行微調,保證訓練精度不受損失;最后,利用哈夫曼編碼對網絡模型進行進一步的壓縮。通過應用“深度壓縮方法”,作者成功將AlexNet的網絡模型大小從240 MB降至6.9 MB,VGG16的模型大小從552 MB降至11.3 MB,使得這些神經網絡能夠部署在智能手機等邊緣設備中。
Rhu等人和Jain等人提出的方案都可用于降低DNN在訓練過程的內存占用。適用于壓縮技術的數據需要具有高度稀疏性的特征,這使得該技術僅能應用于部分數據結構,往往需要與其他技術配合才能發揮較好的效果。而Han等人的工作則致力于降低DNN在部署時的內存占用,使得DNN模型能夠被應用到邊緣計算設備中。模型剪枝、參數量化等方法會造成模型訓練精度的損失,在保持較高精度的同時減小模型占用的內存空間一直以來都是研究的 熱點。
這些解決方案應用了不同的內存管理技術,各有優點和缺點 ,具體見表1。
4 結束語
本文介紹了深度神經網絡的一些基本特征,分析了深度學習訓練過程中的內存瓶頸,討論了在深度學習中內存管理面臨的挑戰。深度神經網絡正朝著更深、更廣的方向發展,訓練和部署這些深度神經網絡需要更大的內存空間,這對深度學習系統中的內存管理提出了新的挑戰。如何在深度學習系統中進行高效的內存管理,從而滿足更深、更廣層次的神經網絡模型的訓練需求,是當前深度學習系統研究的重要問題。為了分析現有的深度學習中內存管理的解決方案,筆者根據其所應用技術的不同對這些解決方案進行分類。內存管理方案主要應用的技術包括內存交換、重計算、內存共享和壓縮。通過對現有的一些代表性工作的分析,筆者發現大多數工作通過觀察、分析DNN模型訓練過程中的一些特征,從數據流圖、層以及張量等不同的維度,應用上述的一種或多種技術方案,充分發揮各技術的優勢,實現有效的內存管理。從頂層的角度來看,許多工作是類似的,只是它們的實現細節不同。
最后,筆者對在深度學習中進行內存管理的一些新的挑戰和機會做如下總結。
● 基于虛擬內存實現的內存管理方案。內存交換和內存共享技術都通過構建虛擬內存來擴展加速設備有限的內存資源,提高內存資源的利用率。內存交換技術中交換單元的大小對系統的性能有較大的影響,先前的解決方案以頁面為內存交換的基本單位,但是性能較差,現在最好的解決方案是以張量為內存交換的基本單位,在虛擬內存中能夠以一個更合適的粒度對內存進行管理,從而實現更好的性能。但是以張量為粒度的方案并不一定是最優的,后續的研究也需要探索更多可能的方案。此外,內存管理策略也十分重要,內存管理策略決定了優化內存占用的效果。目前的研究都朝著這個方向努力,但是還沒有很好的內存管理策略能夠實現內存占用和計算性能的完美平衡。
● 基于壓縮技術實現的內存管理方案。在目前的工作中,壓縮技術只能應用于特定的層所產生的數據結構。這些特定的數據結構具有稀疏性和高度可壓縮的特征。但是這些特定的數據結構是特定的算法產生的,這為壓縮技術的應用帶來了很大的限制。隨著深度神經網絡的發展,研究人員也在不斷提出新的算法,試圖從數據中提取更多信息,通過新型網絡結構的設計提高模型的準確率。未來會有更多新的算法出現,而這些算法產生的數據結構依然可能會具有稀疏性和高度可壓縮性的特征,這將為壓縮技術的應用帶來更多的可能。
● 深度學習編譯器優化。深度學習系統的編譯器旨在提高系統性能、優化內存使用以及提高模型的可移植性。編譯器框架有機會分析和調度內存的使用,消除許多中間變量產生的不必要的內存空間,優化內存使用。這為解決深度學習系統中的內存管理問題提供了新的思路。目前在這方面已經有了一些研究,比如谷歌公司提出的XLA編譯框架,用于優化TenosrFlow中計算的子圖,可提高計算性能,優化內存占用。但是現有的研究還有很多問題需要解決,距離實現理想的編譯器框架構想還有很長的路要走。
作者簡介
馬瑋良(1996-),男,華中科技大學計算機科學與技術學院碩士生,主要研究方向為新體系結構下深度學習系統的優化 。
彭軒(1995-),男,華中科技大學計算機科學與技術學院博士生,主要研究方向為分布式深度學習系統平臺 。
熊倩(1997-),女,華中科技大學計算機科學與技術學院碩士生,主要研究方向為聯邦學習 。
石宣化(1978-),男,博士,華中科技大學計算機科學與技術學院教授,大數據技術與系統國家地方聯合工程研究中心副主任,主要研究方向為并行與分布式計算、多核體系結構與系統軟件。當前主要研究云計算與大數據處理、異構并行計算等 。
金海(1966-),男,博士,華中科技大學教授,長江學者特聘教授,中國計算機學會會士,IEEEFellow,ACM終身會員,武漢網絡安全戰略與發展研究院院長,華中科技大學大數據技術與系統國家地方聯合工程研究中心主任,服務計算技術與系統教育部重點實驗室主任。主要研究方向為計算機體系結構、計算系統虛擬化、集群計算和云計算、網絡安全、對等計算、網絡存儲與并行I/O等 。
往期文章回顧
《大數據》2020年第4期目次&摘要
專題導讀:大數據異構并行系統
GPU事務性內存技術研究
大規模異構數據并行處理系統的設計、實現與實踐
面向大數據異構系統的神威并行存儲系統
面向異構眾核超級計算機的大規模稀疏計算性能優化研究
聯系我們:
Tel:010-81055448
? ? ? ?010-81055490
? ? ? ?010-81055534
E-mail:bdr@bjxintong.com.cn?
http://www.infocomm-journal.com/bdr
http://www.j-bigdataresearch.com.cn/
轉載、合作:010-81055537
大數據期刊
《大數據(Big Data Research,BDR)》雙月刊是由中華人民共和國工業和信息化部主管,人民郵電出版社主辦,中國計算機學會大數據專家委員會學術指導,北京信通傳媒有限責任公司出版的期刊,已成功入選中文科技核心期刊、中國計算機學會會刊、中國計算機學會推薦中文科技期刊,并被評為2018年國家哲學社會科學文獻中心學術期刊數據庫“綜合性人文社會科學”學科最受歡迎期刊。
關注《大數據》期刊微信公眾號,獲取更多內容
總結
以上是生活随笔為你收集整理的深度学习中的内存管理问题研究综述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++中结构体字符指针成员无法赋值
- 下一篇: 为什么说多道程序概念得到了中断和通道技术