MindSpore技術理解(下)
4 GraphEngine
由於深度學習算法需要進行大量的計算,很多公司都設計了自己的深度學習專用處理器(如谷歌的張量處理器、阿里巴巴的含光等),華為也發布了自主設計的神經網絡處理單元(Neural Processing Unit,NPU)——昇騰系列芯片。可以借助 GE 在 GPU、CPU、昇騰系列芯片上操作 MindSpore 定義的模型。 如圖 1 所示,GE 位於 ME 和設備之間。GE 將 ME 的輸出數據流圖作為輸入,在 GE 內部執行某些 圖處理操作,以實現昇騰系列芯片的高效操作。GE 可以直接訪問所有底層組件,負責圖形管理、資 源分配和設備交互。
1. 前端交互
GE 內部初始化一個會話,與 ME 的會話通信,以獲取待添加的圖。為了避免直接訪問前端的數據結構,在發送前使用 protobuf 實現序列化。GE 內部采用協同響應的反序列化,這一過程 保證了數據完全解耦。
2. 圖編譯器
GE 最基本也是最重要的功能是圖形管理,包括圖形處理和圖形生命周期管理。GE 內執行一系列圖形處理操作,以實現對設備的有效操作。
首先,對變量和特征映射的所有形狀進行推斷,以便以后進行內存分配。設備中的物理計算核在 GE 中對應不同的抽象引擎,根據引擎是否支 持算子以及引擎上的成本(有的算子只能在特定的引擎上運行,所以分配引擎時要看引擎是否 支持算子,如果多個引擎都支持該算子,則看每個引擎上的成本),圖中的每一個算子都被分配 到一個最優的引擎。
然后,根據分配的引擎,將整個圖分解為若干個子圖。某些算子被添加到 子圖中,作為圖邊標記。這樣的一個分區使以后的優化和編譯更加高效。
根據分配的不同引擎,每個子圖采用不同的優化過程。該方法刪除了部分冗余算子,將部分算子組合為一個大算子,進一步減少了運算量。專門設計了一種新穎的數據布局格式,以便 在昇騰系列芯片上實現更快的操作。將原始張量沿 C 軸切分為若干 C0(例如 C0=16),並將其 轉換為如 4 2.圖 6 所示的 5D 格式,從而確保更快地在昇騰系列芯片上獲取硬件。
3. 執行和插件
圖形編譯和資源分配是在高度優化的圖形上完成的。GE 在考慮內存復用的基礎上進行內存申請,同時根據圖內信息進行流和同步信號的分配。事件作為不同流之間的同步信號,保證正確的任務執行順序。每個算子被編譯為一個或多個任務,同一個算子編譯出來的任務被綁定到同一條流上,不同流上的任務可以並行執行。根據不同節點之間的控制依賴關系,可以導出圖中所有節點的時序關系。不同流可以並行執行,同一流中的算子之間串行操作。因此,根據順序關系信息選擇適當的流分配策略,從而保證節點之間的完全並行計算,而且不存在控制依賴關系。算子加載到對應的引擎上執行。GE 還提供 GE Plugins 作為外部插件,以便擴展 GE 的特 性。GE 只定義了外部插件模塊的注冊接口,具體功能在每個插件中實現,這樣的設計保證了 GE 的可行性和靈活性。
5 MindData
5.1 數據處理
數據處理是一個單獨的異步流水線,它為張量饋入模型做好准備。在流水線內,數據被組織成一系 列具有不同列的行,所有列都用列名標識,並且可以獨立訪問。流水線總是從一個源數據集算子開 始,該算子從磁盤(如 MindDataset)讀取數據,並包含選擇 shuffling 和 sharding 策略的標記。為 了訪問流水線中的數據,可使用迭代器(Python 訪問)或設備隊列(直接發送到加速器設備)。
數據處理的體系結構本質上是流水線且並行的,管道的運行默認是異步的,但用戶也可以在圖中插 入同步點,以便流水線算子能夠實時反饋循環。未來,流水線將進行動態調整,以充分利用所有可 用的資源,包括用於圖像處理的硬件加速器或用於緩存的可用內存,用戶只需配置默認參數以獲得 良好的性能,而無須進行手動調優。
為了讓用戶實現快速遷移,數據處理支持用戶已有的 Python 數據增強作為自定義算子以 pyfunc 方 式接入,同時現有的 Python 數據集類可以作為參數傳遞給 GeneratorDataset 接入。不斷涌現的新 網絡對數據處理的靈活性提出了新要求。數據處理支持使用用戶自定義的函數(或調度)來更改參 數,例如 mini-batch 大小;還支持用戶對整個 mini-batch 進行自定義轉換,以進行 mini-batch 級的圖像大小或多行操作(如圖像混合)。為了獲得更多樣的增強,每個樣本的增強可以從一個數據增強 操作列表中隨機選擇。另外,可以通過外部搜索(即 Fast AutoAugment)在候選數據增強操作列表 中進行選擇,最近關於 randomAugment 和 uniformAugment 的研究表明,對很多數據集來說,只 隨機從大量數據增強策略中選擇合適的,不采用耗費大量搜索時間的自動數據增強方法,同樣能獲 得很好的結果。在訓練中收集的度量的反饋(如 loss)也可以傳回至數據集,以在數據處理中執行 動態調整,如 Adversrial AutoAugment 中所示。
5.2 MindRecord MindRecord
數據集格式將用戶的訓練數據按不同類型、不同頁面進行存儲,建立輕量化、高效的索引,並提供一套接口,方便用戶將訓練數據轉換成 MindRecord 格式,然后使用 MindDataset 將訓 練數據讀入數據集。同時,可以快速從數據集讀取重要的元數據(即數據集大小或數據布局)以提 高性能或簡化用戶訪問。MindRecord 能夠支持小塊數據的高效順序 I/O,還可以根據用例需要支持高效的隨機行訪問和下沉過濾。隨着新用例的出現,進一步優化的功能會下沉到該數據集。
5.3 MindInsight MindInsight 提供訓練看板、溯源、性能分析和調試器的功能。這些功能可以幫助開發者在訓練模型 的過程中發現模型訓練過程中出現的偏差,發現超參、數據增強等因素的影響,並對模型進行調試 和性能分析。通過 MindInsight,開發者可以更好地觀察和理解訓練過程,這樣可以提升模型優化效率並優化開發者體驗。
MindInsight 架構如 5.3 圖 7 所示。
MindInsight 以模型訓練中生成的日志文件作為輸入。通過文件解析、信息提取、數據緩存、圖表繪 制等一系列過程,將二進制訓練信息轉換成易於理解的圖表,並展示在網頁上。
5.3.1 訓練看板 MindInsight
支持訓練過程可視化。訓練看板支持在頁面上查看訓練過程。訓練看板包括訓練標量信 息、參數分布圖、計算圖、數據圖、數據抽樣等模塊。 訓練看板是 MindInsight 在訓練過程呈現方式上的創新。通過在一個頁面中集成多種類型的數據,用 戶只需要打開訓練看板就能概覽訓練情況。
5.3.1 圖 8 展示了訓練看板的一個示例。
5.3.2 溯源 MindInsight 還支持溯源可視化。
通過將多個訓練的溯源信息整合到表格和圖形中,用戶可以輕松選 擇最優的數據處理流水線和超參設置。溯源可視化包括模型溯源可視化和數據溯源可視化。模型溯 源函數可以記錄模型訓練的關鍵參數,如損失函數、優化器、迭代次數、精度等。MindInsight 中顯示多次訓練的超參和評估指標,幫助用戶選擇最優超參。未來,將逐步引入輔助超參推薦,幫助用 戶快速優化超參。
圖 9 展示了模型溯源可視化的一個示例。數據溯源可視化可以記錄每次模型訓練的數據處理流水線。多次訓練的數據處理模式顯示在 MindInsight 上,幫助用戶選擇最優的數據處理流水線。
圖 10 展示了數據溯源可視化的一個示例。
5.3.3 性能分析
為了滿足工程師對神經網絡性能優化的要求,我們設計並實現了性能分析工具。它可以打開 MindSpore 神經網絡的執行過程,收集各算子的時間、內存等數據。MindInsight 會進一步對性能數 據進行整理、分析,呈現多維度、多層次的性能分析結果。這為神經網絡性能優化提供了方向。
性能數據展示維度包括:
1. 迭代軌跡 迭代軌跡將神經網絡的執行分解為多個階段,包括數據讀取、前向和反向計算、Allreduce 等, 工程師可以快速發現哪個階段是目前的性能瓶頸。
2. 算子性能 算子性能將聚合並整理算子執行時間的數據,這樣工程師可以很容易找出耗時的算子。
3. 時間軸 時間軸可以顯示芯片側執行流和執行任務的狀態,幫助工程師進行細粒度的性能分析。
4. MindData Profiling 可以幫助用戶定位和分析訓練數據獲取過程中的瓶頸,工程師可以通過提高瓶頸算子的線程數 等方法來提高性能。
5.3.4 調試器
神經網絡訓練中經常出現數值誤差情況,如無窮大等,用戶希望分析訓練無法收斂的原因。但是, 由於計算被封裝為黑盒,以圖的方式執行,工程師很難定位其中的錯誤。MindInsight 調試器是圖模 式下訓練調試的工具,用戶可以在訓練過程中查看圖的內部結構以及節點的輸入/輸出,例如查看一 個張量的值,查看圖中的節點對應的 Python 代碼等。此外,用戶還可以選擇一組節點設置條件斷點, 實時監控節點的計算結果。
6 MindArmour
6.1 對抗性攻擊防御
對抗性攻擊[26,27]對機器學習模型安全的威脅日益嚴重。攻擊者可以通過向原始樣本添加人類不易感 知的小擾動來欺騙機器學習模型[28,29]。為了防御對抗性攻擊,MA 提供了攻擊(對抗樣本生成)、 防御(對抗樣本檢測和對抗性訓練)、評估(模型魯棒性評估和可視化)等功能。 給定模型和輸入數據,攻擊模塊提供簡單的 API,能夠在黑盒和白盒攻擊場景下生成相應的對抗樣 本。這些生成的對抗樣本被輸入防御模塊,以提高機器學習模型的泛化能力和魯棒性。防御模塊還 實現了多種檢測算法,能夠根據惡意內容或攻擊行為來區分對抗樣本和正常樣本。評估模塊提供了 多種評估指標,開發者能夠輕松地評估和可視化模型的魯棒性。
6.2 隱私保護人工智能 隱私保護也是人工智能應用的一個重要課題。MA 考慮了機器學習中的隱私保護問題,並提供了相 應的隱私保護功能。針對已訓練模型可能會泄露訓練數據集中的敏感信息問題[30,31],MA 實現了一 系列差分隱私優化器,自動將噪聲加入反向計算生成的梯度中,從而為已訓練模型提供差分隱私保 障。特別地,優化器根據訓練過程自適應地加入噪聲,能夠在相同的隱私預算下實現更好的模型可 用性。同時提供了監測模塊,能夠對訓練過程中的隱私預算消耗進行動態監測。用戶可以像使用普 通優化器一樣使用這些差分隱私優化器。
7 端雲協同架構
MindSpore 旨在構建一個從端側到雲側全場景覆蓋的人工智能框架,將支持“端雲”協同能力,包 括模型優化、端側訓練和推理、聯邦學習等過程,如圖 11 所示。
1. 模型生成與優化工具包 移動和邊緣設備通常資源有限,如電源和內存。為了幫助用戶利用有限的資源部署模型, MindSpore 將支持一系列優化技術,如模型自適應生成、量化策略等,如圖 11 左側所示。模 型自適應生成是指應用神經架構搜索(Neural Architecture Search,NAS[32])技術來生成在不 同設備下時延、精度、模型大小均滿足需求的模型。量化策略是指通過以更少位數的數據類型 來近似表示 32 位有限范圍浮點數據類型的過程,MindSpore 支持訓練后量化和量化感知訓練。
2. 端側訓練和聯邦學習 雖然在大型數據集上訓練的深度學習模型在一定程度上是通用的,但是在某些場景中,這些模 型仍然不適用於用戶自己的數據或個性化任務。 MindSpore 計划提供端側訓練方案,允許用戶訓練自己的個性化模型,或對設備上現有的模型 進行微調,同時避免了數據隱私、帶寬限制和網絡連接等問題。端側將提供多種訓練策略,如 初始化訓練策略、遷移學習、增量學習等。MindSpore 還將支持聯邦學習,通過向雲側發送模 型更新/梯度來共享不同的數據,如圖 11 所示。基於聯邦學習,模型可以學習更多的通用知識。
3. 移動和邊緣設備部署 MindSpore 提供輕量級的計算引擎,支持模型在設備上高效執行。在將預先訓練好的模型部署 到設備側時,通常需要進行模型轉換。然而,這個過程可能導致性能降低和精度損失。在 MindSpore 中,端側推理模式能夠兼容雲上訓練好的模型,因此,在設備上部署已經訓練好的 模型時,無須進行轉換,這樣避免了潛在的性能損失。此外,MindSpore 還內置了針對設備的 各種自動優化,例如圖和算子融合、精細復雜的內存管理、硬件加速等,如圖 11 右側所示。
8 評估
在本節中,我們評估了 MindSpore 在自動並行方面的性能,還在華為昇騰系列芯片集群上進行了實 驗,並與當前主流的深度學習框架進行了性能對比。結果表明,我們的系統具有以下特點:(
1)高 通量;
(2)加速比隨着集群的增加保持穩定。此外,我們提供了幾種模型的推理性能,並獲得了比 主流的深度學習框架更好的性能。
8.1 自動並行 我們在一個有 8 台設備的昇騰服務器上進行了實驗。使用標准的 ResNet50,分別在原始數據並行 和自動並行下訓練。原始數據並行和自動並行的比較結果如圖 12 所示,分類數目從 1K 到 1024K 左右。我們觀察到當分類數目小於 32K 時,兩種模式的迭代次數幾乎相同,因為該算法找到了數據 並行(Data-Parallelism,DP)策略。當分類數目超過 64K 后,自動並行模式相比數據並行模式, 在性能上有了較大提升。這是因為當分類數目超過 64K,該算法返回的策略是混合並行(Hybrid Parallelism,HP)(表示模型頭部的算子是數據並行的,而 MatMul 算子是模型並行的,如圖 3 所示)。 這一過程節省了很大的通信開銷,因為模型並行避免了 MatMul 算子中由可學習參數同步引起的大 量 AllReduce。 當分類數目大於 256K 時,由於“內存溢出”(Out of Memory,OOM)失敗,數據並行模式甚至不 能運行,而自動並行模式下,ResNet50 訓練成功,迭代時間略有增加。
8.2 性能測試
8.2.1 訓練性能
在昇騰系列芯片的集群上完成了 ResNet50 和 BERT-large 模型的訓練,並與 TensorFlow 進行 了對比。TensorFlow 使用 NVIDIA DGX-2(16x V100 32G),我們通過配置不同的 AI 設備數來對比 MindSpore 和 TensorFlow 的訓練性能。如圖 13 和圖 14 所示,隨着 AI 設備數的增加,MindSpore 可以獲得比 TensorFlow 更大的吞吐量。 如圖 15 所示,使用昇騰系列芯片的 MindSpore 在訓練 ResNet-50v1.5 和 BERT-large 時都可以獲 得超過 93%的加速比。而使用 GPU 的 TensorFlow 在訓練 ResNet50 時只能達到 79%的加速比, 在訓練 BERT-large 時只能達到 86%的加速比。
8.2.2 推理性能
還使用了不同的輕量級模型在華為 Mate 30 手機上進行了推理實驗,如表 2 所示。在 CPU 上 執行,並將推理延遲與 TensorFlow 進行比較。結果表明,MindSpore 比 TensorFlow 具有更短的推 理時延。 表 2 用 MindSpore 和 TensorFlow Lite 在華為 Mate 30 手機進行推理的性能比較。
9 結論及未來工作方向
在本文中,介紹了新的深度學習框架——MindSpore,重點介紹了 MindSpore 的四個重要組成 部分:ME、GE、MD 和 MA 以及 MindSpore 的幾個新特性,即自動並行、自動微分和端邊雲協同 訓練,這使 MindSpore 能夠實現易開發、高效執行、全場景覆蓋三大目標。此外,MindSpore 還提 供可視化和防御工具,使訓練過程對各種對抗性攻擊都可見,並且能夠抵抗這些攻擊。2020 年 3 月 28 日華為發布了 MindSpore 的第一個版本,現在,MindSpore 已經成功與昇騰系列芯片適配,並應 用於華為的各種產品,從智能手機到雲。今后,我們計划從幾個方面改進現有的 MindSpore 系統。 對於 ME 部分,我們希望考慮拓撲感知的調度,以滿足多節點集群中不同的通信需求;對於 GE,我 們將嘗試進一步利用昇騰系列芯片來優化計算圖;對於 MD,我們將為人工智能工程師提供更靈活 的工具來處理和增強不同類型的數據;對於 MA,我們將嘗試在 CV/NLP 領域防御各種對抗性攻擊。
參考文獻
[1] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems, pages 1097–1105, 2012.
[2] Geoffrey Hinton, Li Deng, Dong Yu, George Dahl, Abdel-rahman Mohamed, Navdeep Jaitly, Andrew Se- nior, Vincent Vanhoucke, Patrick Nguyen, Brian Kings- bury, et al. Deep neural networks for acoustic modeling in speech recognition. IEEE Signal processing maga- zine, 29, 2012.
[3] Mnih Volodymyr, Kavukcuoglu Koray, Silver David, A Rusu Andrei, and Veness Joel. Human-level control through deep reinforcement learning. Nature, 518(7540):529–533, 2015.
[4] Yoshua Bengio, Réjean Ducharme, Pascal Vincent, and Christian Jauvin. A neural probabilistic language model. Journal of machine learning research, 3(Feb):1137– 1155, 2003.
[5] Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, et al. Ten- sorflow: Large-scale machine learning on heterogeneous distributed systems. arXiv preprint arXiv:1603.04467, 2016.
[6] Adam Paszke, Sam Gross, Soumith Chintala, Gregory Chanan, Edward Yang, Zachary DeVito, Zeming Lin, Alban Desmaison, Luca Antiga, and Adam Lerer. Auto- matic differentiation in pytorch. 2017.
[7] Tianqi Chen, Mu Li, Yutian Li, Min Lin, Naiyan Wang, Minjie Wang, Tianjun Xiao, Bing Xu, Chiyuan Zhang, and Zheng Zhang. Mxnet: A flexible and efficient ma- chine learning library for heterogeneous distributed sys- tems. arXiv preprint arXiv:1512.01274, 2015.
[8] Graham Neubig, Chris Dyer, Yoav Goldberg, Austin Matthews, Waleed Ammar, Antonios Anastasopoulos, Miguel Ballesteros, David Chiang, Daniel Clothiaux, Trevor Cohn, et al. Dynet: The dynamic neural network toolkit. arXiv preprint arXiv:1701.03980, 2017.
[9] Seiya Tokui, Kenta Oono, Shohei Hido, and Justin Clay- ton. Chainer: a next-generation open source frame- work for deep learning. In Proceedings of workshop on machine learning systems (LearningSys) in the twenty- ninth annual conference on neural information process- ing systems (NIPS), volume 5, pages 1–6, 2015.
[10] Yangqing Jia, Evan Shelhamer, Jeff Donahue, Sergey Karayev, Jonathan Long, Ross Girshick, Sergio Guadar- rama, and Trevor Darrell. Caffe: Convolutional archi- tecture for fast feature embedding. In Proceedings of the 22nd ACM international conference on Multimedia, pages 675–678. ACM, 2014.
[11] Cynthia Dwork and Jing Lei. Differential privacy and robust statistics. In Proceedings of the forty-first annual ACM symposium on Theory of computing, pages 371– 380, 2009.
[12] Ran Gilad-Bachrach, Nathan Dowlin, Kim Laine, Kristin Lauter, Michael Naehrig, and John Wernsing. Cryptonets: Applying neural networks to encrypted data with high throughput and accuracy. In International Conference on Machine Learning, pages 201–210, 2016.
[13] Luca Melis, Congzheng Song, Emiliano De Cristofaro, and Vitaly Shmatikov. Exploiting unintended feature leakage in collaborative learning. In 2019 IEEE Sym- posium on Security and Privacy (SP), pages 691–706. IEEE, 2019.
[14] Lingchen Zhao, Qian Wang, Qin Zou, Yan Zhang, and Yanjiao Chen. Privacy-preserving collaborative deep learning with unreliable participants. IEEE Transactions on Information Forensics and Security, 15:1486–1500, 2019.
[15] Cormac Flanagan, Amr Sabry, Bruce F Duba, and Matthias Felleisen. The essence of compiling with con- tinuations. In Proceedings of the ACM SIGPLAN 1993 conference on Programming language design and im- plementation, pages 237–247, 1993.
[16] Bart van Merrienboer, Olivier Breuleux, Arnaud Berg- eron, and Pascal Lamblin. Automatic differentiation in ml: Where we are and where we should be going. In Advances in neural information processing systems, pages 8757–8767, 2018.
[17] Yann LeCun et al. Lenet-5, convolutional neural net- works. URL: http://yann. lecun. com/exdb/lenet, 20:5, 2015.
[18] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. Bert: Pre-training of deep bidirec- tional transformers for language understanding. arXiv preprint arXiv:1810.04805, 2018. [19] Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, and Ilya Sutskever. Language models are unsupervised multitask learners. OpenAI Blog, 1(8), 2019.
[20] Mohammad Shoeybi, Mostofa Patwary, Raul Puri, Patrick LeGresley, Jared Casper, and Bryan Catanzaro. Megatron-lm: Training multi-billion parameter language models using gpu model parallelism. arXiv preprint arXiv:1909.08053, 2019.
[21] Noam Shazeer, Youlong Cheng, Niki Parmar, Dustin Tran, Ashish Vaswani, Penporn Koanantakool, Peter Hawkins, HyoukJoong Lee, Mingsheng Hong, Cliff Young, Ryan Sepassi, and Blake Hechtman. Mesh- tensorflow: Deep learning for supercomputers. In Advances in Neural Information Processing Systems (NeurIPS), pages 10414–10423. Curran Associates, Inc., 2018.
[22] Zhihao Jia, Sina Lin, Charles R. Qi, and Alex Aiken. Ex- ploring hidden dimensions in accelerating convolutional neural networks. In Proceedings of the 35th Interna- tional Conference on Machine Learning (ICML), pages 2274–2283. PMLR, 2018.
[23] Zhihao Jia, Matei Zaharia, and Alex Aiken. Beyond data and model parallelism for deep neural networks. In Pro- ceedings of the 2nd Conference on Machine Learning and Systems (MLSys). ACM, 2019.
[24] Minjie Wang, Chien-chin Huang, and Jinyang Li. Sup- porting very large models using automatic dataflow graph partitioning. In Proceedings of the Fourteenth EuroSys Conference (EuroSys). ACM, 2019.
[25] Linghao Song, Jiachen Mao, Youwei Zhuo, Xuehai Qian, Hai Li, and Yiran Chen. Hypar: Towards hybrid par- allelism for deep learning accelerator array. In 2019 IEEE International Symposium on High Performance Computer Architecture (HPCA), pages 56–68. IEEE, 2019.
[26] Ian J Goodfellow, Jonathon Shlens, and Christian Szegedy. Explaining and harnessing adversarial exam- ples. arXiv preprint arXiv:1412.6572, 2014.
[27] Naveed Akhtar and Ajmal Mian. Threat of adversarial attacks on deep learning in computer vision: A survey. IEEE Access, 6:14410–14430, 2018.
[28] Alexey Kurakin, Ian Goodfellow, and Samy Bengio. Ad- versarial examples in the physical world. arXiv preprint arXiv:1607.02533, 2016.
[29] Nicholas Carlini and David Wagner. Towards evaluating the robustness of neural networks. In 2017 ieee sympo- sium on security and privacy (sp), pages 39–57. IEEE, 2017.
[30] Matt Fredrikson, Somesh Jha, and Thomas Ristenpart. Model inversion attacks that exploit confidence infor- mation and basic countermeasures. In Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security, pages 1322–1333, 2015.
[31] Reza Shokri, Marco Stronati, Congzheng Song, and Vi- taly Shmatikov. Membership inference attacks against machine learning models. In 2017 IEEE Symposium on Security and Privacy (SP), pages 3–18. IEEE, 2017. [32] Thomas Elsken, Jan Hendrik Metzen, and Frank Hutter. Neural architecture search: A survey. arXiv preprint arXiv:1808.05377, 2018.