用户工具

站点工具


atk:解决quantumatk运行性能和内存消耗问题

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
atk:解决quantumatk运行性能和内存消耗问题 [2020/02/29 17:23] – [特定于分子和块体构型] xie.congweiatk:解决quantumatk运行性能和内存消耗问题 [2023/07/29 09:45] (当前版本) – [问题概述] fermi
行 1: 行 1:
 ====== 解决QuantumATK运行性能和内存消耗问题 ====== ====== 解决QuantumATK运行性能和内存消耗问题 ======
  
-在本教程中,您将学习用于提高各种系统 **ATK** 性能而需要调整的主要参数。为了获得尽可能高的计算性能,**ATK** 提供了一系列不同的算法,并利用 MPI 和共享内存线程进行并行。正如技术说明 [[https://docs.quantumatk.com/technicalnotes/parallelization/parallelization.html#parallelization|Parallelization of QuantumATK calculations]] 中已经提到的,MPI 并行通常会提供最佳的计算加速,而进程的线程化通常可以减少内存占用。+===== 问题概述 =====
  
-要获得任何高性能软件的绝对最佳性能,需要对所涉及的计算和使用硬件有一定的深入了解。因此,对使用的硬件和并行方法,优化您的 QuantumATK 模拟非常重要然而下面章节给出了一些关于 QuantumATK 法和选项提示也可能有助于解决内存速度问题。 +衡量 QuantumATK 计算运行性能的指标是正确运行计算得到结果时间长短计算性能的限制素主要来自: 
-===== 内存不足? =====+  * CPU主频、并行、缓存。这是直接决定计算速度因素; 
 +  * 内存大小计算中特别是DFT计中有许多大型中间数据这些数据在内存中保存可以大大提高计算速度,但是会造成内存过度占用甚至溢出; 
 +  * 操作系统与作业队列系统对计算资源的调度。 
 +  * 程序本身的代码和编译质量。由于 QuantumATK 提供给用户的预编译好的二进制代码,因此程序本身的问题只能等待开发组在未来版本中解决
  
 +一般情况下,我们总是优先选择将中间结果保存在内存中,这也是计算设置的默认选项。在发生问题时,存在两种情况,一种是 QuantumATK 给出内存溢出错误:
  
-==== 一般情况 ==== 
  
-尝试禁用 **AlgorithmParameters** 中的 **store_grids**这将稍稍降低内存,轻微减少计算时间+对于明确内存溢出错误信息,可以考虑: 
 +  增加硬件内存; 
 +  更改控制参数不保存中间数据,以节约内存,使计算得以完成
  
-在 **AlgorithmParameters** 中禁用 **store_basis_on_grid** 将显著减少内存,如果系统的矩阵很小,则会对性能产生负面影响。默认情况下此参数处于关闭状态,如果构型很大,它可能已被禁用。如果是 **并行** 运行,由于内存是分布式的,每个核的内存减少量将更低。 
  
-如果在 **并行** 有两个以上进程运行,请尝试将 **IterationControlParameters** 中的 **algorithm** 设置为 **ParallelPulayMixer.d**。 
-==== 特定于分子和块体构型 ==== 
  
-如果矩阵非常大,可以考虑将 **AlgorithmParameters** 中的 **density_matrix_method** 设置为 **DiagonalizationSolver(processes_per_kpoint=2)**。这将使每个 mpi 进程的内存使减少 2 倍。如果问题持续存在,请尝试增大 **processes_per_kpoint**。+===== 户层面影响计算性能的主要因素 =====
  
-如果计算量非常大,且计算是在 **并行** 中的许多节点上运行,那么将 **AlgorithmParameters** 的 **density_matrix_method** 设置为 **ChebyshevExpansionSolver** 是很值得尝试的做法。当大规模并行运行时,内存使用将显著减少,但与普通情况相比还是很慢。 +==== 算法与模型 ====
-==== 特定于器件构型 ====+
  
-尝试将 **SelfEnergyCalculator** 中的 **storage_strategy** 设置为 **StoreOnDisk** 或 **NoStorage**。这将显着减少内存但也会降低之后的性能果是 **并行** 运行由于内存分布式的,每个核内存减少量将更低+不同的算法、不同的模型、不同的分析等计算性能相差很大: 
 +  普通列表项目有些计算是单纯的 DFT 自洽可以通过简单的Calculator参数控制计算的性能; 
 +  * 有些计算包含多个 DFT 自洽过程,例声子动力学矩阵、IVCharacteristics曲线等,此时要综合考虑并行的效果; 
 +  有些计算还会改变DFT自洽计算的实际模型例如声子动力学矩阵在实际计算时,采用的对超胞进行自洽方法
  
-器件的横截面较宽,可以尝试将 **equilibrium_method** 和/或 **non_equilibrium_method** 设置为 **SparseGreensFunction**。+==== 并行计算 ====
  
-如果是 **并行** 运行将 **equilibrium_method** /或**non_equilibrium_method** 设置为 **SparseGreensFunction(processes_per_contour_point=2)** 会所帮。如果问题仍然存在,试着设置 **processes_per_contour_point=4**+要获得任何高性能软件的最佳性能,需要对所涉及的计算和使用的硬件有一定的深入了解。因此,对于使用的硬件和并行方法优化您的 QuantumATK 模拟非常重要。然而,下面章节给出了一些关于 QuantumATK 算法选项的提示,也可能有助于解决内存或速度问题。
  
  
-===== 想要运行更快? =====+===== 减少内存消耗 ===== 
 + 
 + 
 +==== 一般情况 ==== 
 + 
 +  * 尝试禁用 **AlgorithmParameters** 中的 **store_grids**,这将稍稍降低内存,轻微减少计算时间。 
 + 
 +  * 在 **AlgorithmParameters** 中禁用 **store_basis_on_grid** 将显著减少内存,如果系统的矩阵很小,则会对性能产生负面影响。默认情况下此参数处于关闭状态,如果构型很大,它可能已被禁用。如果是 **并行** 运行,由于内存是分布式的,每个核的内存减少量将低。 
 +     * 如果在 **并行** 有两个以上进程运行,请尝试将 **IterationControlParameters** 中的 **algorithm** 设置为 **ParallelPulayMixer.d**。 
 +==== 对于分子和块体构型 ==== 
 + 
 +  * 如果矩阵非常大,可以考虑将 **AlgorithmParameters** 中的 **density_matrix_method** 设置为 **DiagonalizationSolver(processes_per_kpoint=2)**。这将使每个 mpi 进程的内存使用减少 2 倍。如果问题持续存在,请尝试增大 **processes_per_kpoint**。 
 + 
 +  * 如果计算量非常大,且计算是在 **并行** 中的许多节点上运行,那么将 **AlgorithmParameters** 的 **density_matrix_method** 设置为 **ChebyshevExpansionSolver** 是很值得尝试的做法。当大规模并行运行时,内存使用将显著减少,但与普通情况相比还是很慢。 
 +==== 对于器件构型 ==== 
 + 
 +  * 尝试将 **SelfEnergyCalculator** 中的 **storage_strategy** 设置为 **StoreOnDisk** 或 **NoStorage**。这将显着减少内存,但也会降低之后的性能。如果是 **并行** 运行,由于内存是分布式的,每个核的内存减少量将更低。 
 + 
 +  * 器件的横截面较宽,可以尝试将 **equilibrium_method** 和/或 **non_equilibrium_method** 设置为 **SparseGreensFunction**。 
 + 
 +  * 如果是 **并行** 运行,将 **equilibrium_method** 和/或**non_equilibrium_method** 设置为 **SparseGreensFunction(processes_per_contour_point=2)** 会有所帮助。如果问题仍然存在,试着设置 **processes_per_contour_point=4**。 
 + 
 + 
 +===== 提升运行速度 =====
  
  
 ==== 一般情况 ==== ==== 一般情况 ====
    
-如果计算需要使用多重网格方法,如存在栅的情况,可能对于 **possion_solver** 要考虑 **DirectSolver**。这样将需要更多的内存,但是开销是内存分配的,因此如果是 **并行** 运行,则值得尝试。+  * 如果计算需要使用多重网格方法,如存在栅的情况,可能对于 **possion_solver** 要考虑 **DirectSolver**。这样将需要更多的内存,但是开销是内存分配的,因此如果是 **并行** 运行,则值得尝试。
  
-设置 **AlgorithmParameters** 中的 **store_basis_on_grid** 为 **True**。这将使计算运行更快,并具有适度但分布式的内存开销。 +  * 设置 **AlgorithmParameters** 中的 **store_basis_on_grid** 为 **True**。这将使计算运行更快,并具有适度但分布式的内存开销。 
-==== 特定于分子和块体构型 ====+==== 于分子和块体构型 ====
  
 在 **ATK 2015** 中为 **AlgorithmParameters** 中的 **density_matrix_method** 引入了两个新增参数:**processes_per_kpoint** 和 **bands_above_fermi_level**。 在 **ATK 2015** 中为 **AlgorithmParameters** 中的 **density_matrix_method** 引入了两个新增参数:**processes_per_kpoint** 和 **bands_above_fermi_level**。
行 77: 行 104:
 </WRAP> </WRAP>
  
-==== 特定于器件构型 ==== +==== 于器件构型 ====
  
 +实际上,您可以调整许多参数获得器件构型的最佳性能,有些取决于您正在研究的体系和所使用的方法。
  
 +===== 参考 =====
  
 +  * 英文原文:https://docs.quantumatk.com/technicalnotes/advanced_performance/advanced_performance.html
atk/解决quantumatk运行性能和内存消耗问题.1582968191.txt.gz · 最后更改: 2020/02/29 17:23 由 xie.congwei

© 2014-2022 费米科技(京ICP备14023855号