• [互动交流] 无法使用conda创建环境
    conda创建环境出现如下问题:RequestsDependencyWarning: urllib3 (1.26.12) or chardet (3.0.4) doesn't match a supported version!RequestsDependencyWarning)Collecting package metadata (current_repodata.json): failedProxyError: Conda cannot proceed due to an error in your proxy configuration.Check for typos and other configuration errors in any '.netrc' file in your home directory,any environment variables ending in '_PROXY', and any other system-wide proxyconfiguration settings.请问怎么解决呢,谢谢
  • [互动交流] 广西AI pytorch-lightning-unet报错
    按照文档配置,在modelarts运行train.py文件报错,报错信息如下:TypeError Traceback (most recent call last) ~/work/agrivis/code/pytorch-lightning-unet/train.py in 139 140 if __name__ == "__main__": --> 141 main() ~/work/agrivis/code/pytorch-lightning-unet/train.py in main() 136 --> 137 trainer.fit(model, train_loader, val_loader) 138 139 ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py in fit(self, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path) 695 self.strategy.model = model 696 self._call_and_handle_interrupt( --> 697 self._fit_impl, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path 698 ) 699 ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py in _call_and_handle_interrupt(self, trainer_fn, *args, **kwargs) 648 return self.strategy.launcher.launch(trainer_fn, *args, trainer=self, **kwargs) 649 else: --> 650 return trainer_fn(*args, **kwargs) 651 # TODO(awaelchli): Unify both exceptions below, where `KeyboardError` doesn't re-raise 652 except KeyboardInterrupt as exception: ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py in _fit_impl(self, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path) 735 ckpt_path, model_provided=True, model_connected=self.lightning_module is not None 736 ) --> 737 results = self._run(model, ckpt_path=self.ckpt_path) 738 739 assert self.state.stopped ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py in _run(self, model, ckpt_path) 1166 self._checkpoint_connector.resume_end() 1167 -> 1168 results = self._run_stage() 1169 1170 log.detail(f"{self.__class__.__name__}: trainer tearing down") ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py in _run_stage(self) 1252 if self.predicting: 1253 return self._run_predict() -> 1254 return self._run_train() 1255 1256 def _pre_training_routine(self): ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py in _run_train(self) 1283 1284 with torch.autograd.set_detect_anomaly(self._detect_anomaly): -> 1285 self.fit_loop.run() 1286 1287 def _run_evaluate(self) -> _EVALUATE_OUTPUT: ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/loops/loop.py in run(self, *args, **kwargs) 198 try: 199 self.on_advance_start(*args, **kwargs) --> 200 self.advance(*args, **kwargs) 201 self.on_advance_end() 202 self._restarting = False ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/loops/fit_loop.py in advance(self) 268 ) 269 with self.trainer.profiler.profile("run_training_epoch"): --> 270 self._outputs = self.epoch_loop.run(self._data_fetcher) 271 272 def on_advance_end(self) -> None: ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/loops/loop.py in run(self, *args, **kwargs) 198 try: 199 self.on_advance_start(*args, **kwargs) --> 200 self.advance(*args, **kwargs) 201 self.on_advance_end() 202 self._restarting = False ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/loops/epoch/training_epoch_loop.py in advance(self, data_fetcher) 191 192 # hook --> 193 self.trainer._call_callback_hooks("on_train_batch_start", batch, batch_idx) 194 response = self.trainer._call_lightning_module_hook("on_train_batch_start", batch, batch_idx) 195 self.trainer._call_strategy_hook("on_train_batch_start", batch, batch_idx) ~/anaconda3/envs/PyTorch-1.8/lib/python3.7/site-packages/pytorch_lightning/trainer/trainer.py in _call_callback_hooks(self, hook_name, *args, **kwargs) 1597 if callable(fn): 1598 with self.profiler.profile(f"[Callback]{callback.state_key}.{hook_name}"): -> 1599 fn(self, self.lightning_module, *args, **kwargs) 1600 1601 if pl_module: TypeError: on_train_batch_start() missing 1 required positional argument: 'dataloader_idx'
  • [交流分享] 安培架构的MIG及其应用案例分享
    转载自:https://blog.csdn.net/weixin_39626181/article/details/111123999介绍 — 什么是 MIG引言:今年5月14日,NVIDIA 发布了最新的 GPU 架构: 安培,以及基于安培架构的最新的 GPU : A100。安培提供了许多新的特性,MIG 是其中一项非常重要的新特性。MIG的全名是 Multi-Instance GPU,它最多可以把 A100 GPU 切成七个 GPU 实例。每一个 GPU 实例都有各自的流处理器 (SMs) 和内存系统。因此,使用MIG后,每一个 GPU 实例都能够保证各个使用者的工作的时延和吞吐量是可预期的、提供服务品质,并且提高 GPU 的使用率。如图表 1 所示,我们最多可以将 A100 切分成 7 个实例,每一个实例可以提供给不同的使用者运行不同的程序。在使用者的程序对 GPU 的计算量要求比较少的情况下,MIG 最多能够提供高达 7 倍的吞吐量。此外,由于每一个实例都有各自的计算资源和内存资源,因此不必担心因为其中一位使用者的计算量过大或是程式运行错误而干扰到其他的使用者。图片1:MIG 的一个重要的应用,是让提供云服务的公司能够将 GPU 切分成数个实例,并将这些实例提供给不同的承租者使用。由于不同实例之间的计算资源与内存资源都是透过硬件分离,因此能够确保资料的安全性、错误的隔离,以及提供稳定可靠的服务。MIG v.s. MPS v.s. multi-stream在 MIG 推出之前,我们也能够透过 CUDA MPS (Multi-Process Service) 来提高 GPU 使用率。但 MPS 的缺点在于,多个使用者会使用共同的内存,因此使用者的程序会互相影响,除了无法保证推理的速度和吞吐量之外,也有可能因为其中一位使用者的程序出错而导致其他使用者受到干扰。而 MIG 克服了 MPS 面临的问题。MIG 藉由硬件上的分离,保证了使用者的程序不会互相干扰,进而能够让程序的时延和吞吐量能符合预期。在表格 1当中,我们比较了多流 (multi-stream)、MPS 以及 MIG 的优缺点。其中,多流的使用限制较少,同时也很灵活,但对代码更动的需求大,并且无法避免使用者之间的互相干扰,使用者必须小心的使用以避免产生错误。MPS 则不需要更动代码即可使用,可以同时执行的程序也较 MIG 多 (48 与 7),内存的使用与分配也是自动处理的,不需要人工的介入。缺点在于,无法避免多个用户对于 GPU 资源的竞争;最后,MIG 虽然可以同时执行的程序数量最少,但和 MPS 一样不需要使用者另外更动代码,同时在安全性与可靠性上面也是三者中最佳的。这三样技术并不互相冲突,使用者可以根据使用的情境与场景选择与搭配使用。表格1:多流、MPG、MIG 的比较GPU 实例与计算实例要深入地了解 MIG 之前,需要先介绍两个 MIG 引入的重要名词与观念,GPU 实例 (GPU Instance) 和计算实例 (Compute Instance)。在这之前,我们提到的都是 GPU 实例。而在实际的使用上,GPU 实例还可以再切分成多个计算实例。同一个 GPU 实例当中的计算实例是共享内存但拥有独立的流处理器。因此若使用者有多项互相关联的工作,并且使用共享内存较为便利的话,可以选择在一个 GPU 实例当中使用多个计算实例来处理。图表2 GPU 实例与计算实例图表 2 展示了 GPU 实例和计算实例的区别。不同的 GPU 实例之前,他们的内存系统是分开的,以此能够保证内存的服务品质 (QoS, Quality of Service),并且避免受到其他使用者的错误干扰。而在一个 GPU 实例当中,可以有多个计算实例,例如图表 2 中最左侧的 GPU 实例包含了四个计算实例,这四个计算实例各自负责了不同的工作,但他们的内存是共用的。透过这样子的设计,MIG 提供使用者灵活的调度 GPU 的资源。表格2:GPU 实例的设定图表3 GPU 实例的组合表格 2 展示了不同大小的 GPU 实例他们具备的流处理器比例、内存比例、以及可以分配的数量。从图表 3,我们可以更清楚地看到MIG是如何对整个 GPU 去进行切割。在 A100 中,我们共有 8 份内存以及 7 份流处理器可以使用。其中,最小的实例 MIG 1g.5gb,具备一份内存和一份流处理器。而 MIG 2g.10gb 具备两份内存以及两份流处理器。需要特别注意的是,MIG 3g.20gb 和 MIG 4g.20gb虽然具备的流处理器数量不同,但同样拥有四份的内存。最大的实例 MIG 7g.40gb 则具备所有的流处理器以及内存。在使用时,我们可以灵活的分配实例的大小。举例来说,我们可以使用一个 4g.20gb 实例、一个 2g.10gb 实例,以及一个 1g.5gb 实例。图表 4 展示了我们使用的 GPU 实例。这里需要注意的是,虽然我们使用了所有的流处理器,但只有用到 7 份的内存,有一份内存会浪费掉。图表4 MIG GPU 实例分配的例子 当然,目前 MIG 的使用上还是有限制的。首先,MIG 只支援 Linux 系统,并且要求CUDA 11 以及450.36.06 以后的 NVIDIA 驱动软体。另外,在开启 MIG 时,不支援图像的接口(像是 OpenGL)、不支援 GPU to GPU P2P 的传输 (包括 PCIe 和 NVLINK)、GPU instance 之间的 CUDA IPC 也不支援,但支援计算实例之间的 CUDA IPC。如何管理 MIG 实例至此,我们已经展示了 MIG 带来的好处。但管理者要如何去管理这些 MIG 实例呢?要如何避免使用者之间只能使用被分配到的 MIG 实例,而不会去影响到其他的 MIG 实例呢?在 CUDA 11 里头,管理者可以透过赋予使用者访问特定檔案的权限来限制使用者对 MIG 实例的使用权限。 这些管理的檔案放在 “/proc/driver/nvidia/capabilities” 这个资料夹下,如图表 5 所示。对于 MIG 的管理,可以透过 “mig/config” 和 “mig/monitor” 来控制权限。其中,”mig/config” 一般只有 root 权限有访问的权限。拥有访问这个檔案权限的使用者能够管理 MIG 的实例,例如实例的创建和删除。而 “mig/monitor” 的权限则能让使用者看到整个 GPU 的资讯,例如目前 GPU 内存的使用量、是否开启 MIG 模式等等。 除了上述两个管理和监控 MIG 支援的权限之外,MIG 也提供针对特定 GPU 实例或是计算实例的使用权限。例如若要让使用者能够只能使用图表 5 当中的 gpu0 中 gi0 GPU实例下的ci0计算实例,则赋予该使用者访问 gpu0/gi0/access” 和 “gpu0/gi0/ci0/access” 这两个檔案的访问权限,并且移除该使用者访问其他实例的权限。如此一来,此位使用者便只能使用该实例而无法接触到其他实例 。图表5 MIG 管理树状图如何使用 MIG在这个章节当中,我们会一步一步的展示如何使用 MIG。开启 MIGMIG 的相关指令都整合进了 NVIDIA System Management Interface(nvidia-smi)当中。要开启 MIG,首先需要关闭所有和 GPU 相关的程序,因为启动 MIG 的时候会对 GPU 进行重启。其次,开启 MIG 一般需要 root 权限。确认符合上述的条件之后,就可以透过 sudo nvidia-smi mig 1 来开启 MIG。需要特别注意的是,开启 MIG 之后,在还没有建立 GPU 实例和计算实例之前,是不能使用 GPU 的。如果使用者在这个情况下直接去执行程序,会返回找不到相关装置的错误。如图表 6 所示。图表6 未建立 GPU 实例与计算实例时,执行 cuda 程序的错误在开启 MIG 之后,nvidia-smi 展示的界面会有所改变,增加了一栏针对 MIG 的说明,如图表 7 所示。图表7 开启 MIG 之后的 nvidia-smi创建 GPU 实例与计算实例接下来,我们可以透过 sudo nvidia-smi mig -lgip 来确认我们能够创建的 GPU 实例。图表 8 是我们将看到的样子。第一列是 GPU 的号码、第二列是各个实例设定的名称、第三列是创建该实例时使用的 ID、第四列是该实例剩余可创建数目,以及该实例最多可创建数目、第五列是该实例的内存大小、第七列是流处理器的数目。图表8 GPU 实例的资料-1 创建 GPU 实例的指令为 “sudo nvidia-smi mig -cgi ”。我们先透过下列的指令创建一个 1g.5gb 的实例,并且再次确认实例的资料 sudo nvidia-smi mig -cgi 19 sudo nvidia-smi mig -lgip图表9 GPU 实例的资料-2 从图表 9 我们可以发现,1g.5gb、3g.20gb、7g.39gb这三个实例剩余可创建数目减少了1。这是因为我们在创建一个 1g.5gb 实例之后,我们剩下 6 份流处理器和 7 份内存,因此无法再创建 7g.39gb 的实例,3g.20gb 的实例由于需要四份的内存,因此也只能再创建一个。 下一步,我们一次再创建两个 1g.5gb 实例以及一个 4g.20gb 实例。 sudo nvidia-smi mig -cgi 19,19,5 sudo nvidia-smi mig -lgip图表10 GPU 实例的资料-3 从图表 10 我们可以看到,所有 GPU 实例的剩余可创建数目都为 0。接下来,我们可以透过 “sudo nvidia-smi mig -lcip”看到我们现在拥有的 GPU 实例,以及可创建的计算实例。图表 11 展示了我们可以创建的计算实例有哪些。第一列代表的是所属的 GPU、第二列是所属的 GPU 实例的 ID、第三列是该计算实例的名称、第四列是创建该计算实例的 ID、第五列是该计算实例剩余可创建数目及最大可创建数目、第六列是该计算实例拥有的流处理器数目。另外,我们可以发现,表格中没有关于内存的资讯,这是因为一个 GPU 实例里头的所有内存是共用的,因此在创建计算实例时不需要再进行分配。 例如 GPU 实例 ID 7、8、9 他们都是 1g.5gb 的 GPU 实例,因此都只能创建一份 1g.5gb 的计算实例。而 GPU 实例 ID 2 是一个 4g.20gb 的 GPU 实例,可以创建 4 个拥有 14 个流处理器的 1c.4g.20gb 的计算实例、或者 2 个拥有 28 个流处理器的 2c.4g.20gb 的计算实例、或者 1 个拥有 56 个流处理器的 4g.20gb 的计算实例。图表11 计算实例资料-1 下一步,我们透过 ”sudo nvidia-smi mig -gi -cci ”在 GPU 实例 ID 7、8、9 上面各创建一个 1g.5gb 的计算实例,并在 GPU 实例 ID 2 上面创建两个 1c.4g.20gb 的计算实例与一个 2c.4g.20gb 的计算实例。 sudo nvidia-smi mig -gi 7,8,9 -cci 0 sudo nvidia-smi mig -gi 2 -cci 0,0,1 sudo nvidia-smi mig -lcip在创建完之后,我们可以会发现计算实例的资料会有所改变,如图表 12所示,可以发现所有 GPU 实例的可创建计算实例数目都为 0。接下来,我们再回头来看一下 “nvidia-smi” 目前的情况。从图表 13我们可以看见”MIG devices” 这一栏增加了新的资讯,里头包括了各个 GPU 实例的内存大小以及 ID,还有在 GPU 实例当中的计算实例的 ID 以及流处理器的数量。图表12 计算实例资料-1图表13 创建完计算实例后的 nvidia-smi在指定的计算实例上运行程序创建完计算实例之后,我们要如何在特定的实例上面执行我们的程序呢?目前,我们要在指定的 GPU 上面执行程序时,是透过 “CUDA_VISIBLE_DEVICES” 这一环境变数。而 CUDA 11 在这个环境变数上进行了扩充,除了能够指定第几个 GPU 之外,也能透过计算实例的 UUID 来直接指定使用哪个计算实例。首先,我们透过 “nvidia-smi -L” 来得到所有计算实例的 UUID。从图表 14,我们可以看到各个计算实例对应的UUID。这边 UUID 的命名格式为MIG-//。以图表 14 为例,所有实例的GPU-UUID都是“38b3962a-109c-d69d-c3d3-3c2e8cff25cb”,而 MIG 1c.4g.20gb Device 0 的 GPU 实例 ID 为 2,计算实例 ID 为 0。图表14 nvidia-smi -L 的结果 在得到计算实例的 UUID 之后,我们便可以透过 “CUDA_VISIBLE_DEVICES” 这个环境变量来指定。例如下面的指令可以在 2c.4g.20gbDevice2 上面执行程序: CUDA_VISIBLE_DEVICES=MIG-GPU-38b3962a-109c-d69d-c3d3-3c2e8cff25cb/2/2./bin/encoder_sample 32 12 32 12 64 1 0 图表15为运行时 “nvidia-smi” 的结果。图表15 在 2c.4g.20gb Device2 上运行程序删除计算实例与 GPU 实例最后,在计算完之后,我们要删除目前现有的计算实例和 GPU 实例。首先,我们需要先删除 GPU 实例当中的计算实例,才能删除 GPU 实例。而删除计算实例的方式为 ”sudo nvidia-smimig -gi -ci -dci”。例如下面的指令能够删除 GPU 实例 ID 7 上的计算实例 ID 0: sudo nvidia-smi mig -gi 7 -ci 0 -dci 下一步,我们可以透过 “sudo nvidia-smi mig-gi -dgi” 来删除 GPU 实例。例如下面的指令能够删除 GPU 实例 ID 7: sudo nvidia-smi mig -gi 7 -dgi图表16 删除 GPU 实例 ID 7之后的 nvidia-smi 透过 "nvidia-smi",我们能看到 GPU 实例 ID 7已经被删除,如图表 16 所示。 最后,我们透过以下的指令删除剩余的计算实例和 GPU 实例: sudo nvidia-smi mig -gi 2 -ci 0,1,2 -dci sudo nvidia-smi mig -gi 8,9 -ci 0 -dci sudo nvidia-smi mig -gi 2,8,9 -dgi 透过 "nvidia-smi",我们能看到所有的 GPU 实例和计算实例都已经被删除,如图表 17所示。图表17 删除剩余计算实例与 GPU 实例后的 nvidia-smi 最后,我们透过以下的指令关闭 MIG 模式: sudo nvidia-smi -mig 0 透过 nvidia-smi 我们可以看到已经将 MIG 模式关闭,如图表 18 所示。图表18 关闭 MIG 之后的 nvidia-smi应用案例分享 — 以 Faster Transformer 为例在这个章节,我们透过一个实际的例子来展示如何使用 MIG,以及 MIG 带来的效果。这里,我们使用的例子是 FasterTransformer (FT),这是 NVIDIA 发布的开源代码,针对 transformer 相关的推理进行了优化。FT 最新的代码在 https://github.com/NVIDIA/DeepLearningExamples/tree/master/FasterTransformer/v2.1 ,使用者可以透过 git clone 下载,并按照说明檔来将 FT 建立起来。建立的流程在此不再赘述。需要特别注意的是,由于 A100 是 compute capability 是 80,在建立 FT时需要将-DSM 设为 80。在建立完 FT 之后,我们接下来创建 7 个 1g.5gb 的 GPU 实例,并且在各个 GPU 实例上面创建一个计算实例。nvidia-smi mig -cgi 19,19,19,19,19,19,19nvidia-smi mig -gi 7,8,9,11,12,13,14 -cci 0接下来透过nvidia-smi -L得到所有计算实例的名字之后,透过 CUDA_VISIBLE_DEVICES 这个环境变量来指定。透过 nvidia-smi,我们可以看到7个实例同时在运行,如图表 19 所示。图表19 7个计算实例同时运行MIG 的性能接下来,我们展示 A100 在使用 MIG 前后的计算速度以及吞吐量的比较,并且和前一代的 GPU,NVIDIA T4 和 NVIDIA V100 进行比较。其中,NVIDIA T4 和 NVIDIA V100 的 CUDA 版本是 CUDA 10.2,NVIDIA A100 的 CUDA 版本是 CUDA 11。另外,这边只比较使用 FP16 的速度。当 A100 使用 MIG 时,若没有特别说明,我们的 GPU 实例和计算实例大小相同,并且每个 GPU 实例只使用一个计算实例。表格3:T4、V100、A100 的比较* 模型: BERT Base on FasterTransformer 2.1, sequencelength 128 表格 3 比较了 V100、T4、A100 不使用 MIG,A100 使用 7 个 MIG 计算实例、以及 A100 不使用 MIG 但使用 MPS 同时跑七个程式的时延以及吞吐量。这里需要特别注意的是,A100在batchsize 1时,会比 V100 还慢,这是由于 CUDA11 的新特性,FT 在使用 cuBLAS 时无法手动选择算法导致。从表格当中我们可以看到,在 batch size = 1 这种计算量比较小的情境下,MIG 可以带来 4 倍以上的吞吐量,而代价是时延会提升百分之五十。MPS 的效果则稍微比 MIG 要好一些。和上一代的 V100 与 T4 对比,A100 在开启 MIG 之后,吞吐量也提升成 3~4 倍。而在 batch size=128 这种计算量较大的情境下,开启 MIG 并不会带来什么效益,由于使用的流处理器较少(在使用 MIG 时,最多只能使用 98 个流处理器,而 A100 有 108 个流处理器),因此吞吐量反而会些微的下降。在这种情境下,A100 的吞吐量为 T4 的 6 倍以上,V100 的两倍左右。表格4:V100 与 A100 7个计算实例在不同 batch size 下的对比* 模型: BERT Base on FasterTransformer 2.1, sequencelength 128 表格 4 比较了 V100 与 A100 使用 7 个 MIG GPU 实例在不同 batch size 下的吞吐量与时延。我们可以看到在 batch size 为 8 的时候,A100 的吞吐量已经很接近峰值,距离峰值不到百分之十;另一方面,V100 在 batch size 8 的食后,吞吐量距离峰值还有百分之三十左右,在 batch size 32 时,吞吐量距离峰值也还有百分之十左右。这代表和上一代的 GPU 相比,MIG 在提升 GPU 的使用率上有很大的进步。表格5:A100、A100 使用 1 个计算实例与 A100 使用 7 个计算实例的比较* 模型: BERT Base on FasterTransformer 2.1, sequence length 128表格6:A100、A100 使用 1 个计算实例与 A100 使用 7 个计算实例的比较 -2* 模型: BERT Large on FasterTransformer 2.1, sequencelength 384 表格 5 和表格 6 比较了A100、A100 使用一个 7g.40gb 的计算实例、以及 A100 使用 7 个 1g.5gb 的计算实例,在 BERT Base 和 BERT Large 上的差别。从这两张表格当中,我们可以得到几个结论。首先,A100 在不使用 MIG 下,和使用一个 7g.40gb 的实例下,其吞吐量和时延都差不多。其次,在 BERT Base 这个较小的模型上,MIG 在 batch size 1 时能带来四倍以上的吞吐量、在 batch size 4 时能带来两倍以上的吞吐量。只有到 batch size 64 以上才没有什么效益。而在 BERT Large 上,在 batch size 1 时,MIG 能带来百分之五十以上的提升,但在更大的 batch size 上,MIG 就没有什么明显的笑意。结 论MIG 是新 GPU 架构-安培,以及 CUDA 11 推出的新特性。它最多能将一个 A100 GPU 切分成 7 个 GPU 实例,大幅提升 GPU 的使用率,同时藉由硬件上的分离提供可靠的服务品质与错误的分离。 更多 A100 与 MIG 的相关资讯,可以访问 https://www.nvidia.com/en-us/data-center/a100/ https://docs.nvidia.com/datacenter/tesla/mig-user-guide/index.html#cuda-visible-devices 欢迎大家前往参考。本文来自微信公众号NVIDIA开发者社区
  • [问题求助] 【MindElec的GPU编译版本】【MindElec源码编译过程中出现问题】Could NOT find Python3
    【功能模块】电磁计算平台MindElec【操作步骤&问题现象】需求:在RTX3060 Gpu上运行mindelec电磁计算平台,由于官方只支持ascend,只能用源码编译的方式1、在wsl中完成minds pore1.7-gpu版本的安装及测试后,尝试在Ubuntu-20.04的wsl中利用源码编译的方式安装mindelec敲出命令 bash build.sh -e gpu 出现报错-- Could NOT find Python3 (missing: Python3_INCLUDE_DIRS Development) (found version "3.8.10")CMake Error at CMakeLists.txt:35 (find_python_package):  Unknown CMake command "find_python_package".-- Configuring incomplete, errors occurred!See also "/home/lihongji/mindscience/MindElec/build/mindelec/CMakeFiles/CMakeOutput.log".2、详细操作信息:(base) lihongji@LAPTOP-P7NAUT00:~/mindscience/MindElec$ bash build.sh -e gpumkdir: created directory '/home/lihongji/mindscience/MindElec/output'---------------- MindElec: build start ----------------start build mindelec project.-DDEBUG_MODE=off -DBUILD_PATH=/home/lihongji/mindscience/MindElec/build/ -DENABLE_GPU=ONMD LIBS CACHE PATH:  /home/lihongji/mindscience/MindElec/build/mindelec/.mdlibset make thread num: 8pkg name:pybind11,pybind11pybind11 config hash: 5253018179879c380bb2d33c476f2438-- Found pybind11: /home/lihongji/mindscience/MindElec/build/mindelec/.mdlib/pybind11_5253018179879c380bb2d33c476f2438/include (found version "2.6.1" )Found pkg: pybind11pkg name:glog,glogglog config hash: 6f581a3db68ffe9e125bd4c496da9aaa_FIND:/home/lihongji/mindscience/MindElec/build/mindelec/.mdlib/glog_6f581a3db68ffe9e125bd4c496da9aaafound /home/lihongji/mindscience/MindElec/build/mindelec/.mdlib/glog_6f581a3db68ffe9e125bd4c496da9aaa/lib/libglog.soFound libs: glog::glogpkg name:nlohmann_json,nlohmann_jsonnlohmann_json config hash: e0a3765b49b7f4747a26bc3db79d0028========== External libs built successfully ==========-- Could NOT find Python3 (missing: Python3_INCLUDE_DIRS Development) (found version "3.8.10")CMake Error at CMakeLists.txt:35 (find_python_package):  Unknown CMake command "find_python_package".-- Configuring incomplete, errors occurred!See also "/home/lihongji/mindscience/MindElec/build/mindelec/CMakeFiles/CMakeOutput.log".之前已经完成过一部分的编译,重新编译只显示该部分信息【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [openEuler] openEuler 22.03LTS 安装部署nvidia open gpu driver
    环境信息:1. 禁用开源驱动nouveaurmmod nouveauecho “blacklist nouveau” >> /etc/modprobe.d/blacklist.conf 2. 下载Nvidia 驱动源码安装时构建的内核模块必须与gsp一起使用。bin固件和用户空间NVIDIA GPU驱动程序组件来自相应的515.43.04驱动程序版本。因此在安装源码前需要安装nvidia gpu驱动。wget https://cn.download.nvidia.cn/XFree86/aarch64/515.43.04/NVIDIA-Linux-aarch64-515.43.04.run安装gpu驱动:sh ./NVIDIA-Linux-[version].run --no-kernel-modules  3. 下载Nvidia 驱动源码wget https://cn.download.nvidia.cn/XFree86/aarch64/515.43.04/NVIDIA-Linux-aarch64-515.43.04.run4. 安装gpu驱动:bash ./NVIDIA-Linux-aarch64-515.43.04.run --no-kernel-modules 5. 下载开源驱动源码git clone https://github.com/NVIDIA/open-gpu-kernel-modules.git 6. 编译源码cd open-gpu-kernel-modules-mainmake modules -j`nproc`    7. 安装源码make modules_install -j`nproc` 8. 编译安装nvidia驱动cd /lib/modules/5.10.0/kernel/drivers/video/insmod nvidia.ko 9. 查看驱动信息modinfo nvidia Agenda1. 编译nvidia开源驱动报错,无法找到/lib/modules/4.19.90-2204.3.0.0146.oe1.aarch64/build 下载内核源码包,创建软链接指向当前下载的源码路径:ln -s /usr/src/kernels/4.19.90-2205.1.0.0148.oe1.aarch64  /lib/modules/4.19.90-2204.3.0.0146.oe1.aarch64/build 2. 安装nvidia驱动报错,无法找到目录/lib/modules/5.10.0在2022/7/14使用github上最新的代码进行编译安装时,提示无法找到目录/lib/modules/5.10.0,这个是因为内核检查的是5.10.0大版本,设置软链接指向该目录即可:ln -s /lib/modules/5.10.0-60.18.0.50.oe2203.aarch64 /lib/modules/5.10.0 3. 安装nvidia驱动报错,内核签名校验失败这个是内核签名校验失败,ko已经编译完成,可以进入对应目录手动安装ko文件。cd /usr/lib/modules/${编译的内核版本}/kernel/drivers/videoinsmod nvidia.ko 4. 编译失败,出现modpost undfined error如果使用515.43.04版本的开源驱动代码,并且在aarch64上编译,会产生如下错误。这个是程序代码问题,在 515.48.07版本中已被修复。 本次安装的gpu固件驱动版本和open gpu 版本不一致,所以无法使用相关命令,后续会在安装对应版本的固件驱动和开源驱动后重新使用,然后更新文档。 
  • [问题求助] 鲲鹏超高I/O型 | ki1.2large.4 | 8vCPUs | 32GiB 云服务有配置GPU吗
    如题,最近在帮老师做深度学习任务,老师给了个如题配置华为云服务器,说是有2张V100的卡,但是在配置环境的时候却发现没有英伟达GPU信息。系统查到的配置图如下,请各位帮忙解答一下,是这个服务器本来就没有配置显卡,还是我配环境没配好。
  • [其他] 高效人工智能系统的软硬件协同设计
    这张图,来源于大概 32 年前的一本书《The Age OF Intelligent Machines》,作者是 Kurzweil 博士 ,他当时就预言了未来人工智能所需要的算力发展。我们对这张图做了些延伸,单个器件上大概能够集成多少计算能力。过去 100 年,计算能力几乎呈指数增长趋势,到现在,比如今天英伟达发布会最新 GPU 的计算,包括上周苹果发布的 GPU 芯片,基本上可以带来超过一个人脑级别的计算能力,为我们带来了非常大的可能。 ![2676a05ba6f1fda37e8b671b254b9f41.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/26/1650937005447891376.png) 人工智能计算平台分很多种,从大家比较熟悉的 GPU、FPGA、ASIC 到新型架构,实际都遵循了一个原则:要么更高效,要么更专业需要更长时间,要么更灵活,不可能在多个维度达到统一,永远存在一个设计上的矛盾。 比如,在 GPU 上算力最高,功耗也最高。FPGA 上会实现一些非常容易可重构的计算,但能效比可能不是那么好。ASIC 能效比非常好,但需要更长的开发周期 ,基本上是对特定应用做设计,当出货量比较小的时候,不是特别有效。 ![badde2c0d355bb22348f2bcff65c8c3e.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/26/1650937038084396713.png) 大家比较熟悉冯 · 诺伊曼瓶颈,实际上是说计算能力可以通过不断增加计算单元来实现,但最后瓶颈在于能不能把数据及时给到计算单元。过去四五十年,片上计算能力和片外数据通过存储带宽提供给片上的能力差距越来越大,也带来了 “内存墙” 的概念。当然,实际具体设计中,比如不能及时挪走产生的热量、不能无限制增大使用频率等,(这些)都迫使我们寻找新的计算设计。 ![c8bcb7aefaaea7235e7cc667ad3e8f87.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/26/1650937062869724884.png) 现在比较热门的是近存或存内计算设计,想法也非常简单,既然瓶颈来源于数据间流动,尤其是存储空间到计算空间的流动,能不能想一些办法让计算跟存储发生在同一个地方?这实际上正好和冯诺依曼体系相对,后者是将两者分开,这个要合在一起。 为什么可以这么做?因为新型计算,比如神经网络或图计算,经常有一方不变,另外一方不断变化的情况。比如 A 乘上 B,A 不断变化而 B 不变,这种情况下,可以在存储 B 的地方进行计算,不需要把数据挪来挪去。 大家进行了非常多尝试,比如用 DRAM 来做计存。最近,阿里好像也写了一篇文章讲了存内计算,把存储器设计成可以有计算单元,直接在里面进行相应计算,这都是一些有益的尝试。与在从外面拿到数据过来进行计算相比,这个计算能效强几千倍,是非常有希望的未来发展方向。
  • [ARM原生] 【转】Cuttlefish:GPU 图形加速
    Cuttlefish 的加速图形模式会使用主机的物理图形处理器 (GPU) 进行渲染,具体方法是将客户机渲染命令传递给主机,在主机上运行渲染命令调用,然后将渲染后的结果传递回客户机。默认情况下,Cuttlefish 设备中的客户机端渲染(例如界面和视频播放)由 SwiftShader 处理。SwiftShader 是对 OpenGL API 和 Vulkan API 的软件实现。由于 SwiftShader 是一种软件实现,因此它为 Cuttlefish 提供了一种可在任何主机上运行的通用渲染解决方案。不过,使用 SwiftShader 的性能不及使用正常设备。渲染是一种可大规模并行处理的并行问题,因为像素值是可以单独计算的。图形处理器 (GPU) 是通过加速渲染解决此问题的硬件单元。要求加速图形模式要求主机具有以下驱动程序:支持 EGL 的驱动程序(支持 GL_KHR_surfaceless_context 扩展程序)支持 OpenGL ES 的驱动程序支持 Vulkan 的驱动程序使用加速图形模式GfxStream若要使用 GfxStream 加速图形模式,请使用 --gpu_mode=gfxstream 标记启动本地 Cuttlefish 设备。使用此模式时,OpenGL 和 Vulkan API 调用会直接转到主机。$launch_cvd --gpu_mode=gfxstreamVirgl若要使用 Virgl 加速图形模式,请使用 --gpu_mode=drm_virgl 标记启动本地 Cuttlefish 设备。$launch_cvd --gpu_mode=drm_virgl使用 Virgl 加速图形模式时,OpenGL API 调用会转换为中间表示形式(请参阅 Gallium3D)。系统会将相应中间表示形式传递给主机,并且主机上的 virglrenderer 库会将此中间表示形式重新转换为 OpenGL API 调用。注意:此模式不支持 Vulkan。 声明:        本文转自:https://source.android.google.cn/setup/create/cuttlefish-ref-gpu,仅供学习与交流,非商业用途,版权归原作者所有,如有侵权,请联系删除。
  • [HPC] HPC解决方案GPU应用NWChem移植指南
    1 介绍NWChem是运行在高性能并行超级计算机和通常工作站集群上的计算化学软件。NWChem使用标准量子力学描述电子波函或密度,计算分子和周期性系统的特性,还可以进行经典分子动力学和自由能模拟。2 环境要求硬件要求项目说明CPUKunpeng 920GPUNVIDIA Tesla A100 软件要求项目版本下载地址NWChem6.8.1https://codeload.github.com/nwchemgit/nwchem/tar.gz/refs/tags/6.8.1-release鲲鹏GCC9.3.1https://mirrors.huaweicloud.com/kunpeng/archive/compiler/kunpeng_gcc/gcc-9.3.1-2021.03-aarch64-linux.tar.gzHMPI1.1.0https://mirrors.huaweicloud.com/hmpi/Hyper-MPI_1.1.0_openEuler-aarch64.tar.gzNvidia A100驱动470.57.02包含在cuda tookit中Nvidia CUDA组件11.4.1https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda_11.4.1_470.57.02_linux_sbsa.run操作系统要求项目版本下载地址麒麟OS麒麟V10 SP2https://www.kylinos.cnKernel4.19.90-24.4.v2101.ky10.aarch64操作系统自带3 配置编译环境3.1 禁用nouveau驱动步骤 1 使用PuTTY工具,以root用户登录服务器。步骤 2 执行以下命令查看nouveau驱动是否已禁用                     lsmod |grep nouveau步骤 3 执行以下命令禁用nouveau驱动                    新建文件/etc/modprobe.d/disable-nouveau.conf                  添加如下两行:                 blacklist nouveau                 options nouveau modeset=0步骤 4 备份并生成新的initramfs文件                   cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img                    dracut -f /boot/initramfs-$(uname -r).img $(uname -r)步骤 5 重启机器                   reboot----结束3.2 安装NVIDIA-CUDA组件(含GPU驱动)步骤 1 使用PuTTY工具,以root用户登录服务器。步骤 2 执行以下命令确认nouveau驱动已禁用(回显为空)                     lsmod |grep nouveau步骤 3 执行以下命令安装NVIDIA-CUDA组件:                     wget https://developer.download.nvidia.com/compute/cuda/11.4.1/local_installers/cuda_11.4.1_470.57.02_linux_sbsa.run                     sh cuda_11.4.1_470.57.02_linux_sbsa.run                     根据提示安装所有组件。步骤 4 配置环境变量:                    export PATH=/usr/local/cuda-11.4/bin:$PATH                    export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH步骤 5 执行以下命令验证:                     nvcc -V----结束4 编译和安装                        步骤 1    使用PuTTY工具,以root用户登录服务器。                        步骤 2    执行以下命令进入主程序安装目录:                                 cd /path/to/nwchem                        步骤 3    执行以下命令解压安装包:                                 tar -xvf nwchem-6.8.1-release.tar.gz                        步骤 4    执行以下命令修改配置文件:                                 cp ga-5.6.5.tar.gz nwchem-6.8.1-release/src/tools                        步骤 5    执行以下命令进入解压后路径:                                 cd nwchem-6.8.1-release/src                        步骤 6    执行以下命令进行配置:                                     export NWCHEM_TOP=/path/to/nwchem/nwchem-6.8.1-release                                     export LARGE_FILES=TRUE                                     export NWCHEM_TARGET=LINUX64                                     export NWCHEM_MODULES=all                                     export ARMCI_NETWORK=MPI-PR                                     export USE_MPI=y                                     export USE_MPIF=y                                     export USE_MPIF4=y                                     export USE_INTERNALBLAS=y                                     export TCE_CUDA=y                                     export CUDA_LIBS="-L/usr/local/cuda/lib64 -lcudart -lcublas"                                     export CUDA_FLAGS="-arch sm_80"                                     export CUDA_INCLUDE="-I. -I/usr/local/cuda/include"                                     export CUDA=nvcc                        步骤 7    执行以下命令开始编译:                                make nwchem_config                                    make                        步骤 8    执行以下命令查看是否生成可执行文件:                                 ls -l /path/to/nwchem/nwchem-6.8.1-release/bin/LINUX64/nwchem                        步骤 9    执行以下命令设置环境变量:                                 export PATH=/path/to/nwchem/nwchem-6.8.1-release/bin/LINUX64:$PATH----结束
  • [技术干货] 鲲鹏GPU生态应用NAMD移植指南 (CentOS 8.2)
    1.1 介绍NAMD(NAnoscale Molecular Dynamics)是用于分子动力学模拟的计算机软件,使用Charm++并行编程模型编写。它以其并行效率而著称,通常用于模拟大型系统(数百万个原子)。NAMD是由伊利诺伊大学厄巴纳香槟分校的理论和计算生物物理学组(TCB)和并行编程实验室(PPL)合作开发的。关于NAMD的更多信息请访问NAMD官网。语言:C++。一句话描述:分子动力学模拟的开源程序包。开源协议:自定义开源协议。建议的版本建议使用的版本为“NAMD 2.14 ”。1.2 环境要求硬件要求硬件要求如表4-1所示。表1-1 硬件要求项目说明CPU鲲鹏920处理器。 软件要求软件要求如表4-2所示。表1-2 软件要求项目版本下载地址NAMD2.14https://www.ks.uiuc.edu/Research/namdFFTW3.3.8http://www.fftw.org/fftw-3.3.8.tar.gz毕昇编译器1.3.3https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_compiler/bisheng-compiler-1.3.3-aarch64-linux.tar.gzHyper MPI1.1.1https://support.huaweicloud.com/usermanual-kunpenghpcs/userg_huaweimpi_0010.htmlNVIDIA CUDA组件11.4https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.run测试算例stmv_nve_cudahttps://www.ks.uiuc.edu/Research/namd/utilities/stmv.tar.gz 操作系统要求操作系统要求如表4-3所示。表1-3 操作系统要求项目版本下载地址CentOS8.2https://vault.centos.org/8.2.2004/isos/aarch64/CentOS-8.2.2004-aarch64-dvd1.isoKernel4.18.0-193https://vault.centos.org/8.2.2004/BaseOS/Source/SPackages/kernel-4.18.0-193.el8.src.rpm 1.3 移植规划数据本章节给出NAMD软件在移植过程中涉及到的相关软件安装规划路径的用途及详细说明。表1-4 移植规划数据序号软件安装规划路径用途说明1-基础环境搭建中的各安装包安装路径。参考《HPC解决方案 基础环境搭建指导书》中“安装规划数据”章节。2/path/to/FFTWFFTW的安装规划路径。这里的安装规划路径只是一个举例说明,建议部署在共享路径中。现网需要根据实际情况调整,后续章节凡是遇到安装路径的命令,都以现网实际规划的安装路径为准进行替换,不再单独说明。3/path/to/NAMDNAMD的安装规划路径。4/path/to/CASENAMD的测试规划路径。 1.4 配置编译环境前提条件使用SFTP工具将各安装包上传至服务器对应目录下。配置流程表1-5 配置流程序号配置项说明1基础环境搭建参考《HPC解决方案 基础环境搭建指导书》中“集群场景环境搭建”章节。2安装FFTW和TCL参考1.4.1 安装FFTW和TCL。3禁用nouveau驱动参考1.4.2 禁用nouveau驱动。4安装NVIDIA CUDA组件参考1.4.3 安装NVIDIA CUDA组件。5安装毕昇编译器参考1.4.4 安装毕昇编译器。 1.4.1 安装FFTW和TCL操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令安装FFTW、TCL安装包。yum -y install fftw-devel tcl-devel----结束1.4.2 禁用nouveau驱动操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令查看nouveau驱动是否已禁用。lsmod |grep nouveaul   若有回显信息,表示nouveau驱动未禁用,则执行步骤3。l   若无回显信息,表示nouveau驱动已禁用,则结束操作。步骤 3     执行以下命令禁用nouveau驱动。1.       新建文件“disable-nouveau.conf”。vi /etc/modprobe.d/disable-nouveau.conf2.       按“i”进入编辑模式,添加如下内容。blacklist nouveauoptions nouveau modeset=03.       按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。步骤 4     执行以下命令备份并生成新的“initramfs”文件cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.imgdracut -f /boot/initramfs-$(uname -r).img $(uname -r)步骤 5     执行以下命令重启机器。reboot----结束1.4.3 安装NVIDIA CUDA组件操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令获取NVIDIA CUDA组件。wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.run步骤 3     执行以下命令安装NVIDIA CUDA组件。sudo shcuda_11.4.0_470.42.01_linux_sbsa.run步骤 4     执行以下命令进行验证。ls -l /usr/local/cuda-11.4/步骤 5     执行以下命令配置CUDA的环境变量。export CUDA_HOME=/usr/local/cuda-11.4export PATH=/usr/local/cuda-11.4/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH----结束1.4.4 安装毕昇编译器操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令获取毕昇编译器软件包。wget https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_compiler/bisheng-compiler-1.3.3-aarch64-linux.tar.gz步骤 3     执行以下命令创建毕昇编译器安装目录(这里以/opt/compiler为例)。mkdir -p /opt/compiler步骤 4     执行以下命令将毕昇编译器压缩包拷贝到安装目录下。cp -r bisheng-compiler-1.3.3-aarch64-linux.tar.gz /opt/compiler步骤 5     执行以下命令进入压缩包目录。cd /opt/compiler步骤 6     执行以下命令解压缩软件包。tar -zxvf bisheng-compiler-1.3.3-aarch64-linux.tar.gz步骤 7     执行以下命令配置毕昇编译器的环境变量。export PATH=/opt/compiler/bisheng-compiler-1.3.3-aarch64-linux/bin:$PATHexport LD_LIBRARY_PATH=/opt/compiler/bisheng-compiler-1.3.3-aarch64-linux/lib:$LD_LIBRARY_PATHexport CC=clang CXX=clang++ FC=flang步骤 8     执行以下命令验证。clang -v若返回结果已包含毕昇编译器版本信息,说明安装成功。----结束1.5 获取源码操作步骤 步骤 1     下载NAMD安装包,需要注册账号。下载地址:https://www.ks.uiuc.edu/Research/namd步骤 2     使用SFTP工具将NAMD安装包上传至服务器“/path/to/NAMD”目录。----结束1.6 编译和安装操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令进入主程序安装目录。cd /path/to/NAMD步骤 3     执行以下命令解压NAMD安装包。tar -xvf NAMD_2.14_Source.tar.gz步骤 4     执行以下命令进入解压后的NAMD_2.14_Source目录。cd NAMD_2.14_Source步骤 5     执行以下命令解压charm-6.10.2.tar安装包。tar xvf charm-6.10.2.tar步骤 6     执行以下命令进入解压后的charm-6.10.2目录。cd charm-6.10.2步骤 7     执行以下命令进行配置。./build charm++ multicore-arm8 clang  flang  --with-production步骤 8     执行以下命令进入解压后路径。cd  multicore-arm8-flang-clang/tests/charm++/megatest/步骤 9     执行以下命令安装组件。make pgm./pgm +p4步骤 10     执行以下命令修改FFTW、TCL配置项。1.       复制FFTW3的模板。cd /path/to/NAMDcp arch/Linux-x86_64.fftw3 arch/Linux-ARM64.fftw2.       打开arch/Linux-ARM64.fftw文件。vi arch/Linux-ARM64.fftw3.       按“i”进入编辑模式,修改将路径FFTDIR修改为/usr。FFTDIR=/usr4.       按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。5.       打开arch/Linux-ARM64.tcl文件。vi arch/Linux-ARM64.tcl6.       按“i”进入编辑模式,将路径TCLDIR修改为/usr,库文件版本修改为-ltcl8.6。TCLDIR=/usrTCLLIB=-L$(TCLDIR)/lib -ltcl8.6 -ldl -lpthread7.       按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。步骤 11     执行以下命令编译NAMD。./config Linux-ARM64-g++ --charm-arch multicore-arm8-flang-clang --with-cuda --cxx clang++ --cc clangcd Linux-ARM64-g++/make编译完成后在当前目录下生成namd2执行程序。----结束1.7 运行和验证操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令创建工作目录。mkdir -p path/to/CASE步骤 3     执行以下命令进入工作目录。cd /path/to/CASE步骤 4     执行以下命令获取算例和二进制文件。wget https://www.ks.uiuc.edu/Research/namd/utilities/stmv.tar.gzwget https://www.ks.uiuc.edu/Research/namd/2.13/benchmarks/stmv_nve_cuda.namd步骤 5     执行以下命令解压stmv.tar.gz。tar xvf stmv.tar.gz步骤 6     执行以下命令把“stmv_nve_cuda.namd”文件拷贝到stmv目录下。cp stmv_nve_cuda.namd stmv步骤 7     执行以下命令运行算例, 开始测试。cd stmv/path/to/NAMD/NAMD_2.14_Source/Linux-ARM64-g++/namd2 +p96 +setcpuaffinity +maffinity +isomalloc_sync +devices 0,1 stmv_nve_cuda.namd需要查看日志中的“day/ns”数值,数值越小性能越优。----结束
  • [技术干货] 鲲鹏GPU生态应用VMD移植指南 (CentOS 8.2)
    1 介绍VMD 是一个分子可视化程序,用于使用 3-D 图形和内置脚本显示、动画和分析大型生物分子系统。VMD 支持运行 MacOS X、Unix 或 Windows 的计算机,免费分发,包括源代码。VMD 专为蛋白质、核酸、脂质双层组装等生物系统的建模、可视化和分析而设计。它可用于查看更通用的分子,因为 VMD 可以读取标准蛋白质数据库 (PDB) 文件并显示包含的结构。VMD 提供了多种用于渲染和着色分子的方法:简单的点和线、CPK 球体和圆柱体、甘草键、骨架管和丝带、卡通画等。VMD 可用于动画和分析分子动力学 (MD) 模拟的轨迹。特别是,VMD 可以作为外部 MD 程序的图形前端,通过在远程计算机上显示和动画化正在模拟的分子。一句话描述:VMD是用于3-D 图形和内置脚本显示、动画和分析大型生物分子系统的分子可视化程序语言:C开源协议:UIUC Open Source License建议的版本建议使用版本为“vmd 1.9.4a55”。2 环境要求硬件要求硬件要求如表2-1所示。表2-1 硬件要求项目说明CPUKunpeng 920GPUNVIDIA Tesla A100 软件要求软件要求如表2-2所示。表2-2 软件要求项目版本下载地址VMD1.9.4https://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=VMDNvidia CUDA组件11.4https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.run 操作系统要求操作系统要求如表2-3所示。表2-3 操作系统要求项目版本下载地址CentOS8.2https://www.centos.org/download/Kernel4.18.0-193.el8.aarch64https://www.centos.org/download/3 移植规划数据本章节给出VMD软件在移植过程中涉及到的相关软件安装规划路径的用途及详细说明。表3-1 移植规划数据序号软件安装规划路径用途说明1-基础环境搭建中的各安装包安装路径。参考《HPC解决方案 基础环境搭建指导书》中“安装规划数据”章节。2/path/to/vmdvmd的安装规划路径。这里的安装规划路径只是一个举例说明,建议部署在共享路径中。现网需要根据实际情况调整,后续章节凡是遇到安装路径的命令,都以现网实际规划的安装路径为准进行替换,不再单独说明。3/path/to/rpmtcl、tk的RPM包的存放规划路径4 配置编译环境前提条件使用SFTP工具将各安装包上传至服务器对应目录下。配置流程表4-1 配置流程序号配置项说明1基础环境搭建参考《HPC解决方案 基础环境搭建指导书》中“集群场景环境搭建”章节。1禁用nouveau驱动参考4.1禁用nouveau驱动。2安装NVIDIA-CUDA组件参考4.2安装NVIDIA-CUDA组件。                            4.1 禁用nouveau驱动操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令查看nouveau驱动是否已禁用lsmod |grep nouveau步骤 3     执行以下命令禁用nouveau驱动新建文件/etc/modprobe.d/disable-nouveau.confvim /etc/modprobe.d/disable-nouveau.conf添加如下两行:blacklist nouveauoptions nouveau modeset=0步骤 4     备份并生成新的initramfs文件cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img dracut -f /boot/initramfs-$(uname -r).img $(uname -r)步骤 5     重启机器reboot----结束4.2 安装NVIDIA-CUDA组件操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令确认nouveau驱动已禁用(回显为空)lsmod |grep nouveau步骤 3     执行以下命令安装NVIDIA-CUDA组件:wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.runsudo sh cuda_11.4.0_470.42.01_linux_sbsa.run步骤 4     配置环境变量:export PATH=/usr/local/cuda-11.4/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH步骤 5     执行以下命令验证nvcc --version----结束 5 获取源码操作步骤步骤 1     下载vmd安装包“vmd-1.9.4a55.src.tar.gz”。下载地址:https://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=VMD。步骤 2     使用SFTP工具将VMD安装包上传至服务器“/path/to/VMD”目录。----结束6 编译和安装操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令进入主程序安装目录:cd /path/to/VMD步骤 3     执行以下命令解压安装包:tar -xvf vmd-1.9.4a55.src.tar.gz步骤 4     执行以下命令进入解压后路径:cd vmd-1.9.4a55步骤 5     执行以下命令安装fltk:yum install fltk fltk-devel步骤 6     执行以下命令安装actc:1.      执行以下命令创建、进入actc目录mkdir -p /path/to/VMD/vmd-1.9.4a55/lib/actccd /path/to/VMD/vmd-1.9.4a55/lib/actc2.      在https://sourceforge.net/projects/actc/下载actc安装包3.      执行以下命令解压安装包tar xvf actc-1.1.tar.gz4.      执行以下命令编译actcmv actc-1.1/* ./make如果有libactc.a出现则算是编译成功了。需要额外信息请查看README。步骤 7     执行以下命令安装stride:1.      执行以下命令进入actc目录cd /path/to/VMD/vmd-1.9.4a55/lib/stride2.      在http://webclu.bio.wzw.tum.de/stride/stride.tar.gz下载stride安装包3.      执行以下命令解压安装包tar xvf stride.tar.gz4.      执行以下命令安装stridemake5.      执行以下命令创建软连接ln -s /path/to/VMD/vmd-1.9.4a55/lib/stride/stride /path/to/VMD/vmd-1.9.4a55/lib/stride/stride_LINUXARM64步骤 8     执行以下命令安装surf:1.      执行以下命令进入surf目录cd /path/to/VMD/vmd-1.9.4a55/lib/surf2.      执行以下命令解压安装包tar xvf surf.tar.Z3.      执行以下命令安装surfyum install imakemake dependmake surf4.      执行以下命令创建软连接ln -s /path/to/VMD/vmd-1.9.4a55/lib/stride/surf /path/to/VMD/vmd-1.9.4a55/lib/stride/surf_LINUXARM64步骤 9     执行以下命令安装vrpn:1.      执行以下命令进入vrpn目录mkdir -p /path/to/VMD/vmd-1.9.4a55/lib/vrpncd /path/to/VMD/vmd-1.9.4a55/lib/vrpn2.      在https://github.com/vrpn/vrpn下载vrpn安装包3.      执行以下命令解压安装包unzip vrpn-master.zip4.      执行以下命令安装vrpnmv vrpn-master/* ./mkdir buildcd buildyum install cmake libarchivecmake ../ -DCMAKE_INSTAL_PREFIX=/path/to/vmd/vmd-1.9.4a55/lib/vrpn/make && make install 步骤 10     执行以下命令安装tachyon:1.      执行以下命令进入tachyon目录cd /path/to/VMD/vmd-1.9.4a55/lib/tachyon2.      在https://ftp.sudhip.com/archlinux/other/community/tachyon/tachyon-0.99b6.tar.gz下载tachyon安装包3.      执行以下命令解压安装包tar xvf tachyon-0.99b6.tar.gz4.      执行以下命令进入安装包unix目录cd tachyon/unix5.      执行以下命令修改配置vim Make-config 将支持JPEG和PNG部分全部注释掉169 #USEJPEG=170 #JPEGINC=171 #JPEGLIB=…189 #USEPNG=190 #PNGINC=191 #PNGLIB= 修改前:169 USEJPEG=170 JPEGINC=171 JPEGLIB=…189 USEPNG=190 PNGINC=191 PNGLIB=执行以下命令去除-m64编译参数sed -i "s/-m64//" Make-archcd ../ demosrc修改spaceball.c第35行,将port改为serialport;修改109行的括号,源码漏掉几个括号vim spaceball.c35   if (serialport != NULL) {…109   if (((buttonchanged & SBALL_BUTTON_PICK) && (buttons & SBALL_BUTTON_PICK)) ||110       ((buttonchanged & SBALL_BUTTON_1) && (buttons & SBALL_BUTTON_1)) ||111       ((buttonchanged & SBALL_BUTTON_LEFT) && (buttons & SBALL_BUTTON_LEFT)) ) { 修改前:35   if (port != NULL) {…109   if ((buttonchanged & SBALL_BUTTON_PICK) && (buttons & SBALL_BUTTON_PICK)) ||110       (buttonchanged & SBALL_BUTTON_1) && (buttons & SBALL_BUTTON_1)) ||111       (buttonchanged & SBALL_BUTTON_LEFT) && (buttons & SBALL_BUTTON_LEFT)) ) { 6.      执行以下命令安装tachyoncd ../unixmake linux-64-thr7.      执行以下命令创建软连接ln –s  /path/to/vmd/vmd-1.9.4a55/lib/tachyon/tachyon/compile/linux-64-thr/tachyon /path/to/vmd/vmd-1.9.4a55/lib/tachyon/tachyon_LINUXARM64  步骤 11     执行以下命令安装tcl/tk 8.5:1.      使用SFTP工具将tcl、tk的rpm包上传至服务器“/path/to/rpm”目录2.      执行以下命令安装tcl、tkcd /path/to/rpmrpm –ivh tcl-8.5.13-8.el7.aarch64.rpmrpm –ivh tcl-devel-8.5.13-8.el7.aarch64.rpmrpm –ivh tk-8.5.13-6.el7.aarch64.rpmrpm –ivh tk-devel-8.5.13-6.el7.aarch64.rpm步骤 12     执行以下命令编译plugins:1.      执行以下命令进入plugins目录 cd /path/to/VMD/plugins2.      执行命令设置tcl头文件和库文件环境变量export TCL_INCLUDE_DIR=/usr/share/tcl8.5export TCL_LIBRARY_DIR=/usr/lib64/tcl8.53.      执行以下命令编译make LINUXARM64mkdir /path/to/vmd/vmd-1.9.4a55/pluginsexport PLUGINDIR=/path/to/vmd/vmd-1.9.4a55/pluginsmake distrib 步骤 13     执行以下命令编译vmd:1.      执行以下命令进入vmd-1.9.4a55目录         cd /path/to/vmd/vmd-1.9.4a55/2.      执行命令修改配置文件vim configure设置安装路径信息$install_bin_dir="/path/to/vmd/ vmd-1.9.4a55/bin";$install_library_dir="/path/to/vmd/ vmd-1.9.4a55/lib/vmd"; 设置tachyon环境变量$libtachyon_dir="/path/to/vmd/vmd-1.9.4a55/lib/tachyon/tachyon";$libtachyon_include="-I/path/to/vmd/vmd-1.9.4a55/lib/tachyon/tachyon/src";$libtachyon_library="-L"/path/to/vmd/vmd-1.9.4a55/lib/tachyon/tachyon/compile/linux-64-thr; 修改LINUXARM64的$arch_nvccflags参数注释掉"-gencode arch=compute_30,code=compute_30 " .s 16 $install_bin_dir="/path/to/vmd/vmd-1.9.4a55/bin";1718 # Directory where VMD files and executables are installed19 $install_library_dir="/path/to/vmd/vmd-1.9.4a55/lib/vmd";…1354 $libtachyon_dir         = "/path/to/vmd/vmd-1.9.4a55/lib/tachyon/tachyon";1355 $libtachyon_include     = "-I/path/to/vmd/vmd-1.9.4a55/lib/tachyon/tachyon/src";1356 $libtachyon_library     = "-L/path/to/vmd/vmd-1.9.4a55/lib/tachyon/tachyon/compile/linux-64-thr";…2627   #"-gencode arch=compute_30,code=compute_30 " . 修改前:16 $install_bin_dir="/usr/local/bin";1718 # Directory where VMD files and executables are installed19 $install_library_dir="/usr/local/lib/$install_name";…1354 $libtachyon_dir         = "$vmd_library_dir/tachyon";1355 $libtachyon_include     = "-I$libtachyon_dir/include";1356 $libtachyon_library     = "-L$libtachyon_dir/lib_$config_arch";…2627                     "-gencode arch=compute_30,code=compute_30 " . 3.      执行以下命令编译./configure LINUXARM64 EGLPBUFFER CUDA IMD LIBTACHYON ZLIB COLVARS TCL PTHREADS SILENTcd src && make verycleanmake如果出现“No resource compiler required on this platform”,说明编译顺利,然后安装make install当看到"Make sure /Projects/vmd/ vmd-1.9.4a55/bin is in your path.VMD installation complete.  Enjoy!"说明安装成功。 ----结束7 运行和验证操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令进入bin目录:cd /path/to/vmd/vmd-1.9.4a55/bin步骤 3     执行以下命令运行:./vmd ----结束8 更多资源vmd 官网:http://www.ks.uiuc.edu/Research/vmd/ 
  • [技术干货] 鲲鹏GPU生态应用Relion移植指南 (CentOS 8.2)
    1 介绍单颗粒冷冻电镜是结构生物学研究的重要手段之一,冷冻电镜的模型重构通常需要对几万甚至几十万张投影图片进行分析、组装和优化,计算量巨大,这需要先进的计算架构配合有效的算法才能实现。Relion是专门为低温电子显微镜(cryo-EM)设计的图像处理软件。由MRC分子生物学实验室的Sjors Scheres组开发的Relion框架正在革新冷冻电磁领域。该软件在通过电子冷冻显微镜数据的单颗粒分析来优化大分子结构。Relion采用经验贝叶斯方法对多个3D重建或2D类平均值进行细化。借助GPU CUDA并行计算架构,改进了算法,GPU解决了Cryo-EM中计算量最大的过程,例如粒子自动选取,2D和3D图像分类以及高分辨率图像细化。关于RELION的更多信息请访问RELION官网。语言:C++/CUDA一句话描述:Relion 是由 MRC 的 Scheres 在 2012 年发布的针对单颗粒冷冻电镜图片进行处理的框架。开源协议:GPLv3建议的版本建议使用版本为“RELION 3.1.2”。2 环境要求硬件要求硬件要求如表2-1所示。表2-1 硬件要求项目说明CPUKunpeng 920GPUNVIDIA Tesla A100 软件要求软件要求如表2-2所示。表2-2 软件要求项目版本下载地址RELION3.1.2https://github.com/3dem/relion/archive/refs/tags/3.1.2.tar.gz毕昇编译器1.3.3https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_compiler/bisheng-compiler-1.3.3-aarch64-linux.tar.gzHMPI21.0https://support.huaweicloud.com/usermanual-kunpenghpcs/userg_huaweimpi_0011.htmlFFTW3.3.8https://fftw.org/pub/fftw/fftw-3.3.8.tar.gzcmake3.8.1https://cmake.org/files/v3.8/cmake-3.8.1.tar.gzNvidia CUDA组件11.4https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.run测试算例relion_benchmark.tar.gzftp://ftp.mrc-lmb.cam.ac.uk/pub/scheres/relion_benchmark.tar.gz 操作系统要求操作系统要求如表2-3所示。表2-3 操作系统要求项目版本下载地址CentOS8.2https://www.centos.org/download/Kernel4.18.0-193.el8.aarch64https://www.centos.org/download/3 移植规划数据本章节给出RELION软件在移植过程中涉及到的相关软件安装规划路径的用途及详细说明。表3-1 移植规划数据序号软件安装规划路径用途说明1-基础环境搭建中的各安装包安装路径。参考《HPC解决方案 基础环境搭建指导书》中“安装规划数据”章节。2/path/to/bisheng-1.3.3毕昇编译器的安装规划路径。这里的安装规划路径只是一个举例说明,建议部署在共享路径中。现网需要根据实际情况调整,后续章节凡是遇到安装路径的命令,都以现网实际规划的安装路径为准进行替换,不再单独说明。3/path/to/HMPIHMPI的安装规划路径4/path/to/ NVIDIA-CUDANVIDIA-CUDA组件的安装规划路径。5/path/to/FFTWFFTW的安装规划路径。6/path/to/CMAKECMAKE的安装规划路径。7path/to/wxWidgetswxWidgets的安装规划路径。8path/to/CTFFINDCTFFIND的安装规划路径。9/path/to/RELIONRELION的安装规划路径。10/path/to/CASERELION的算例文件存放规划路径。4 配置编译环境前提条件使用SFTP工具将各安装包上传至服务器对应目录下。配置流程表4-1 配置流程序号配置项说明1基础环境搭建参考《HPC解决方案 基础环境搭建指导书》中“集群场景环境搭建”章节。2安装毕昇编译器参考《毕昇编译器》中“安装毕昇编译器”章3安装HMPI参考《源码安装Hyper MPI》中“毕昇编译Hyper MPI软件包”章节 。4禁用nouveau驱动参考4.1禁用nouveau驱动。5安装NVIDIA-CUDA组件参考4.2安装NVIDIA-CUDA组件。6安装FFTW参考4.3 安装FFTW。7安装cmake参考4.4 安装cmake。8安装wxWidgets参考4.5 安装wxWidgets。9安装CTFFIND参考4.6 安装CTFFIND。4.1  禁用nouveau驱动4.2  安装NVIDIA-CUDA组件4.3  安装FFTW4.4  安装cmake4.5  安装wxWidgets4.6  安装CTFFIND4.1 禁用nouveau驱动操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令查看nouveau驱动是否已禁用lsmod |grep nouveau步骤 3     执行以下命令禁用nouveau驱动新建文件/etc/modprobe.d/disable-nouveau.confvim /etc/modprobe.d/disable-nouveau.conf添加如下两行:blacklist nouveauoptions nouveau modeset=0步骤 4     备份并生成新的initramfs文件cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img dracut -f /boot/initramfs-$(uname -r).img $(uname -r)步骤 5     重启机器reboot----结束4.2 安装NVIDIA-CUDA组件操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令确认nouveau驱动已禁用(回显为空)lsmod |grep nouveau步骤 3     执行以下命令安装NVIDIA-CUDA组件:wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.runsudo sh cuda_11.4.0_470.42.01_linux_sbsa.run步骤 4     配置环境变量:export PATH=/usr/local/cuda-11.4/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH步骤 5     执行以下命令验证nvcc --version----结束 4.3 安装FFTW操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令下载FFTW安装包wget https://fftw.org/pub/fftw/fftw-3.3.8.tar.gz步骤 3     执行以下命令解压FFTW安装包tar –zxvf fftw-3.3.8.tar.gz步骤 4     执行以下命令进入FFTW安装包 cd fftw-3.3.8步骤 5     执行以下命令安装FFTW:export CC=clang CXX=clang++ FC=flang./bootstrap.sh./configure --prefix=/path/to/FFTW --enable-single --enable-float --enable-neon --enable-shared --enable-threads --enable-openmp --enable-mpi CFLAGS="-O3 -fomit-frame-pointer -fstrict-aliasing"make -j && make installmake clean./configure --prefix=/path/to/FFTW --enable-long-double --enable-shared --enable-threads --enable-openmp --enable-mpi CFLAGS="-O3 -fomit-frame-pointer -fstrict-aliasing"make -j && make installmake clean./configure --prefix=/path/to/FFTW --enable-shared --enable-threads --enable-openmp --enable-mpi CFLAGS="-O3 -fomit-frame-pointer -fstrict-aliasing"make -j && make install步骤 6     执行以下命令配置环境变量:export PATH=/path/to/FFTW/bin:$PATHexport LD_LIBRARY_PATH=/path/to/FFTW/lib:$LD_LIBRARY_PATH4.4 安装cmake操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令安装cmake:wget https://cmake.org/files/v3.8/cmake-3.8.1.tar.gztar -zxvf cmake-3.8.1.tar.gzcd cmake-3.8.1./configure --prefix=/path/to/CMAKEmake -j64make install步骤 3     执行以下命令配置环境变量:export PATH=/path/to/CMAKE/bin:$PATH4.5 安装wxWidgets操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令安装wxWidgets:wget https://github.com/wxWidgets/wxWidgets/archive/refs/tags/v3.0.5.tar.gz tar -zxvf  v3.0.5.tar.gzcd wxWidgets-3.0.5./configure --disable-guimake -j16make install步骤 3     执行以下命令配置环境变量:ldconfig步骤 4     执行以下命令进行验证:wx-config  --version4.6 安装CTFFIND操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令解压ctffind:wget https://grigoriefflab.umassmed.edu/system/tdf?path=ctffind-4.1.14.tar.gz&file=1&type=node&id=26 tar -zxvf  ctffind-4.1.14.tar.gzcd ctffind-4.1.14步骤 3     执行以下命令修改文件:vim src/core/matrix.cpp修改第7行的代码7 #define _AL_SINCOS(x, s, c)   s = sinf(x);  c = cosf(x);原始内容:7  #define _AL_SINCOS(x, s, c)  __asm__ ("fsincos" : "=t" (c), "=u" (s) : "0" (x))步骤 4     执行以下命令进行编译安装:yum install -y libjpeg* libtiff* fftw*autoreconf -f -i./configure --prefix=/path/to/ctffind --disable-mkl --enable-openmp --enable-debugmodevim Makefile将CFLAGS CPPFLAGS CXXFLAGS中的-O2改成-O0296 CFLAGS = -g –O0297 CPP = clang -E298 CPPFLAGS = -O0 -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DDEBUG299 CXX = clang++300 CXXCPP = clang++ -E301 CXXDEPMODE = depmode=gcc3302 CXXFLAGS = -O0 -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DDEBUG  -fopenmp 原始内容:296 CFLAGS = -g -O2297 CPP = clang -E298 CPPFLAGS = -O2 -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DDEBUG299 CXX = clang++300 CXXCPP = clang++ -E301 CXXDEPMODE = depmode=gcc3302 CXXFLAGS = -O2 -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DDEBUG  -fopenmpmake & make install步骤 5     执行以下命令配置环境变量:export PATH=/path/to/install/ctffind/bin:$PATH----结束  5 获取源码操作步骤步骤 1     下载RELION安装包“RELION-3.1.2.tar.gz”。下载地址:https://github.com/3dem/relion/archive/refs/tags/3.1.2.tar.gz。步骤 2     使用SFTP工具将RELION安装包上传至服务器“/path/to/RELION”目录。----结束6 编译和安装操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令进入主程序安装目录:cd /path/to/RELION步骤 3     执行以下命令解压安装包:tar -xvf 3.1.2.tar.gz步骤 4     执行以下命令进入解压后路径:cd relion-3.1.2mkdir build步骤 5     执行以下命令进行配置:yum install -y libtiff-* fltk* fltk-devel*yum -y install xorg-x11-xauthcd buildexport FFTW_HOME=/path/to/FFTWexport FFTW_LIB=$FFTW_HOME/libexport FFTW_INCLUDE=$FFTW_HOME/includecmake  -DBUILD_SHARED_LIBS=OFF -DCUDA=ON  -DCudaTexture=ON -DCUDA_ARCH=80 -DCMAKE_BUILD_TYPE=release  -DCMAKE_INSTALL_PREFIX=/path/to/install/RELION  ..(-DCUDA_ARCH的值要对应显卡的计算能力,最低35,如A100为80,V100为70,具体可通过Nvidia网页进行查看)步骤 6     执行以下命令开始编译:make -j40 make -j40 install步骤 7     执行以下命令查看RELION版本:/path/to/install/RELION/bin/relion_refine_mpi --help步骤 8     执行以下命令设置环境变量:export PATH=/path/to/install/RELION/bin:$PATH----结束7 运行和验证操作步骤步骤 1     使用PuTTY工具,以root用户登录服务器。步骤 2     执行以下命令进入测试目录:cd /path/to/CASE步骤 3     执行以下命令解压算例文件:tar xvf relion_benchmark.tar.gz步骤 4     执行以下命令进入解压后的目录:cd relion_benchmark步骤 5     执行以下命令运行RELION测试:mkdir class3dyum -y install timetime -p mpirun --allow-run-as-root -n 4 relion_refine_mpi --j 24 --gpu 0 --pool 100 --dont_combine_weights_via_disc --i Particles/shiny_2sets.star --ref emd_2660.map:mrc --firstiter_cc --ini_high 60 --ctf --ctf_corrected_ref --iter 25 --tau2_fudge 4 --particle_diameter 360 --K 6 --flatten_solvent --zero_mask --oversampling 1 --healpix_order 2 --offset_range 5 --offset_step 2 --sym C1 --norm --scale --random_seed 0 --maxsig 500 --fast_subsets --o class3d/test01----结束8 更多资源RELION Github:https://github.com/3dem/relionRELION 官网:https://relion.readthedocs.io/en/latest/Installation.html#download-relion 
  • [HPC] HPC解决方案GPU应用Gromacs移植指南
    1 介绍分子动力学模拟(molecular dynamics simulation,MD)是时下最广泛为人采用的计算庞大复杂系统的方法,自1970年起,由于分子模拟的发展迅速,人们系统地建立了许多适用于生化分子体系、聚合物、金属与非金属材料的力场,使得计算复杂体系的结构与一些热力学与光谱性质的能力及精准性大为提升。分子动力学模拟是应用这些力场及根据牛顿运动力学原理所发展的计算方法。GROMACS是一个用于分子动力学模拟和能量最小化的计算引擎,其通过牛顿平衡方程来模拟几百到数以百万的原子体系。其设计初衷主要用于生物分子,例如具有大量复杂键联系的蛋白,脂和核酸分子,但GROMACS如今同样被用来计算非生物体系的非键联系,例如聚合物。 GROMACS相比其它分子动力学模拟软件具有一些其独有的优势:1. GROMACS免费,其遵循LGPL协议(GNU Lesser General Public License),在Github上可以找到GROMACS的开源代码;2. GROMACS提供相比其他软件更高的性能,在代码上进行了许多的优化;3. GROMACS对于拓扑文件与参数设置文件阅读友好,其与Python的设置格式类似;4. GROMACS的生态环境发展良好,模拟许多分析工具对GROMACS支持都较为优秀。关于GROMACS的更多信息请访问GROMACS官网。语言:C++一句话描述:分子动力学模拟和能量最小化的计算引擎。开源协议:LGPL Version 2.1建议的版本建议使用版本为“GROMACS 2019.3”。2 环境要求硬件要求硬件要求如表2-1所示。表1-1 硬件要求项目说明CPUKunpeng 920GPUNVIDIA Tesla A100 软件要求软件要求如表2-2所示。表1-2 软件要求项目版本下载地址GROMACS2019.3http://ftp.gromacs.org/pub/gromacs/gromacs-2019.3.tar.gz毕昇编译器1.3.3https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_compiler/bisheng-compiler-1.3.3-aarch64-linux.tar.gzHMPI21.0https://support.huaweicloud.com/usermanual-kunpenghpcs/userg_huaweimpi_0010.htmlOpenBLAS0.3.6https://github.com/xianyi/OpenBLAS/archive/refs/tags/v0.3.6.tar.gzFFTW3.3.8https://fftw.org/pub/fftw/fftw-3.3.8.tar.gzcmake3.8.1https://cmake.org/files/v3.8/cmake-3.8.1.tar.gzNvidia CUDA组件11.4https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.run测试算例water_GMX50_barehttps://ftp.gromacs.org/pub/benchmarks/ 操作系统要求操作系统要求如表2-3所示。表1-3 操作系统要求项目版本下载地址CentOS8.2https://www.centos.org/download/Kernel4.18.0-193.el8.aarch64https://www.centos.org/download/3 编译安装依赖库3.1 禁用nouveau驱动操作步骤步骤 1 使用PuTTY工具,以root用户登录服务器。步骤 2 执行以下命令查看nouveau驱动是否已禁用          lsmod |grep nouveau步骤 3 执行以下命令禁用nouveau驱动          新建文件/etc/modprobe.d/disable-nouveau.conf         添加如下两行:         blacklist nouveau         options nouveau modeset=0步骤 4 备份并生成新的initramfs文件          cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img           dracut -f /boot/initramfs-$(uname -r).img $(uname -r)步骤 5 重启机器          reboot----结束3.2 安装NVIDIA-CUDA组件操作步骤步骤 1 使用PuTTY工具,以root用户登录服务器。步骤 2 执行以下命令确认nouveau驱动已禁用(回显为空)          lsmod |grep nouveau步骤 3 执行以下命令安装NVIDIA-CUDA组件:         wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux_sbsa.run         sudo sh cuda_11.4.0_470.42.01_linux_sbsa.run步骤 4 配置环境变量:          export PATH=/usr/local/cuda-11.2/bin:$PATH          export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH步骤 5 执行以下命令验证         nvcc -v----结束3.3 安装毕昇编译器操作步骤参考《毕昇编译器用户指南》中“安装毕昇编译器”章节----结束3.4 安装HMPI操作步骤参考《华为高性能通信库用户指南》中“源码安装Hyper MPI”章节----结束3.5 安装OPENBLAS操作步骤步骤 1 使用PuTTY工具,以root用户登录服务器。步骤 2 执行以下命令解压OpenBLAS安装包:        tar -zxvf OpenBLAS-0.3.6.tar.gz步骤 3 执行以下命令进入解压后的目录:        cd OpenBLAS-0.3.6步骤 4 执行以下命令编译安装OpenBLAS:        make        make PREFIX=/path/to/OPENBLAS install步骤 5 执行以下命令设置OpenBLAS的环境变量:        export LD_LIBRARY_PATH=/path/to/OPENBLAS/lib:$LD_LIBRARY_PATH----结束3.6 安装FFTW操作步骤步骤 1 使用PuTTY工具,以root用户登录服务器。步骤 2 执行以下命令安装FFTW:        wget https://fftw.org/pub/fftw/fftw-3.3.8.tar.gz        tar –zxvf fftw-3.3.8.tar.gz        cd fftw-3.3.8        ./bootstrap.sh        ./configure --prefix=/path/to/FFTW --enable-single --enable-float --enable-neon --enable-shared --enable-threads --enable-openmp --enable-mpi CFLAGS="-O3 -fomit-frame-pointer -fstrict-aliasing"        make -j && make install        make clean        ./configure --prefix=/path/to/FFTW --enable-long-double --enable-shared --enable-threads --enable-openmp --enable-mpi CFLAGS="-O3 -fomit-frame-pointer -fstrict-aliasing"        make -j && make install        make clean        ./configure --prefix=/path/to/FFTW --enable-shared --enable-threads --enable-openmp --enable-mpi CFLAGS="-O3 -fomit-frame-pointer -fstrict-aliasing"        make -j && make install步骤 3 执行以下命令配置环境变量:        export PATH=/path/to/FFTW/bin:$PATH        export LD_LIBRARY_PATH=/path/to/FFTW/lib:$LD_LIBRARY_PATH3.7 安装cmake操作步骤步骤 1 使用PuTTY工具,以root用户登录服务器。步骤 2 执行以下命令安装cmake:         wget https://cmake.org/files/v3.8/cmake-3.8.1.tar.gz        tar -zxvf cmake-3.8.1.tar.gz        cd cmake-3.8.1        ./configure --prefix=/path/to/CMAKE        make -j64        make install步骤 3 执行以下命令配置环境变量:        export PATH=/path/to/CMAKE/bin:$PATH4 编译安装主程序操作步骤步骤 1 使用PuTTY工具,以root用户登录服务器。步骤 2 执行以下命令进入主程序安装目录:                cd /path/to/GROMACS步骤 3 执行以下命令解压安装包:        tar -xvf gromacs-2019.3.tar.gz步骤 4 执行以下命令进入解压后路径:         cd gromacs-2019.3         mkdir build步骤 5 执行以下命令修改配置文件:        vim cmake/gmxManageNvccConfig.cmake        #注释第116、117、120、121行步骤 6 执行以下命令进行配置:         sed -i '212s/return fftw_version;/return 0;/g' src/gromacs/utility/binaryinformation.cpp         sed -i '214s/return fftwf_version;/return 0;/g' src/gromacs/utility/binaryinformation.cpp         sed -i '457s/int fftwflags = FFTW_DESTROY_INPUT;/int fftwflags = 0;/g' src/gromacs/fft/fft5d.cpp         sed -i '587s/FFTWPREFIX(cleanup)();/fftwf_cleanup_threads();/g' src/gromacs/fft/fft_fftw3.cpp         cd build         FLAGS="-march=armv8.2-a -mcpu=tsv110"; CFLAGS=$FLAGS CXXFLAGS=$FLAGS LDFLAGS="-fuse-ld=lld" CC=mpicc CXX=mpicxx \         cmake -DCMAKE_INSTALL_PREFIX=/path/to/GROMACS  \-DBUILD_SHARED_LIBS=on \-DBUILD_TESTING=on \-DREGRESSIONTEST_DOWNLOAD=off \-DGMX_BUILD_OWN_FFTW=off \-DGMX_SIMD=ARM_NEON_ASIMD \-DGMX_DOUBLE=off \-DGMX_EXTERNAL_BLAS=on \-DGMX_EXTERNAL_LAPACK=on \-DGMX_FFT_LIBRARY=fftw3 \-DGMX_BLAS_USER=/path/to/OPENBLAS/lib/libopenblas.a \-DGMX_LAPACK_USER=/path/to/OPENBLAS/lib/libopenblas.a \-DFFTWF_LIBRARY=/path/to/FFTW/lib/libfftw3f.so \-DFFTWF_INCLUDE_DIR=/path/to/FFTW/include \-DGMX_GPU=on \-DGMX_OPENMP=on \-DGMX_X11=off  \-DGMX_MPI=on \-DHWLOC_LIBRARIES=/usr/lib64 \-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \../步骤 7 执行以下命令开始编译:        make -j40 V=1        make -j40 install步骤 8 执行以下命令查看是否生成可执行文件:        ll /path/to/GROMACS/bin/gmx_mpi步骤 9 执行以下命令设置环境变量:        export PATH=/path/to/GROMACS/bin:$PATH----结束
  • [其他] AlexNet模型
    AlexNet模型AlexNet中包含了几个比较新的技术点,也首次在CNN中成功应用了ReLU、Dropout和LRN等Trick。同时AlexNet也使用了GPU进行运算加速。AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。AlexNet主要使用到的新技术点如下:(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。(5)使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。因为GPU之间通信方便,可以互相访问显存,而不需要通过主机内存,所以同时使用多块GPU也是非常高效的。同时,AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。 (6)数据增强,随机地从256*256的原始图像中截取224*224大小的区域(以及水平翻转的镜像),相当于增加了2*(256-224)^2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。
  • [资产园地] 人脸检测-RetinaFace 支持Pytorch, GPU训练, 支持CPU,GPU推理
    描述RetinaFace(人脸检测/Pytorch)注:本算法支持多卡训练、单卡混合精度训练,但在多卡情况下不支持混合精度1. 概述此模型基于RetinaFace: Single-stage Dense Face Localisation in the Wild中提出的模型结构实现,该算法会载入在WiderFace 上的预训练模型,在用户数据集上做迁移学习。我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。人脸检测的评估手段一般使用mAP指标,详细说明请参考:https://github.com/Cartucho/mAP本算法的其他信息如下表所示:项目说明参考论文RetinaFace: Single-stage Dense Face Localisation in the Wild使用框架Pytorch-1.4.0训练集WIDERFACE 中的 WIDER_train训练总epoch数100训练batch_size使用混合精度单卡训练,batch_size=16训练硬件及耗时单卡v100,O1混合精度,训练大约31小时测试集WIDERFACE 中的WIDER_val推理硬件及速度CPU 10.3s/pic ,GPU2080ti 0.5s/pic–1.5s/pic ,modelarts平台V100 GPU:3226张图片总共耗时24分钟(target_size = 1600,max_size = 2150)输入图像尺寸训练:1024*1024 推理:target_size = 1600,max_size = 2150(保证图片等比例缩放,使用最小一条边缩放到target_size的缩放比例;如果此时最大边超过了max_size,则使用最大边缩放到max_size的缩放比例)原论文准确率RetinaFace-R50 Easy 96.5, Medium 95.6, Hard 90.4本算法准确率RetinaFace-R50 Easy 95.52, Medium 94.43, Hard 90.062、训练2.1. 算法基本信息任务类型:人脸检测支持的框架引擎:PyTorch-1.4.0-python3.6算法输入:存储在OBS上的数据集,必须按照WIDERFACE 数据集的格式进行存储,详情请查看下文第4节案例指导WIDERFACE 预训练模型,在WIDERFACE 上的mAP是 Easy 95.52, Medium 94.43, Hard 90.06算法输出:用于Pytorch推理的pth模型,CPU推理速度:10.3s/pic GPU2080ti推理速度:0.5s/pic–1.5s/pic ,modelarts平台V100 GPU:3226张图片总共耗时24分钟(target_size = 1600,max_size = 2150)2.2. 训练参数说明名称默认值类型是否必填是否可修改描述data_urldata/WIDERFACE/WIDER_trainstring是是训练或者评估输入的数据集 (如果使用文件夹形式的数据,则填写该文件夹在OBS上的访问路径;如果使用zip压缩包形式的数据,则填写该压缩包的父目录在OBS上的访问路径)train_urloutput/string是是训练或者评估结果输出路径data_formatzipstring否是可选值zip(上传数据为zip压缩包)或者dir(上传数据为目录形式),压缩包和目录的具体格式请查看下面《ModelArts AI市场算法RetinaFace使用指导》所附连接networkresnet50string否是模型的backbone网络,可选值 mobile0.25 、resnet50 或者resnet152num_workers1int否是数据加载的worker数量lr0.001string否是训练的初始学习率momentum0.9string否是优化器的动量系数load_weightweight/best_model.pthstring否是可加载的预训练模型,当eval=True时,该参数为必填项 ;默认值是以resnet50为backbone在WiderFace数据集上的预训练模型,该预训练模型已经包含在本算法中weight_decay0.0005string否是优化器中的正则化权重衰减量gamma0.1string否是分段衰减学习率中每次学习率衰减的比例(new_lr=lr*gamma),仅当use_cosine_decay=False该参数有效img_size1024int否是训练数据的分辨率confidence_threshold0.02string否是nms时的置信度阈值nms_threshold0.4string否是nms时的IOU阈值num_gpu1int否是当num_gpu=1时,使用单个GPU训练;当num_gpu>1时,使用机器上所有的GPU进行训练batch_size16int否是训练时的batch_size,可根据GPU的显存进行调整epoch100int否是训练的epoch数量use_backboneTruestring否是训练时是否使用backbone网络在ImageNet数据集上的预训练参数use_mixedTruestring否是是否使用混合精度进行训练,使用混合精度一定程度上可以降低显存消耗,也可能提高训练速度amp_levelO1string否是混合精度的设置,可选值:O0,O1,O2,O3warmup_epoch10int否是训练开始时,使用warmup学习率的epoch数量,warmup_epoch=-1表示不使用warmupdecay150int否是分段衰减学习率的第一次学习率降低的epoch数,仅当use_cosine_decay=False时有效decay280int否是分段衰减学习率的第二次学习率降低的epoch数,仅当use_cosine_decay=False时有效use_cosine_decayTruestring否是是否使用余弦衰减学习率,设置为False则使用分段衰减学习率optimizersgdstring否是sgd 或者 adam优化器evalFalsestring否是eval=True,则进行评估;eval=False进行训练2.3. 训练输出文件训练完成后的输出文件如下:|- RetinaFace_Resnet50_Final.pth |- deploy_scripts |- model |- data |- layers |- models |- retinaface_utils |- config.json |- customize_service.py |- save_model.pth3. GPU/CPU推理元模型来源 选择 保存在OBS上的对应路径下的deploy_scripts文件夹。注意:推理配置文件model/config.json中的runtime字段为pytorch1.4-python3.6,表示该模型可同时在CPU或GPU运行。4. 案例指导本算法的详细使用方法,请查看《ModelArts AI Gallery算法RetinaFace使用指导》。交付交付方式华为云ModelArts交付区域华北-北京一、华北-北京四、华东-上海一、华南-广州、亚太-**