"vscode:/vscode.git/clone" did not exist on "1260282382b262c3a78af486ca260ed99c324489"
Commit c0705977 authored by wangkaixiong's avatar wangkaixiong 🚴🏼
Browse files

init

parent d3982d85
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>下载中心: &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="索引" href="genindex.html" />
<link rel="search" title="搜索" href="search.html" />
<link rel="next" title="1. 开发者社区 DCU 环境安装手册" href="install_dcu_on_os/base_install_intro.html" />
<link rel="prev" title="操作系统版本兼容列表" href="get_started.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id3"><strong>兼容性(必读)</strong></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">下载中心:</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/download.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="id1">
<h1>下载中心:<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
<ul class="simple">
<li><p><a class="reference external" href="https://cancon.hpccube.com:65024/6/main"><strong>驱动下载地址</strong></a> → latest 驱动→ rock-xxx-xxx.aio.run</p></li>
<li><p><a class="reference external" href="https://cancon.hpccube.com:65024/1/main"><strong>DTK下载地址</strong></a> → latest → 对应的操作系统 → DTK-version-OS-version-x86_64.tar.gz</p></li>
<li><p><a class="reference external" href="https://cancon.hpccube.com:65024/5/main"><strong>工具包地址(DCU直通、Kubernets插件、HyQual压力测试、工具包文档)</strong></a></p></li>
<li><p><a class="reference external" href="https://cancon.hpccube.com:65024/4/main/"><strong>DAS生态包下载地址</strong></a></p></li>
<li><p><a class="reference external" href="https://sourcefind.cn/#/main-page"><strong>光源地址</strong></a></p></li>
</ul>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="get_started.html" class="btn btn-neutral float-left" title="操作系统版本兼容列表" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
<a href="install_dcu_on_os/base_install_intro.html" class="btn btn-neutral float-right" title="1. 开发者社区 DCU 环境安装手册" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>问题一、纹理内存报错: &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="索引" href="genindex.html" />
<link rel="search" title="搜索" href="search.html" />
<link rel="prev" title="1 从NV的GPU迁移到DCU" href="NV_GPU_TO_DCU.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id3"><strong>兼容性(必读)</strong></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="download.html">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">CUDA 与 HIP 移植常见问题</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">问题一、纹理内存报错:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id2"><strong>解决方法:</strong></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#launch-bounds-256">问题二、 launch bounds (256) 报错:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id3">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#asm">问题三、asm 代码,内联汇编代码编译报错;</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id4">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#cuda-math-h">问题四、 cuda应用不转码适配找不到 math.h 头文件</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id5">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#pycuda-cu">问题五、使用开源的pycuda 无法编译 cu文件</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id6">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#cu">问题六、如何针对一个文件夹的cu代码进行转码</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id7">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#hip">问题七、hip转码后部分宏定义不规范不会被转换,可能导致出现问题:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id8">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#math-constants-h">问题八、 math_constants.h 找不到:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id9">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#hip-min">问题九、转码后部分hip核函数不识别 min:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id10">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#dtk-25-04">问题十、使用 DTK-25.04 之后的软件栈编译报头文件错:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id11">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#g-hipruntime-hipmallochipmemcpy">问题十一、g++ 编译 hipRuntime(hipMalloc、hipMemcpy)等接口代码,编译报错:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id12">解决方法:</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">问题一、纹理内存报错:</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/faq_cuda_hip.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<p>FAQ-cuda以及hip移植常见问题处理经验</p>
<section id="id1">
<h1>问题一、纹理内存报错:<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
<ol class="arabic simple">
<li><p>/data/wkx/develop/ppl.cv/src/ppl/cv/cuda/warp.hpp:31:8: error: no
template named ‘texture’</p></li>
<li><p>static texture&lt;float4, cudaTextureType2D,</p></li>
<li><p>^</p></li>
<li><p>/data/wkx/develop/ppl.cv/src/ppl/cv/cuda/warp.hpp/data/wkx/develop/ppl.cv/src/ppl/cv/cuda/warp.hpp::3131::88::</p></li>
<li><p>error: error: no template named ‘texture’no template named
‘texture’</p></li>
<li><ol class="arabic simple" start="7">
<li><p>static texture&lt;float4, cudaTextureType2D,</p></li>
</ol>
</li>
<li><p>static texture&lt;float4, cudaTextureType2D,</p></li>
</ol>
<section id="id2">
<h2><strong>解决方法:</strong><a class="headerlink" href="#id2" title="此标题的永久链接"></a></h2>
<p><strong>CUDA 的 texture 类型在较新版本(CUDA 12
及以上)中已被弃用或移除</strong>。旧版 CUDA(如 CUDA 10 或 11)中可以使用
texture&lt;T, …&gt; 这种全局变量声明方式,但在 <strong>CUDA 12+
中,这种语法不再支持</strong>,必须改用 <strong>cudaTextureObject_t +
cudaResourceDesc/cudaTextureDesc</strong> 的方式来创建纹理对象</p>
<p>使用DCU的cuda-11.8编译老旧代码即可顺利通过;</p>
</section>
</section>
<section id="launch-bounds-256">
<h1>问题二、 launch bounds (256) 报错:<a class="headerlink" href="#launch-bounds-256" title="此标题的永久链接"></a></h1>
<p>Launch params (1024, 1, 1) are larger than launch bounds (256) for
kernel _ZL12rms_norm_f32ILi1024EEvPKfPfif please add launch_bounds
to kernel define or use –gpu-max-threads-per-block recompile program !</p>
<section id="id3">
<h2>解决方法:<a class="headerlink" href="#id3" title="此标题的永久链接"></a></h2>
<p>解决方法1:</p>
<ol class="arabic simple">
<li><p>所有的核函数 __global__ 替换为 __global__
__launch_bounds__(1024)</p></li>
</ol>
<p>解决方法2:</p>
<p>nvcc或者hip编译增加: –gpu-max-threads-per-block=1024</p>
</section>
</section>
<section id="asm">
<h1>问题三、asm 代码,内联汇编代码编译报错;<a class="headerlink" href="#asm" title="此标题的永久链接"></a></h1>
<p><img alt="4XDLESZEAAQE6" src="media/image1.png" />{width=”5.763888888888889in”
height=”1.8840080927384077in”}</p>
<section id="id4">
<h2>解决方法:<a class="headerlink" href="#id4" title="此标题的永久链接"></a></h2>
<p>内嵌 PTX 功能开启需要主动加”-fnline-asm-ptx”选项。</p>
<p><img alt="LMVLGSZEABAFG" src="media/image2.png" />{width=”5.763888888888889in”
height=”2.996674321959755in”}</p>
</section>
</section>
<section id="cuda-math-h">
<h1>问题四、 cuda应用不转码适配找不到 math.h 头文件<a class="headerlink" href="#cuda-math-h" title="此标题的永久链接"></a></h1>
<p><img alt="CISLKSZEACABE" src="media/image3.png" />{width=”5.763888888888889in”
height=”1.9728018372703413in”}</p>
<section id="id5">
<h2>解决方法:<a class="headerlink" href="#id5" title="此标题的永久链接"></a></h2>
<p>cmake 编译中增加的 -isystem /usr/include 与 nvcc
编译器同时使用会存在冲突。</p>
<p>开启打印,关注编译过程的 完整头文件、库文件的依赖,去掉 -isystem
/usr/include 即可编译成功。</p>
<p>make VERBOSE=1 &lt;project&gt;</p>
</section>
</section>
<section id="pycuda-cu">
<h1>问题五、使用开源的pycuda 无法编译 cu文件<a class="headerlink" href="#pycuda-cu" title="此标题的永久链接"></a></h1>
<section id="id6">
<h2>解决方法:<a class="headerlink" href="#id6" title="此标题的永久链接"></a></h2>
<p>参考这个,更改下 compiler.py 适配 hip 编译;</p>
<p><a class="reference external" href="https://ontrack.hygon.cn/browse/CSD-10705">[https://ontrack.hygon.cn/browse/CSD-10705]{.underline}</a></p>
</section>
</section>
<section id="cu">
<h1>问题六、如何针对一个文件夹的cu代码进行转码<a class="headerlink" href="#cu" title="此标题的永久链接"></a></h1>
<p>详细可以参考:</p>
<p><img alt="ppt" src="media/image4.png" />{width=”0.1527777777777778in”
height=”0.1527777777777778in”}<a class="reference external" href="https://www.kdocs.cn/l/cmD2M59DD2vk">[DCU应用移植介绍-程顺延]{.underline}</a></p>
<section id="id7">
<h2>解决方法:<a class="headerlink" href="#id7" title="此标题的永久链接"></a></h2>
<ol class="arabic simple">
<li><p>hipconvertinplace-perl.sh &lt;cuda代码文件夹&gt;</p></li>
</ol>
<p>cuda 文件夹下原有的代码,转码后以 org-name.h/cu.prehip
形式存储在当前目录</p>
<p>由于要使用hip编译, 因此所有的 cu 后缀, 修改为 hip 或者 cpp;</p>
</section>
</section>
<section id="hip">
<h1>问题七、hip转码后部分宏定义不规范不会被转换,可能导致出现问题:<a class="headerlink" href="#hip" title="此标题的永久链接"></a></h1>
<section id="id8">
<h2>解决方法:<a class="headerlink" href="#id8" title="此标题的永久链接"></a></h2>
<ul class="simple">
<li><p>CublasHandleManager.h</p></li>
</ul>
<ol class="arabic simple">
<li><p>#if !defined(ROCM_SYMLINK_HIPBLAS_H)</p></li>
<li><p>#error hipblas.h must be included at the very top of any file
including CublasHandleManager.h</p></li>
<li><p>#endif</p></li>
<li><ol class="arabic simple" start="5">
<li><p>从 CUBLAS_V2_H_ 更改为 ROCM_SYMLINK_HIPBLAS_H</p></li>
</ol>
</li>
</ol>
</section>
</section>
<section id="math-constants-h">
<h1>问题八、 math_constants.h 找不到:<a class="headerlink" href="#math-constants-h" title="此标题的永久链接"></a></h1>
<section id="id9">
<h2>解决方法:<a class="headerlink" href="#id9" title="此标题的永久链接"></a></h2>
<p>DTK的cuda下有 math_constants.h 会被别的工程依赖;</p>
<p>hip下不存在对应的代码,可以直接拷贝 math_constants.h 到工程中使用;</p>
<p>math_constants.h 仅仅是一些数学值的定义;</p>
</section>
</section>
<section id="hip-min">
<h1>问题九、转码后部分hip核函数不识别 min:<a class="headerlink" href="#hip-min" title="此标题的永久链接"></a></h1>
<section id="id10">
<h2>解决方法:<a class="headerlink" href="#id10" title="此标题的永久链接"></a></h2>
<p>EddyMatrixKernels.cpp 中不支持 min 的问题解决</p>
<ol class="arabic simple">
<li><p>__global__ void QR(// Input</p></li>
<li><p>const float *K, // Row-first matrices to decompose</p></li>
<li><p>unsigned int m, // Number of rows of K</p></li>
<li><p>unsigned int n, // Number of columns of K</p></li>
<li><p>unsigned int nmat, // Number of matrices</p></li>
<li><p>// Output</p></li>
<li><p>float *Qt, // nmat mxm Q matrices</p></li>
<li><p>float *R) // nmat mxn R matrices</p></li>
<li><p>{</p></li>
<li><p>extern __shared__ float scratch[];</p></li>
<li><ol class="arabic simple" start="12">
<li><p>if (blockIdx.x &lt; nmat &amp;&amp; threadIdx.x &lt; m) {</p></li>
</ol>
</li>
<li><p>unsigned int id = threadIdx.x;</p></li>
<li><p>// unsigned int ntpm = min(m,blockDim.x); // Number of threads per
matrix</p></li>
<li><p>unsigned int ntpm = (m &lt; blockDim.x) ? m : blockDim.x;</p></li>
<li><p>float *v = scratch;</p></li>
<li><p>float *w = &amp;scratch[m];</p></li>
<li><p>const float *lK = &amp;K[blockIdx.x*m*n];</p></li>
<li><p>float *lQt = &amp;Qt[blockIdx.x*m*m];</p></li>
<li><p>float *lR = &amp;R[blockIdx.x*m*n];</p></li>
<li><p>qr_single(lK,m,n,v,w,id,ntpm,lQt,lR);</p></li>
<li><p>}</p></li>
<li><p>return;</p></li>
<li><p>}</p></li>
</ol>
</section>
</section>
<section id="dtk-25-04">
<h1>问题十、使用 DTK-25.04 之后的软件栈编译报头文件错:<a class="headerlink" href="#dtk-25-04" title="此标题的永久链接"></a></h1>
<section id="id11">
<h2>解决方法:<a class="headerlink" href="#id11" title="此标题的永久链接"></a></h2>
<p>尽量尝试使用 -std=c++17-std=c++14</p>
</section>
</section>
<section id="g-hipruntime-hipmallochipmemcpy">
<h1>问题十一、g++ 编译 hipRuntime(hipMalloc、hipMemcpy)等接口代码,编译报错:<a class="headerlink" href="#g-hipruntime-hipmallochipmemcpy" title="此标题的永久链接"></a></h1>
<section id="id12">
<h2>解决方法:<a class="headerlink" href="#id12" title="此标题的永久链接"></a></h2>
<p>编译时增加宏定义,</p>
<p>__HIP_PLATFORM_AMD__</p>
<p>链接依赖增加 -l galaxyhip</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="NV_GPU_TO_DCU.html" class="btn btn-neutral float-left" title="1 从NV的GPU迁移到DCU" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>索引 &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>
<script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js"></script>
<script type="module">import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@11.12.1/dist/mermaid.esm.min.mjs";
const initStyles = () => {
const defaultStyle = document.createElement('style');
defaultStyle.textContent = `pre.mermaid {
/* Same as .mermaid-container > pre */
display: block;
width: 100%;
}
pre.mermaid > svg {
/* Same as .mermaid-container > pre > svg */
height: 500px;
width: 100%;
max-width: 100% !important;
}`;
document.head.appendChild(defaultStyle);
const fullscreenStyle = document.createElement('style');
fullscreenStyle.textContent = `.mermaid-container {
display: flex;
flex-direction: row;
width: 100%;
}
.mermaid-container > pre {
display: block;
width: 100%;
}
.mermaid-container > pre > svg {
height: 500px;
width: 100%;
max-width: 100% !important;
}
.mermaid-fullscreen-btn {
width: 28px;
height: 28px;
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(0, 0, 0, 0.3);
border-radius: 4px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
font-size: 14px;
line-height: 1;
padding: 0;
color: #333;
}
.mermaid-fullscreen-btn:hover {
opacity: 100% !important;
background: rgba(255, 255, 255, 1);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
transform: scale(1.1);
}
.mermaid-fullscreen-btn.dark-theme {
background: rgba(50, 50, 50, 0.95);
border: 1px solid rgba(255, 255, 255, 0.3);
color: #e0e0e0;
}
.mermaid-fullscreen-btn.dark-theme:hover {
background: rgba(60, 60, 60, 1);
box-shadow: 0 3px 10px rgba(255, 255, 255, 0.2);
}
.mermaid-fullscreen-modal {
display: none;
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 95vw;
height: 100vh;
background: rgba(255, 255, 255, 0.98);
z-index: 9999;
padding: 20px;
overflow: auto;
}
.mermaid-fullscreen-modal.dark-theme {
background: rgba(0, 0, 0, 0.98);
}
.mermaid-fullscreen-modal.active {
display: flex;
align-items: center;
justify-content: center;
}
.mermaid-container-fullscreen {
position: relative;
width: 95vw;
height: 90vh;
max-width: 95vw;
max-height: 90vh;
background: white;
border-radius: 8px;
padding: 20px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
overflow: auto;
display: flex;
align-items: center;
justify-content: center;
}
.mermaid-container-fullscreen.dark-theme {
background: #1a1a1a;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
}
.mermaid-container-fullscreen pre.mermaid {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.mermaid-container-fullscreen .mermaid svg {
height: 100% !important;
width: 100% !important;
cursor: grab;
}
.mermaid-fullscreen-close {
position: fixed !important;
top: 20px !important;
right: 20px !important;
width: 40px;
height: 40px;
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 50%;
cursor: pointer;
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
transition: all 0.2s;
font-size: 24px;
line-height: 1;
color: #333;
}
.mermaid-fullscreen-close:hover {
background: white;
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);
transform: scale(1.1);
}
.mermaid-fullscreen-close.dark-theme {
background: rgba(50, 50, 50, 0.95);
border: 1px solid rgba(255, 255, 255, 0.2);
color: #e0e0e0;
}
.mermaid-fullscreen-close.dark-theme:hover {
background: rgba(60, 60, 60, 1);
box-shadow: 0 6px 16px rgba(255, 255, 255, 0.2);
}
.mermaid-fullscreen-modal .mermaid-fullscreen-btn {
display: none !important;
}`;
document.head.appendChild(fullscreenStyle);
}
// Detect if page has dark background
const isDarkTheme = () => {
// We use a set of heuristics:
// 1. Check for common dark mode classes or attributes
// 2. Check computed background color brightness
if (document.documentElement.classList.contains('dark') ||
document.documentElement.getAttribute('data-theme') === 'dark' ||
document.body.classList.contains('dark') ||
document.body.getAttribute('data-theme') === 'dark') {
// console.log("Dark theme detected via class/attribute");
return true;
}
if (document.documentElement.classList.contains('light') ||
document.documentElement.getAttribute('data-theme') === 'light' ||
document.body.classList.contains('light') ||
document.body.getAttribute('data-theme') === 'light') {
// console.log("Light theme detected via class/attribute");
return false;
}
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
// console.log("Dark theme detected via prefers-color-scheme");
return true;
}
const bgColor = window.getComputedStyle(document.body).backgroundColor;
const match = bgColor.match(/rgb\((\d+),\s*(\d+),\s*(\d+)/);
if (match) {
const r = parseInt(match[1]);
const g = parseInt(match[2]);
const b = parseInt(match[3]);
const brightness = (r * 299 + g * 587 + b * 114) / 1000;
// console.log("Background color brightness:", brightness);
return brightness < 128;
}
// console.log("No dark or light theme detected, defaulting to light theme");
return false;
};
let darkTheme = isDarkTheme();
let modal = null;
let modalContent = null;
let previousScrollOffset = [window.scrollX, window.scrollY];
const runMermaid = async (rerun) => {
console.log("Running mermaid diagrams, rerun =", rerun);
// clear all existing mermaid charts
let all_mermaids = document.querySelectorAll(".mermaid");
if (rerun) {
all_mermaids.forEach((el) => {
if(!el.hasAttribute("data-original-code")) {
// store original code
// console.log(`Storing original code for first run: `, el.innerHTML);
el.setAttribute('data-original-code', el.innerHTML);
}
if(el.getAttribute("data-processed") === "true") {
// remove and restore original
el.removeAttribute("data-processed");
// console.log(`Restoring original code for re-run: `, el.getAttribute('data-original-code'));
el.innerHTML = el.getAttribute('data-original-code');
} else {
// store original code
// console.log(`Storing original code for re-run: `, el.innerHTML);
el.setAttribute('data-original-code', el.innerHTML);
}
});
await mermaid.run();
}
all_mermaids = document.querySelectorAll(".mermaid");
const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
if ("False" === "True") {
const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
if(mermaids_to_add_zoom > 0) {
var svgs = d3.selectAll("");
if(all_mermaids.length !== mermaids_processed.length) {
setTimeout(() => runMermaid(false), 200);
return;
} else if(svgs.size() !== mermaids_to_add_zoom) {
setTimeout(() => runMermaid(false), 200);
return;
} else {
svgs.each(function() {
var svg = d3.select(this);
svg.html("<g class='wrapper'>" + svg.html() + "</g>");
var inner = svg.select("g");
var zoom = d3.zoom().on("zoom", function(event) {
inner.attr("transform", event.transform);
});
svg.call(zoom);
});
}
}
} else if(all_mermaids.length !== mermaids_processed.length) {
// Wait for mermaid to process all diagrams
setTimeout(() => runMermaid(false), 200);
return;
}
// Stop here if not adding fullscreen capability
if ("True" !== "True") return;
if (modal !== null ) {
// Destroy existing modal
modal.remove();
modal = null;
modalContent = null;
}
modal = document.createElement('div');
modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
modal.setAttribute('role', 'dialog');
modal.setAttribute('aria-modal', 'true');
modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
modal.innerHTML = `
<button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
<div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
`;
document.body.appendChild(modal);
modalContent = modal.querySelector('.mermaid-container-fullscreen');
const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
const closeModal = () => {
modal.classList.remove('active');
modalContent.innerHTML = '';
document.body.style.overflow = ''
window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
};
closeBtn.addEventListener('click', closeModal);
modal.addEventListener('click', (e) => {
if (e.target === modal) closeModal();
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && modal.classList.contains('active')) {
closeModal();
}
});
document.querySelectorAll('.mermaid').forEach((mermaidDiv) => {
if (mermaidDiv.parentNode.classList.contains('mermaid-container') ||
mermaidDiv.closest('.mermaid-fullscreen-modal')) {
// Already processed, adjust button class if needed
const existingBtn = mermaidDiv.parentNode.querySelector('.mermaid-fullscreen-btn');
if (existingBtn) {
existingBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
}
return;
}
const container = document.createElement('div');
container.className = 'mermaid-container';
mermaidDiv.parentNode.insertBefore(container, mermaidDiv);
container.appendChild(mermaidDiv);
const fullscreenBtn = document.createElement('button');
fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
fullscreenBtn.textContent = '';
fullscreenBtn.style.opacity = '50%';
// Calculate dynamic position based on diagram's margin and padding
const diagramStyle = window.getComputedStyle(mermaidDiv);
const marginTop = parseFloat(diagramStyle.marginTop) || 0;
const marginRight = parseFloat(diagramStyle.marginRight) || 0;
const paddingTop = parseFloat(diagramStyle.paddingTop) || 0;
const paddingRight = parseFloat(diagramStyle.paddingRight) || 0;
fullscreenBtn.style.top = `${marginTop + paddingTop + 4}px`;
fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
fullscreenBtn.addEventListener('click', () => {
previousScrollOffset = [window.scroll, window.scrollY];
const clone = mermaidDiv.cloneNode(true);
modalContent.innerHTML = '';
modalContent.appendChild(clone);
const svg = clone.querySelector('svg');
if (svg) {
svg.removeAttribute('width');
svg.removeAttribute('height');
svg.style.width = '100%';
svg.style.height = 'auto';
svg.style.maxWidth = '100%';
svg.style.sdisplay = 'block';
if ("False" === "True") {
setTimeout(() => {
const g = svg.querySelector('g');
if (g) {
var svgD3 = d3.select(svg);
svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
var inner = svgD3.select("g");
var zoom = d3.zoom().on("zoom", function(event) {
inner.attr("transform", event.transform);
});
svgD3.call(zoom);
}
}, 100);
}
}
modal.classList.add('active');
document.body.style.overflow = 'hidden';
});
container.appendChild(fullscreenBtn);
});
};
const load = async () => {
initStyles();
await runMermaid(true);
const reRunIfThemeChanges = async () => {
const newDarkTheme = isDarkTheme();
if (newDarkTheme !== darkTheme) {
darkTheme = newDarkTheme;
console.log("Theme change detected, re-running mermaid with", darkTheme ? "dark" : "default", "theme");
await mermaid.initialize(
{...JSON.parse(
`{"startOnLoad": false}`
),
...{ darkMode: darkTheme, theme: darkTheme ? 'dark' : 'default' },
}
);
await runMermaid(true);
}
};
// Update theme classes when theme changes
const themeObserver = new MutationObserver(reRunIfThemeChanges);
themeObserver.observe(document.documentElement, {
attributes: true,
attributeFilter: ['class', 'style', 'data-theme']
});
themeObserver.observe(document.body, {
attributes: true,
attributeFilter: ['class', 'style', 'data-theme']
});
};
console.log("Initializing mermaid with", darkTheme ? "dark" : "default", "theme");
mermaid.initialize(
{...JSON.parse(
`{"startOnLoad": false}`
),
...{ darkMode: darkTheme, theme: darkTheme ? 'dark' : 'default' },
}
);
window.addEventListener("load", load);
window.runMermaid = runMermaid;</script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="索引" href="#" />
<link rel="search" title="搜索" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id3"><strong>兼容性(必读)</strong></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="download.html">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">CUDA 与 HIP 移植常见问题</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html">问题一、纹理内存报错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#launch-bounds-256">问题二、 launch bounds (256) 报错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#asm">问题三、asm 代码,内联汇编代码编译报错;</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#cuda-math-h">问题四、 cuda应用不转码适配找不到 math.h 头文件</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#pycuda-cu">问题五、使用开源的pycuda 无法编译 cu文件</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#cu">问题六、如何针对一个文件夹的cu代码进行转码</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#hip">问题七、hip转码后部分宏定义不规范不会被转换,可能导致出现问题:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#math-constants-h">问题八、 math_constants.h 找不到:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#hip-min">问题九、转码后部分hip核函数不识别 min:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#dtk-25-04">问题十、使用 DTK-25.04 之后的软件栈编译报头文件错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#g-hipruntime-hipmallochipmemcpy">问题十一、g++ 编译 hipRuntime(hipMalloc、hipMemcpy)等接口代码,编译报错:</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">索引</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1 id="index">索引</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>操作系统版本兼容列表 &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="索引" href="genindex.html" />
<link rel="search" title="搜索" href="search.html" />
<link rel="next" title="下载中心:" href="download.html" />
<link rel="prev" title="欢迎来到 DCU 的环境安装教程!" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="#id3"><strong>兼容性(必读)</strong></a><ul>
<li class="toctree-l2"><a class="reference internal" href="#dtk">加速卡与DTK的兼容性</a></li>
<li class="toctree-l2"><a class="reference internal" href="#dtkdas-ai">DTK和DAS(AI生态包)兼容性</a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="download.html">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">操作系统版本兼容列表</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/get_started.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="id1">
<h1>操作系统版本兼容列表<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h1>
<p><strong>注意</strong>:</p>
<blockquote>
<div><p>使用<code class="docutils literal notranslate"><span class="pre">iso</span></code>镜像安装操作系统时,请勿允许任何操作系统的更新行为, 否则会带来内核版本的升级,导致安装失败; <br>
可参考 <code class="docutils literal notranslate"><span class="pre">构建DCU基础环境</span></code><code class="docutils literal notranslate"><span class="pre">2.3\3.2</span></code> 下的常用操作系统安装步骤之中的锁核操作;</p>
</div></blockquote>
<p><strong>操作系统</strong>:</p>
<p>开发者社区推荐操作系统:</p>
<table border="1" class="docutils">
<thead>
<tr>
<th>操作系统</th>
<th>版本</th>
<th>内核</th>
</tr>
</thead>
<tbody>
<tr>
<td>Centos</td>
<td>7.6</td>
<td>3.10.0-957.el7.x86_64</td>
</tr>
<tr>
<td>Centos</td>
<td>8.5</td>
<td>4.18.0-348.el8.x86_64</td>
</tr>
<tr>
<td>Rocky</td>
<td>8.6</td>
<td>4.18.0-348.el8.x86_64</td>
</tr>
<tr>
<td>Rocky</td>
<td>9.2</td>
<td>4.18.0-348.el8.x86_64</td>
</tr>
<tr>
<td>Ubuntu</td>
<td>20.04.1</td>
<td>5.4.0-42-generic</td>
</tr>
<tr>
<td>Ubuntu</td>
<td>22.04</td>
<td>5.15.0-25-generic</td>
</tr>
<tr>
<td>NFS</td>
<td>3.2</td>
<td>3.10.0-957.nfs.5.x86_64</td>
</tr>
<tr>
<td>NFS</td>
<td>4.0</td>
<td>4.19.113-14.1.nfs4.x86_64</td>
</tr>
<tr>
<td>NFS</td>
<td>4.0-Desktop</td>
<td>5.4.0-49-generic</td>
</tr>
<tr>
<td>UOS</td>
<td>1021e</td>
<td>4.19.90-2109.1.0.0108.up2.uel20.x86_64</td>
</tr>
<tr>
<td>Kylin</td>
<td>v10 SP2</td>
<td>4.19.90-24.4.v2101.ky10.x86_64</td>
</tr>
<tr>
<td>Anolis</td>
<td>8.4</td>
<td>4.19.91-23.4.an8.x86_64</td>
</tr>
<tr>
<td>Anolis</td>
<td>8.6</td>
<td>4.19.91-26.an8.x86_64</td>
</tr>
<tr>
<td>openEuler</td>
<td>22.03</td>
<td>5.10.0-60.18.0.50.oe2203.x86_64</td>
</tr>
<tr>
<td>BCLinux</td>
<td>8.2</td>
<td>4.19.0-240.23.11.el8_2.bclinux.x86_64</td>
</tr>
</tbody>
</table>
<p><a class="reference external" href="https://docs.qq.com/sheet/DVHdTZHB3RVZOVENI?tab=dklqmf">操作系统兼容性列表包含(兼容性等级等)</a></p>
<hr class="docutils" />
</section>
<section id="dcu">
<h1>支持的DCU型号<a class="headerlink" href="#dcu" title="此标题的永久链接"></a></h1>
<ul class="simple">
<li><p>Z100</p></li>
<li><p>Z100L</p></li>
<li><p>K100</p></li>
<li><p>K100_AI</p></li>
</ul>
</section>
<section id="id2">
<h1>DCU软件介绍:<a class="headerlink" href="#id2" title="此标题的永久链接"></a></h1>
<ul>
<li><p><strong>DTK</strong>:</p>
<blockquote>
<div><p>DCU加速卡软件工具包:包括函数库、编译环境、管理工具、性能分析工具等。</p>
</div></blockquote>
</li>
<li><p><strong>DAS (DCU AI Software Stack)</strong>:</p>
<blockquote>
<div><p>目前主要以python的whl形式在光合开发者社区进行发布。</p>
</div></blockquote>
<ul class="simple">
<li><p>算子层</p></li>
<li><p>框架层</p></li>
<li><p>扩展组件层</p></li>
</ul>
</li>
</ul>
</section>
<section id="id3">
<h1><strong>兼容性(必读)</strong><a class="headerlink" href="#id3" title="此标题的永久链接"></a></h1>
<section id="dtk">
<h2>加速卡与DTK的兼容性<a class="headerlink" href="#dtk" title="此标题的永久链接"></a></h2>
<table border="1" class="docutils">
<thead>
<tr>
<th>DCU猩红</th>
<th>DTK版本</th>
<th>注意</th>
</tr>
</thead>
<tbody>
<tr>
<td>Z100</td>
<td>DTK &gt;=21.04</td>
<td>推荐使用 DTK &gt;= 23.10</td>
</tr>
<tr>
<td>Z100L</td>
<td>DTK &gt;=21.04</td>
<td>推荐使用 DTK &gt;= 23.10</td>
</tr>
<tr>
<td>K100</td>
<td>DTK &gt;=23.10</td>
<td></td>
</tr>
<tr>
<td>K100-AI</td>
<td>DTK &gt;=24.04</td>
<td></td>
</tr>
</tbody>
</table>
</section>
<section id="dtkdas-ai">
<h2>DTK和DAS(AI生态包)兼容性<a class="headerlink" href="#dtkdas-ai" title="此标题的永久链接"></a></h2>
<table border="1" class="docutils">
<thead>
<tr>
<th>DTK版本</th>
<th>DAS版本</th>
<th>注意</th>
</tr>
</thead>
<tbody>
<tr>
<td>DTK-24.04.1</td>
<td>DAS1.1</td>
<td>见下述 DAS1.1 使用注意</td>
</tr>
<tr>
<td>DTK-24.04</td>
<td>DAS1.0</td>
<td></td>
</tr>
</tbody>
</table>
<p><strong>注意:</strong></p>
<blockquote>
<div><p>不兼容的版本可能出现严重的环境问题</p>
</div></blockquote>
<hr class="docutils" />
<ul class="simple">
<li><p>DAS1.1 使用注意:</p>
<ul>
<li><p>不支持操作系统<code class="docutils literal notranslate"><span class="pre">ubuntu18.04</span></code>, <code class="docutils literal notranslate"><span class="pre">Centos7.6</span></code><code class="docutils literal notranslate"><span class="pre">glibc</span> <span class="pre">&lt;=</span> <span class="pre">2.31</span></code>的操作系统</p></li>
<li><p>glib 版本查看方式: <code class="docutils literal notranslate"><span class="pre">ldd</span> <span class="pre">--version</span></code></p></li>
<li><p>如果遇到问题, 建议通过 docker 使用 glibc 高版本的容器系统;</p></li>
</ul>
</li>
</ul>
<hr class="docutils" />
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="index.html" class="btn btn-neutral float-left" title="欢迎来到 DCU 的环境安装教程!" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
<a href="download.html" class="btn btn-neutral float-right" title="下载中心:" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>欢迎来到 DCU 的环境安装教程! &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="索引" href="genindex.html" />
<link rel="search" title="搜索" href="search.html" />
<link rel="next" title="操作系统版本兼容列表" href="get_started.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="#" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id3"><strong>兼容性(必读)</strong></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="download.html">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">CUDA 与 HIP 移植常见问题</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html">问题一、纹理内存报错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#launch-bounds-256">问题二、 launch bounds (256) 报错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#asm">问题三、asm 代码,内联汇编代码编译报错;</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#cuda-math-h">问题四、 cuda应用不转码适配找不到 math.h 头文件</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#pycuda-cu">问题五、使用开源的pycuda 无法编译 cu文件</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#cu">问题六、如何针对一个文件夹的cu代码进行转码</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#hip">问题七、hip转码后部分宏定义不规范不会被转换,可能导致出现问题:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#math-constants-h">问题八、 math_constants.h 找不到:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#hip-min">问题九、转码后部分hip核函数不识别 min:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#dtk-25-04">问题十、使用 DTK-25.04 之后的软件栈编译报头文件错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#g-hipruntime-hipmallochipmemcpy">问题十一、g++ 编译 hipRuntime(hipMalloc、hipMemcpy)等接口代码,编译报错:</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="#" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">欢迎来到 DCU 的环境安装教程!</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/index.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="dcu">
<h1>欢迎来到 DCU 的环境安装教程!<a class="headerlink" href="#dcu" title="此标题的永久链接"></a></h1>
<section id="id1">
<h2>资源下载:<a class="headerlink" href="#id1" title="此标题的永久链接"></a></h2>
<ul class="simple">
<li><p><a class="reference external" href="https://cancon.hpccube.com:65024/6/main">驱动下载</a> → latest 驱动 → rock-xxx-xxx.aio.run</p></li>
<li><p><a class="reference external" href="https://cancon.hpccube.com:65024/1/main">DTK下载</a> → latest → 对应的操作系统 → DTK-version-OS-version-x86_64.tar.gz</p></li>
<li><p><a class="reference external" href="https://cancon.hpccube.com:65024/5/main">工具包地址(DCU直通、Kubernets插件、HyQual压力测试、工具包文档)</a></p></li>
<li><p><a class="reference external" href="https://cancon.hpccube.com:65024/4/main/">DAS生态包下载</a></p></li>
<li><p><a class="reference external" href="https://sourcefind.cn/#/main-page">光源地址</a></p></li>
</ul>
</section>
<section id="id4">
<h2>文档<a class="headerlink" href="#id4" title="此标题的永久链接"></a></h2>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id3"><strong>兼容性(必读)</strong></a><ul>
<li class="toctree-l2"><a class="reference internal" href="get_started.html#dtk">加速卡与DTK的兼容性</a></li>
<li class="toctree-l2"><a class="reference internal" href="get_started.html#dtkdas-ai">DTK和DAS(AI生态包)兼容性</a></li>
</ul>
</li>
</ul>
</div>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="download.html">下载中心:</a></li>
</ul>
</div>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
</div>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Anaconda_Docker.html#anaconda">1.1. 安装Anaconda;</a></li>
<li class="toctree-l2"><a class="reference internal" href="Anaconda_Docker.html#dcupytorchresnet50">1.2. 使用DCU在Pytorch推理Resnet50分类</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Anaconda_Docker.html#docker">2.1. 安装Docker</a></li>
<li class="toctree-l2"><a class="reference internal" href="Anaconda_Docker.html#id1">2.2. 启动容器</a></li>
<li class="toctree-l2"><a class="reference internal" href="Anaconda_Docker.html#id5">2.3. 基于容器执行resetnet50分类的推理代码</a></li>
</ul>
</li>
</ul>
</div>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Hy-SMI.html">hy-smi 使用介绍</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Hy-SMI.html#id1">hy-smi 命令输出介绍</a></li>
<li class="toctree-l2"><a class="reference internal" href="Hy-SMI.html#id2">常用用法:</a></li>
<li class="toctree-l2"><a class="reference internal" href="Hy-SMI.html#id3">更多用法</a></li>
</ul>
</li>
</ul>
</div>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a><ul>
<li class="toctree-l2"><a class="reference internal" href="NV_GPU_TO_DCU.html#dcu">1.1. 构建DCU基础环境</a></li>
<li class="toctree-l2"><a class="reference internal" href="NV_GPU_TO_DCU.html#id1">1.2. 替换深度学习算法包</a></li>
<li class="toctree-l2"><a class="reference internal" href="NV_GPU_TO_DCU.html#id2">1.3. DCU 适配案例:</a></li>
</ul>
</li>
</ul>
</div>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">CUDA 与 HIP 移植常见问题</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html">问题一、纹理内存报错:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id2"><strong>解决方法:</strong></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#launch-bounds-256">问题二、 launch bounds (256) 报错:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id3">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#asm">问题三、asm 代码,内联汇编代码编译报错;</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id4">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#cuda-math-h">问题四、 cuda应用不转码适配找不到 math.h 头文件</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id5">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#pycuda-cu">问题五、使用开源的pycuda 无法编译 cu文件</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id6">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#cu">问题六、如何针对一个文件夹的cu代码进行转码</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id7">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#hip">问题七、hip转码后部分宏定义不规范不会被转换,可能导致出现问题:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id8">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#math-constants-h">问题八、 math_constants.h 找不到:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id9">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#hip-min">问题九、转码后部分hip核函数不识别 min:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id10">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#dtk-25-04">问题十、使用 DTK-25.04 之后的软件栈编译报头文件错:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id11">解决方法:</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#g-hipruntime-hipmallochipmemcpy">问题十一、g++ 编译 hipRuntime(hipMalloc、hipMemcpy)等接口代码,编译报错:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="faq_cuda_hip.html#id12">解决方法:</a></li>
</ul>
</li>
</ul>
</div>
</section>
</section>
<section id="id5">
<h1>索引与表格<a class="headerlink" href="#id5" title="此标题的永久链接"></a></h1>
<ul class="simple">
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">索引</span></a></p></li>
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">搜索页面</span></a></p></li>
</ul>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="get_started.html" class="btn btn-neutral float-right" title="操作系统版本兼容列表" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>1. 开发者社区 DCU 环境安装手册 &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="2 DCU基础环境完整教程-Centos7.6:" href="centos.html" />
<link rel="prev" title="下载中心:" href="../download.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#id3"><strong>兼容性(必读)</strong></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../download.html">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1"><a class="reference internal" href="ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">1. 开发者社区 DCU 环境安装手册</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/install_dcu_on_os/base_install_intro.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="dcu">
<h1>1. 开发者社区 DCU 环境安装手册<a class="headerlink" href="#dcu" title="此标题的永久链接"></a></h1>
<p>该文档主要针对 DCU 加速卡,提供基础软件环境安装部署以及基础测试的参考指导。</p>
<p>建议参考如下文档进行安装DCU基础环境:</p>
<p><a class="reference external" href="https://cancon.hpccube.com:65024/1/main/latest/Document"><strong>点击,进入开发者社区环境搭建文档</strong></a> → DTK 开发环境安装部署手册.pdf</p>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="../download.html" class="btn btn-neutral float-left" title="下载中心:" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
<a href="centos.html" class="btn btn-neutral float-right" title="2 DCU基础环境完整教程-Centos7.6:" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>2 DCU基础环境完整教程-Centos7.6: &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="3 DCU基础环境完整教程-ubuntu:" href="ubuntu.html" />
<link rel="prev" title="1. 开发者社区 DCU 环境安装手册" href="base_install_intro.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#id3"><strong>兼容性(必读)</strong></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../download.html">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#root">2.1 <strong>非root用户安装注意事项:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id1">2.2. <strong>操作系统设置</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">2.3. <strong>关闭内核自动更新:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#yum">2.4. <strong>更新yum源:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">2.5. <strong>安装相关依赖:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">2.6. <strong>校验系统配置:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id5">2.7. <strong>安装驱动:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#dtk">2.8. <strong>安装DTK:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id6">2.9. <strong>验证安装结果:</strong></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/install_dcu_on_os/centos.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="dcu-centos7-6">
<h1><strong>2 DCU基础环境完整教程-Centos7.6</strong>:<a class="headerlink" href="#dcu-centos7-6" title="此标题的永久链接"></a></h1>
<section id="root">
<h2>2.1 <strong>非root用户安装注意事项:</strong><a class="headerlink" href="#root" title="此标题的永久链接"></a></h2>
<ul>
<li><p>确保非root用户已加入<code class="docutils literal notranslate"><span class="pre">video</span></code>组,以便能够使用DCU。</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 对于有sudo权限的非root用户</span>
sudo<span class="w"> </span>usermod<span class="w"> </span>-aG<span class="w"> </span>video<span class="w"> </span><span class="nv">$USER</span>
<span class="c1"># 对于无sudo权限的用户,由root执行</span>
usermod<span class="w"> </span>-aG<span class="w"> </span>video<span class="w"> </span>&lt;userid&gt;
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id1">
<h2>2.2. <strong>操作系统设置</strong><a class="headerlink" href="#id1" title="此标题的永久链接"></a></h2>
<p>确保启动项中不包含nomodeset选项,如果内核以nomodeset选项启动,则驱动可能无法成功加载。</p>
<ul>
<li><p>需要保证系统纯净,命令行运行 <code class="docutils literal notranslate"><span class="pre">lsmod</span> <span class="pre">|</span> <span class="pre">grep</span> <span class="pre">amdgpu</span></code> 为空</p></li>
<li><p>关闭 selinux(可选)</p>
<p>修改<code class="docutils literal notranslate"><span class="pre">/etc/selinux/config</span></code>,设置<code class="docutils literal notranslate"><span class="pre">SELINUX=disabled</span></code></p>
</li>
<li><p>关闭 firewalld(可选)</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>systemctl<span class="w"> </span>stop<span class="w"> </span>firewalld
systemctl<span class="w"> </span>disable<span class="w"> </span>firewalld
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id2">
<h2>2.3. <strong>关闭内核自动更新:</strong><a class="headerlink" href="#id2" title="此标题的永久链接"></a></h2>
<ul>
<li><p>编辑<code class="docutils literal notranslate"><span class="pre">/etc/yum.conf</span></code>,在<code class="docutils literal notranslate"><span class="pre">[main]</span></code>部分添加:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">exclude</span><span class="o">=</span><span class="n">kernel</span><span class="o">*</span>
<span class="n">exclude</span><span class="o">=</span><span class="n">centos</span><span class="o">-</span><span class="n">release</span><span class="o">*</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="yum">
<h2>2.4. <strong>更新yum源:</strong><a class="headerlink" href="#yum" title="此标题的永久链接"></a></h2>
<ul>
<li><p>替换为中科大源,针对CentOS 7.6的示例, (注意使用双引号):</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>sed<span class="w"> </span>-e<span class="w"> </span><span class="s2">&quot;s|^mirrorlist=|#mirrorlist=|g&quot;</span><span class="w"> </span>-e<span class="w"> </span><span class="s2">&quot;s|^#baseurl=http://mirror.centos.org/centos/\$releasever|baseurl=https://mirrors.ustc.edu.cn/centos-vault/</span><span class="nv">$minorver</span><span class="s2">|g&quot;</span><span class="w"> </span>-i.bak<span class="w"> </span>/etc/yum.repos.d/CentOS-*.repo
</pre></div>
</div>
</li>
<li><p>替换 <code class="docutils literal notranslate"><span class="pre">CentOS-CR.repo</span></code> 并且 <code class="docutils literal notranslate"><span class="pre">enable</span></code>(安装python3需要)</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>sed<span class="w"> </span>-i<span class="w"> </span><span class="s2">&quot;s|^baseurl=http://mirror.centos.org/centos/\$releasever|baseurl=https://mirrors.ustc.edu.cn/centos-vault/</span><span class="nv">$minorver</span><span class="s2">|g;s|enabled=0|enabled=1|g&quot;</span><span class="w"> </span>/etc/yum.repos.d/CentOS-CR.repo
</pre></div>
</div>
</li>
<li><p>对 Centos7 配置 SCLo 源(安装devtoolset需要):</p>
<p>编辑 <code class="docutils literal notranslate"><span class="pre">/etc/yum.repos.d/CentOS-SCLo.repo</span></code> 配置文件;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>vi<span class="w"> </span>/etc/yum.repos.d/CentOS-SCLo.repo
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">/etc/yum.repos.d/CentOS-SCLo.repo</span></code> 写入以下内容, <code class="docutils literal notranslate"><span class="pre">Esc</span> <span class="pre">+</span> <span class="pre">:wq</span></code> 保存退出</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="o">[</span>centos-sclo-sclo<span class="o">]</span>
<span class="nv">name</span><span class="o">=</span>CentOS-7<span class="w"> </span>-<span class="w"> </span>SCLo<span class="w"> </span>sclo
<span class="nv">baseurl</span><span class="o">=</span>https://mirrors.ustc.edu.cn/centos/7/sclo/<span class="nv">$basearch</span>/sclo/
<span class="nv">gpgcheck</span><span class="o">=</span><span class="m">0</span>
<span class="nv">enabled</span><span class="o">=</span><span class="m">1</span>
<span class="nv">gpgkey</span><span class="o">=</span>file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
<span class="o">[</span>centos-sclo-rh<span class="o">]</span>
<span class="nv">name</span><span class="o">=</span>CentOS-7<span class="w"> </span>-<span class="w"> </span>SCLo<span class="w"> </span>rh
<span class="nv">baseurl</span><span class="o">=</span>https://mirrors.ustc.edu.cn/centos/7/sclo/<span class="nv">$basearch</span>/rh/
<span class="nv">gpgcheck</span><span class="o">=</span><span class="m">0</span>
<span class="nv">enabled</span><span class="o">=</span><span class="m">1</span>
<span class="nv">gpgkey</span><span class="o">=</span>file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
</pre></div>
</div>
</li>
<li><p>对 Centos7 配置 epel 源(安装cmake3需要)</p>
<p>编辑 <code class="docutils literal notranslate"><span class="pre">/etc/yum.repos.d/epel-7.repo</span></code> 配置文件;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>vi<span class="w"> </span>/etc/yum.repos.d/epel-7.repo
</pre></div>
</div>
<p>在/etc/yum.repos.d/epel-7.repo写入以下内容, <code class="docutils literal notranslate"><span class="pre">Esc</span> <span class="pre">+</span> <span class="pre">:wq</span></code> 保存退出;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="o">[</span>epel<span class="o">]</span>
<span class="nv">name</span><span class="o">=</span>Extra<span class="w"> </span>Packages<span class="w"> </span><span class="k">for</span><span class="w"> </span>Enterprise<span class="w"> </span>Linux<span class="w"> </span><span class="m">7</span><span class="w"> </span>-<span class="w"> </span><span class="nv">$basearch</span>
<span class="nv">baseurl</span><span class="o">=</span>http://mirrors.aliyun.com/epel/7/<span class="nv">$basearch</span>
<span class="nv">failovermethod</span><span class="o">=</span>priority
<span class="nv">enabled</span><span class="o">=</span><span class="m">1</span>
<span class="nv">gpgcheck</span><span class="o">=</span><span class="m">0</span>
<span class="nv">gpgkey</span><span class="o">=</span>file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
<span class="o">[</span>epel-debuginfo<span class="o">]</span>
<span class="nv">name</span><span class="o">=</span>Extra<span class="w"> </span>Packages<span class="w"> </span><span class="k">for</span><span class="w"> </span>Enterprise<span class="w"> </span>Linux<span class="w"> </span><span class="m">7</span><span class="w"> </span>-<span class="w"> </span><span class="nv">$basearch</span><span class="w"> </span><span class="w"> </span>Debug
<span class="nv">baseurl</span><span class="o">=</span>http://mirrors.aliyun.com/epel/7/<span class="nv">$basearch</span>/debug
<span class="nv">failovermethod</span><span class="o">=</span>priority
<span class="nv">enabled</span><span class="o">=</span><span class="m">0</span>
<span class="nv">gpgkey</span><span class="o">=</span>file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
<span class="nv">gpgcheck</span><span class="o">=</span><span class="m">0</span>
<span class="o">[</span>epel-source<span class="o">]</span>
<span class="nv">name</span><span class="o">=</span>Extra<span class="w"> </span>Packages<span class="w"> </span><span class="k">for</span><span class="w"> </span>Enterprise<span class="w"> </span>Linux<span class="w"> </span><span class="m">7</span><span class="w"> </span>-<span class="w"> </span><span class="nv">$basearch</span><span class="w"> </span><span class="w"> </span>Source
<span class="nv">baseurl</span><span class="o">=</span>http://mirrors.aliyun.com/epel/7/SRPMS
<span class="nv">failovermethod</span><span class="o">=</span>priority
<span class="nv">enabled</span><span class="o">=</span><span class="m">0</span>
<span class="nv">gpgkey</span><span class="o">=</span>file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
<span class="nv">gpgcheck</span><span class="o">=</span><span class="m">0</span>
</pre></div>
</div>
</li>
<li><p>更新cache</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>yum<span class="w"> </span>clean<span class="w"> </span>all<span class="w"> </span>
yum<span class="w"> </span>makecache<span class="w"> </span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id3">
<h2>2.5. <strong>安装相关依赖:</strong><a class="headerlink" href="#id3" title="此标题的永久链接"></a></h2>
<ul>
<li><p>联网执行以下命令安装必要的依赖包:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1">#安装 DCU 加速卡驱动所需的依赖包命令</span>
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>gcc<span class="w"> </span>gcc-c++<span class="w"> </span>rpm-build<span class="w"> </span>autoconf<span class="w"> </span>kernel-devel-<span class="k">$(</span>uname<span class="w"> </span>-r<span class="k">)</span><span class="w"> </span>kernel-headers-<span class="k">$(</span>uname<span class="w"> </span>-r<span class="k">)</span>
<span class="c1">#安装cmake3</span>
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>cmake3<span class="w"> </span>
ln<span class="w"> </span>-s<span class="w"> </span>/usr/bin/cmake3<span class="w"> </span>/usr/bin/cmake
<span class="c1">#安装 DTK 开发环境所需的依赖包命令</span>
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>centos-release-scl
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>gcc<span class="w"> </span>gcc-c++<span class="w"> </span>gcc-gfortran<span class="w"> </span>elfutils<span class="w"> </span>elfutils-devel<span class="w"> </span>make<span class="w"> </span>rpm-build<span class="w"> </span>devtoolset-7
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>libbabeltrace-devel<span class="w"> </span>libbabeltrace<span class="w"> </span>pciutils-devel<span class="w"> </span>libpciaccess-devel
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>numactl-devel<span class="w"> </span>elfutils-libelf-devel<span class="w"> </span>mesa-libGL-devel
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>epel-release<span class="w"> </span>cmake3<span class="w"> </span>pciutils-libs<span class="w"> </span>pciutils-devel
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>perl-File-Which<span class="w"> </span>perl-File-BaseDir<span class="w"> </span>perl-File-Copy-Recursive<span class="w"> </span>perl-File-Listing<span class="w"> </span>java-1.8.0-openjdk
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>git<span class="w"> </span>python<span class="w"> </span>python-pip<span class="w"> </span>python-devel<span class="w"> </span>python-wheel<span class="w"> </span>python3<span class="w"> </span>python3-pip<span class="w"> </span>python3-devel<span class="w"> </span>python3-wheel<span class="w"> </span>sqlite-devel<span class="w"> </span>libibverbs
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>redhat-lsb-core<span class="w"> </span>gettext<span class="w"> </span>gettext-devel<span class="w"> </span>protobuf
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>perl-Digest<span class="w"> </span>perl-Digest-MD5<span class="w"> </span>perl-Data-Dumper<span class="w"> </span>vim-common<span class="w"> </span>curl<span class="w"> </span>libcurl<span class="w"> </span>libcurl-devel
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>doxygen<span class="w"> </span>graphviz<span class="w"> </span>texlive<span class="w"> </span>texlive-xtab<span class="w"> </span>texlive-multirow<span class="w"> </span>texlive-sectsty<span class="w"> </span>texlive-tocloft
yum<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>texlive-adjustbox<span class="w"> </span>deltarpm<span class="w"> </span>tcl<span class="w"> </span>automake
</pre></div>
</div>
</li>
<li><p>离线安装依赖:
<br>
依赖离线包:rpm_DTK2404_centos7.6_3.10.0-957.tar
<br>
链接:https://pan.baidu.com/s/1jnWfddL4lHWVQb3btD34Iw?pwd=wj6q
<br>
提取码:wj6q
<br>
下载好导入服务器,进行解压:
<br></p>
<ol class="arabic">
<li><p><code class="docutils literal notranslate"><span class="pre">vi</span> <span class="pre">/etc/yum.repos.d/localyum.repo</span></code>,输入如下内容,请根据解压的路径,修改baseurl的内容,下面配置是在root路径下解压的依赖包;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="o">[</span>local-repo<span class="o">]</span>
<span class="nv">name</span><span class="o">=</span>local-repo
<span class="nv">baseurl</span><span class="o">=</span>file:///root/centos7-dtk24.04
<span class="nv">enabled</span><span class="o">=</span><span class="m">1</span>
<span class="nv">gpgcheck</span><span class="o">=</span><span class="m">0</span>
</pre></div>
</div>
</li>
<li><p>开始安装离线依赖包</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>yum<span class="w"> </span>clean<span class="w"> </span>all
<span class="c1">#以安装cmake3为例</span>
yum<span class="w"> </span>--disablerepo<span class="o">=</span><span class="s2">&quot;*&quot;</span><span class="w"> </span>--enablerepo<span class="o">=</span><span class="s2">&quot;local-repo&quot;</span><span class="w"> </span>install<span class="w"> </span>cmake3
</pre></div>
</div>
</li>
</ol>
</li>
</ul>
</section>
<section id="id4">
<h2>2.6. <strong>校验系统配置:</strong><a class="headerlink" href="#id4" title="此标题的永久链接"></a></h2>
<table border="1" class="docutils">
<thead>
<tr>
<th>设备名称</th>
<th>设备码</th>
</tr>
</thead>
<tbody>
<tr>
<td>Z100L</td>
<td>1d94:55b7</td>
</tr>
<tr>
<td>K100</td>
<td>1d94:62b7</td>
</tr>
<tr>
<td>K100_AI</td>
<td>1d94:6210</td>
</tr>
</tbody>
</table>
<ul class="simple">
<li><p>查看DCU设备</p></li>
</ul>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Z100L</span>
root@sugontest79:/mnt#lspci<span class="w"> </span>-nn<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-i<span class="w"> </span>55b7
------------------------------------------------------------------------------------------------------
<span class="m">07</span>:00.0<span class="w"> </span>Display<span class="w"> </span>controller<span class="w"> </span><span class="o">[</span><span class="m">0380</span><span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>ZIFANG<span class="w"> </span><span class="o">[</span>1d94:55b7<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
0a:00.0<span class="w"> </span>Display<span class="w"> </span>controller<span class="w"> </span><span class="o">[</span><span class="m">0380</span><span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>ZIFANG<span class="w"> </span><span class="o">[</span>1d94:55b7<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
------------------------------------------------------------------------------------------------------
<span class="c1"># K100</span>
root@sugontest79:/mnt#lspci<span class="w"> </span>-nn<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-i<span class="w"> </span>62b7
------------------------------------------------------------------------------------------------------
<span class="m">07</span>:00.0<span class="w"> </span>Co-processor<span class="w"> </span><span class="o">[</span>0b40<span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>KONGMING<span class="w"> </span><span class="o">[</span>1d94:62b7<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
0a:00.0<span class="w"> </span>Co-processor<span class="w"> </span><span class="o">[</span>0b40<span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>KONGMING<span class="w"> </span><span class="o">[</span>1d94:62b7<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
------------------------------------------------------------------------------------------------------
<span class="c1"># K100-AI</span>
root@sugontest79:/mnt#lspci<span class="w"> </span>-nn<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-i<span class="w"> </span><span class="m">6210</span>
------------------------------------------------------------------------------------------------------
<span class="m">07</span>:00.0<span class="w"> </span>Co-processor<span class="w"> </span><span class="o">[</span>0b40<span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>KONGMING<span class="w"> </span><span class="o">[</span>1d94:6210<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
0a:00.0<span class="w"> </span>Co-processor<span class="w"> </span><span class="o">[</span>0b40<span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>KONGMING<span class="w"> </span><span class="o">[</span>1d94:6210<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
------------------------------------------------------------------------------------------------------
</pre></div>
</div>
<blockquote>
<div><p>注:输出信息可能和截图不完全一致。</p>
</div></blockquote>
<ul>
<li><p>配置环境变量</p>
<br>
创建文件 `/etc/profile.d/devtoolset-7.sh`,内容如下:
<br>
`source /opt/rh/devtoolset-7/enable`
<br>
退出当前登录会话重新登录,或者执行source /etc/profile.d/devtoolset-7.sh。
</li>
</ul>
</section>
<section id="id5">
<h2>2.7. <strong>安装驱动:</strong><a class="headerlink" href="#id5" title="此标题的永久链接"></a></h2>
<p><strong>注意:</strong></p>
<blockquote>
<div><p>DTK和rock驱动有对应关系,可参考<a class="reference internal" href="#DCU%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85%E6%89%8B%E5%86%8C"><span class="xref myst">dcu-环境安装手册</span></a>,推荐安装最新的使用<br>
-安装驱动之前需要安装基础包,包括cmake、gcc等多种基础依赖包,请先参考<code class="docutils literal notranslate"><span class="pre">DCU环境安装手册</span></code>完成基础环境包的安装。</p>
</div></blockquote>
<p><strong>驱动下载地址</strong>: <a class="reference external" href="https://cancon.hpccube.com:65024/6/main">https://cancon.hpccube.com:65024/6/main</a> → latest 驱动→ rock-xxx-xxx.aio.run</p>
<ol class="arabic">
<li><p>安装 DCU 加速卡驱动</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>chmod<span class="w"> </span><span class="m">755</span><span class="w"> </span>rock-5.7.1-6.2.13-V1.0.1a.aio.run
./rock-5.7.1-6.2.13-V1.0.1a.aio.run
</pre></div>
</div>
</li>
<li><p>如果安装过程更新了<code class="docutils literal notranslate"><span class="pre">vbios</span></code>, 则需要重启机器</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>reboot
</pre></div>
</div>
</li>
<li><p>查看验证是否安装成功</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 出现如下类似结果则安装成功</span>
<span class="o">[</span>root@b04r3n02<span class="w"> </span>~<span class="o">]</span><span class="c1"># lsmod | grep hydcu</span>
hydcu<span class="w"> </span><span class="m">1435342</span><span class="w"> </span><span class="m">0</span>
hydcu_sched<span class="w"> </span><span class="m">34432</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>hydcu
hyttm<span class="w"> </span><span class="m">61919</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>hydcu
hykcl<span class="w"> </span><span class="m">46567</span><span class="w"> </span><span class="m">3</span><span class="w"> </span>hydcu_sched,hydcu,hyttm
hy_extra<span class="w"> </span><span class="m">32140</span><span class="w"> </span><span class="m">3</span><span class="w"> </span>hydcu_sched,hydcu,hykcl
amd_iommu_v2<span class="w"> </span><span class="m">18821</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>hydcu
drm_kms_helper<span class="w"> </span><span class="m">179394</span><span class="w"> </span><span class="m">3</span><span class="w"> </span>ast,hydcu,hykcl
drm<span class="w"> </span><span class="m">429744</span><span class="w"> </span><span class="m">8</span><span class="w"> </span>ast,ttm,hydcu,hykcl,hyttm,drm_kms_helper
</pre></div>
</div>
</li>
<li><p>卸载驱动步骤:</p>
<br>
如遇到异常情况或需要更新版本,先执行驱动卸载。
<br>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>rpm<span class="w"> </span>-qa<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>rock<span class="w"> </span><span class="c1">#查询安装的驱动版本</span>
rmmod<span class="w"> </span>hydcu
rpm<span class="w"> </span>-e<span class="w"> </span>rock-5.7.1-6.2.18-1.x86_64
</pre></div>
</div>
</li>
</ol>
</section>
<section id="dtk">
<h2>2.8. <strong>安装DTK:</strong><a class="headerlink" href="#dtk" title="此标题的永久链接"></a></h2>
<p><strong>DTK下载地址</strong>: <a class="reference external" href="https://cancon.hpccube.com:65024/1/main">https://cancon.hpccube.com:65024/1/main</a> → latest → 对应的操作系统 → DTK-version-OS-version-x86_64.tar.gz</p>
<ol class="arabic">
<li><p>安装</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 解压安装</span>
tar<span class="w"> </span>xvf<span class="w"> </span>DTK-24.04.1-CentOS7.6-x86_64.tar.gz<span class="w"> </span>-C<span class="w"> </span>/opt
<span class="c1"># 创建软连接</span>
ln<span class="w"> </span>-s<span class="w"> </span>/opt/dtk-24.04.1<span class="w"> </span>/opt/dtk
</pre></div>
</div>
</li>
<li><p>设置 DTK 环境变量</p>
<blockquote>
<div><p>DTK 压缩文件中提供了设置环境变量脚本 env.sh。可以通过 source /opt/dtk/env.sh 的方式临时加载环境变量。为避免多次配置,常用以下方式加载环境变量</p>
</div></blockquote>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;source /opt/dtk/env.sh&quot;</span>&gt;&gt;<span class="w"> </span>~/.bashrc
<span class="c1"># 激活环境变量</span>
<span class="nb">source</span><span class="w"> </span>~/.bashrc
</pre></div>
</div>
</li>
<li><p>验证 DCU 环境</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 查看并执行 hy-smi 或者 rocm-smi 指令查看 dcu 基本信息</span>
<span class="o">[</span>root@h01r4n04~<span class="o">]</span><span class="c1"># rocm-smi</span>
<span class="c1"># 出现如下内容, 则安装成功</span>
<span class="o">===================</span>System<span class="w"> </span>Management<span class="w"> </span><span class="nv">Interface</span><span class="w"> </span><span class="o">=================</span>
<span class="o">==========================================================</span>
DCU<span class="w"> </span>Temp<span class="w"> </span>AvgPwr<span class="w"> </span>Fan<span class="w"> </span>Perf<span class="w"> </span>PwrCap<span class="w"> </span>VRAM%<span class="w"> </span>DCU%
<span class="m">0</span><span class="w"> </span><span class="m">50</span>.0c<span class="w"> </span><span class="m">55</span>.0W<span class="w"> </span><span class="m">0</span>.0%<span class="w"> </span>auto<span class="w"> </span><span class="m">450</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%
<span class="m">1</span><span class="w"> </span><span class="m">50</span>.0c<span class="w"> </span><span class="m">58</span>.0W<span class="w"> </span><span class="m">0</span>.0%<span class="w"> </span>auto<span class="w"> </span><span class="m">450</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%
<span class="m">2</span><span class="w"> </span><span class="m">49</span>.0c<span class="w"> </span><span class="m">58</span>.0W<span class="w"> </span><span class="m">0</span>.0%<span class="w"> </span>auto<span class="w"> </span><span class="m">450</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>
<span class="m">3</span><span class="w"> </span><span class="m">49</span>.0c<span class="w"> </span><span class="m">55</span>.0W<span class="w"> </span><span class="m">0</span>.0%<span class="w"> </span>auto<span class="w"> </span><span class="m">450</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%
<span class="o">==========================================================</span>
<span class="o">======================</span>End<span class="w"> </span>of<span class="w"> </span>SMI<span class="w"> </span><span class="nv">Log</span><span class="o">========================</span>
</pre></div>
</div>
</li>
</ol>
</section>
<section id="id6">
<h2>2.9. <strong>验证安装结果:</strong><a class="headerlink" href="#id6" title="此标题的永久链接"></a></h2>
<ol class="arabic">
<li><p>使用<code class="docutils literal notranslate"><span class="pre">rocminfo</span></code>命令检查ROCm系统状态</p>
<br>
终端输入如下内容:
<br>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>rocminfo<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>gfx
<span class="c1"># 其中Z100/Z100L为gfx906,K100为gfx926,K100_AI为gfx928; 有输出即说明驱动和DTK安装成功</span>
------------------------------------------------------------------------------------------------------------
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
</pre></div>
</div>
<br>
</li>
<li><p>运行<code class="docutils literal notranslate"><span class="pre">hy-smi</span></code><code class="docutils literal notranslate"><span class="pre">rocm-smi</span></code>来监控DCU的状态和性能指标;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 查看并执行 hy-smi 或者 rocm-smi 指令查看 dcu 基本信息</span>
<span class="o">[</span>root@h01r4n04~<span class="o">]</span><span class="c1"># rocm-smi</span>
<span class="w"> </span><span class="c1"># 出现如下内容, 则安装成功</span>
<span class="o">============================</span><span class="w"> </span>System<span class="w"> </span>Management<span class="w"> </span><span class="nv">Interface</span><span class="w"> </span><span class="o">=============================</span>
<span class="o">======================================================================================</span>
DCU<span class="w"> </span>Temp<span class="w"> </span>AvgPwr<span class="w"> </span>Perf<span class="w"> </span>PwrCap<span class="w"> </span>VRAM%<span class="w"> </span>DCU%<span class="w"> </span>Mode<span class="w"> </span>
<span class="m">0</span><span class="w"> </span><span class="m">42</span>.0C<span class="w"> </span><span class="m">39</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">1</span><span class="w"> </span><span class="m">41</span>.0C<span class="w"> </span><span class="m">39</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">2</span><span class="w"> </span><span class="m">41</span>.0C<span class="w"> </span><span class="m">36</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">3</span><span class="w"> </span><span class="m">40</span>.0C<span class="w"> </span><span class="m">38</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">4</span><span class="w"> </span><span class="m">40</span>.0C<span class="w"> </span><span class="m">39</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">5</span><span class="w"> </span><span class="m">41</span>.0C<span class="w"> </span><span class="m">41</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">6</span><span class="w"> </span><span class="m">42</span>.0C<span class="w"> </span><span class="m">37</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">7</span><span class="w"> </span><span class="m">41</span>.0C<span class="w"> </span><span class="m">36</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="nv">Normal</span><span class="w"> </span>
<span class="o">======================================================================================</span>
<span class="o">===================================</span><span class="w"> </span>End<span class="w"> </span>of<span class="w"> </span>SMI<span class="w"> </span><span class="nv">Log</span><span class="w"> </span><span class="o">===================================</span>
</pre></div>
</div>
</li>
</ol>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="base_install_intro.html" class="btn btn-neutral float-left" title="1. 开发者社区 DCU 环境安装手册" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
<a href="ubuntu.html" class="btn btn-neutral float-right" title="3 DCU基础环境完整教程-ubuntu:" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>3 DCU基础环境完整教程-ubuntu: &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/clipboard.min.js"></script>
<script src="../_static/copybutton.js"></script>
<script src="../_static/translations.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="搜索" href="../search.html" />
<link rel="next" title="1 基于Anaconda的DCU使用示例:" href="../Anaconda_Docker.html" />
<link rel="prev" title="2 DCU基础环境完整教程-Centos7.6:" href="centos.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="../get_started.html#id3"><strong>兼容性(必读)</strong></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../download.html">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">3.1. <strong>安装系统过程中注意:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">3.2. <strong>安装完成系统后的配置</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">3.3. <strong>更新国内软件下载源:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">3.4. <strong>安装相关依赖:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id5">3.5. <strong>校验系统配置:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id6">3.6. <strong>安装驱动:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#dtk">3.7. <strong>安装DTK:</strong></a></li>
<li class="toctree-l2"><a class="reference internal" href="#id7">3.8. <strong>验证安装结果:</strong></a></li>
</ul>
</li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="../Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/install_dcu_on_os/ubuntu.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="dcu-ubuntu">
<h1><strong>3 DCU基础环境完整教程-ubuntu</strong>:<a class="headerlink" href="#dcu-ubuntu" title="此标题的永久链接"></a></h1>
<section id="id1">
<h2>3.1. <strong>安装系统过程中注意:</strong><a class="headerlink" href="#id1" title="此标题的永久链接"></a></h2>
<blockquote>
<div><p>Ubuntu20.04.1(5.4.0-42-generic)和Ubuntu22.04.1(5.15.0-25-generic)已在 DCU 上进行全量验证,本文以Ubuntu20.04.1(5.4.0-42-generic)安装部署为例,如果是其他版本或者kernel不一致可能导致驱动无效</p>
</div></blockquote>
<ol class="arabic simple">
<li><p>安装时不要连接网络(直接断掉网线或者在安装系统时将网络disable),否则会自动升级内核(<font color="red">即使选择了不更新操作</font>)。</p></li>
</ol>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>安装系统时将网络disable;
</pre></div>
</div>
<p><img alt="disable_net" src="../_images/disable_net.png" /></p>
<ol class="arabic simple" start="2">
<li><p>安装过程中, 涉及到更新的选项都选择不更新;</p></li>
</ol>
</section>
<section id="id2">
<h2>3.2. <strong>安装完成系统后的配置</strong><a class="headerlink" href="#id2" title="此标题的永久链接"></a></h2>
<ol class="arabic">
<li><p>安装完系统后确定内核, 是否符合兼容性, 如果不符合兼容性,</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>root@test79:/mnt#<span class="w"> </span>uname<span class="w"> </span>-r
<span class="m">5</span>.4.0-173-generic
</pre></div>
</div>
<p>建议确认</p>
<ul class="simple">
<li><p>使用的操作系统版本是否在兼容性列表;</p></li>
<li><p>是否在安装操作系统中禁用网络,选择不更新的相关配置;</p></li>
</ul>
</li>
<li><p>确保非root用户已加入<code class="docutils literal notranslate"><span class="pre">video</span></code>组,以便能够使用DCU;</p>
<ul>
<li><p>确保非root用户已加入<code class="docutils literal notranslate"><span class="pre">video</span></code>组,以便能够使用DCU, shell 命令修改;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 对于有sudo权限的非root用户</span>
sudo<span class="w"> </span>usermod<span class="w"> </span>-aG<span class="w"> </span>video<span class="w"> </span><span class="nv">$USER</span>
<span class="c1"># 对于无sudo权限的用户,由root执行</span>
usermod<span class="w"> </span>-aG<span class="w"> </span>video<span class="w"> </span>&lt;userid&gt;
</pre></div>
</div>
</li>
<li><p>或者,或者修改/etc/group文件,添加test用户;</p>
<p><img alt="disable_net" src="../_images/render.png" /></p>
<p>退出重新登录。</p>
</li>
</ul>
</li>
<li><p>关闭内核自动更新:</p>
<ul>
<li><p>查看安装内核:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>dpkg<span class="w"> </span>--list<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>linux-image
dpkg<span class="w"> </span>--list<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>linux-headers
dpkg<span class="w"> </span>--list<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>linux-modules
<span class="c1"># 输出结果:-----------------------------------------------------------------------------------------------------------</span>
ii<span class="w"> </span>linux-image-5.4.0-173-generic<span class="w"> </span><span class="m">5</span>.4.0-173.191<span class="w"> </span>amd64<span class="w"> </span>Signed<span class="w"> </span>kernel<span class="w"> </span>image<span class="w"> </span>generic
hi<span class="w"> </span>linux-image-5.4.0-42-generic<span class="w"> </span><span class="m">5</span>.4.0-42.46<span class="w"> </span>amd64<span class="w"> </span>Signed<span class="w"> </span>kernel<span class="w"> </span>image<span class="w"> </span>generic
ii<span class="w"> </span>linux-image-generic<span class="w"> </span><span class="m">5</span>.4.0.173.171<span class="w"> </span>amd64<span class="w"> </span>Generic<span class="w"> </span>Linux<span class="w"> </span>kernel<span class="w"> </span>image
</pre></div>
</div>
</li>
<li><p>禁止内核更新方法1:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>vi<span class="w"> </span>/etc/apt/apt.conf.d/10periodic
sudo<span class="w"> </span>vi<span class="w"> </span>/etc/apt/apt.conf.d/20auto-upgrades
<span class="c1"># 后面部分全部改成 “0”</span>
<span class="c1"># 修改后内容 ----------------------------------------</span>
<span class="c1"># 10periodic</span>
APT::Periodic::Update-Package-Lists<span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">;</span>
APT::Periodic::Download-Upgradeable-Packages<span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">;</span>
APT::Periodic::AutocleanInterval<span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">;</span>
<span class="c1"># 20auto-upgrades</span>
APT::Periodic::Update-Package-Lists<span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">;</span>
APT::Periodic::Unattended-Upgrade<span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">;</span>
</pre></div>
</div>
</li>
<li><p>禁止内核更新方法2:</p>
<p>直接使用hold参数,固定内核版本:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt-mark<span class="w"> </span>hold<span class="w"> </span>linux-image-5.4.0-42-generic
sudo<span class="w"> </span>apt-mark<span class="w"> </span>hold<span class="w"> </span>linux-headers-5.4.0-42-generic
sudo<span class="w"> </span>apt-mark<span class="w"> </span>hold<span class="w"> </span>linux-modules-extra-5.4.0-42-generic
</pre></div>
</div>
<p>查询 Ubuntu系统被锁定不更新的软件包状态(hold)</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>dpkg<span class="w"> </span>--get-selections<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>hold
</pre></div>
</div>
</li>
</ul>
</li>
</ol>
</section>
<section id="id3">
<h2>3.3. <strong>更新国内软件下载源:</strong><a class="headerlink" href="#id3" title="此标题的永久链接"></a></h2>
<ol class="arabic">
<li><p>备份源文件:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>cp<span class="w"> </span>/etc/apt/sources.list<span class="w"> </span>/etc/apt/sources.list.bak
</pre></div>
</div>
</li>
<li><p>修改源文件sources.list: 将原文件内容全部注释或删掉,添加以下内容;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 当前使用阿里源, 如果想使用其他源, 可以自行在网上搜索其他源的配置文件,并替换掉以下内容;</span>
<span class="c1"># 注意换源的时候需要和操作系统的版本号作匹配</span>
deb<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb-src<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal-security<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb-src<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal-security<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal-updates<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb-src<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal-updates<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal-proposed<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb-src<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal-proposed<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal-backports<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
deb-src<span class="w"> </span>http://mirrors.aliyun.com/ubuntu/<span class="w"> </span>focal-backports<span class="w"> </span>main<span class="w"> </span>restricted<span class="w"> </span>universe<span class="w"> </span>multiverse
</pre></div>
</div>
<p>如果是ubuntu-22.04可以直接使用如下方式, 更换为华为源;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 修改为华为源</span>
sudo<span class="w"> </span>sed<span class="w"> </span>-i<span class="w"> </span><span class="s2">&quot;s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g&quot;</span><span class="w"> </span>/etc/apt/sources.list
sudo<span class="w"> </span>sed<span class="w"> </span>-i<span class="w"> </span><span class="s2">&quot;s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g&quot;</span><span class="w"> </span>/etc/apt/sources.list
</pre></div>
</div>
</li>
<li><p>更新:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt-get<span class="w"> </span>update<span class="w"> </span>
</pre></div>
</div>
</li>
</ol>
</section>
<section id="id4">
<h2>3.4. <strong>安装相关依赖:</strong><a class="headerlink" href="#id4" title="此标题的永久链接"></a></h2>
<ul>
<li><p>联网执行以下命令安装必要的依赖包:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 安装 DCU 加速卡驱动所需的依赖包命令</span>
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>cmake<span class="w"> </span>gcc<span class="w"> </span>autoconf<span class="w"> </span>linux-kernel-headers<span class="w"> </span>kernel-package<span class="w"> </span>automake<span class="w"> </span>linux-modules-extra-<span class="sb">`</span>uname<span class="w"> </span>-r<span class="sb">`</span><span class="w"> </span>linux-image-<span class="sb">`</span>uname<span class="w"> </span>-r<span class="sb">`</span><span class="w"> </span>linux-headers-<span class="sb">`</span>uname<span class="w"> </span>-r<span class="sb">`</span>
<span class="c1"># 安装 DTK 开发环境所需的依赖包命令</span>
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>make<span class="w"> </span>gcc<span class="w"> </span>g++<span class="w"> </span>cmake<span class="w"> </span>git<span class="w"> </span>wget<span class="w"> </span>gfortran<span class="w"> </span>elfutils<span class="w"> </span>libdrm-dev<span class="w"> </span>
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>kmod<span class="w"> </span>libtinfo5<span class="w"> </span>sqlite3<span class="w"> </span>libsqlite3-dev<span class="w"> </span>libelf-dev<span class="w"> </span>libibverbs1<span class="w"> </span>libgtk2.0-0
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>libnuma-dev<span class="w"> </span>libgl1-mesa-dev<span class="w"> </span>rpm<span class="w"> </span>rsync<span class="w"> </span>mesa-common-dev<span class="w"> </span>apt-utils
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>cmake<span class="w"> </span>libpci-dev<span class="w"> </span>pciutils<span class="w"> </span>libpciaccess-dev<span class="w"> </span>libbabeltrace-dev<span class="w"> </span>pkg-config
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>libfile-which-perl<span class="w"> </span>libfile-basedir-perl<span class="w"> </span>libfile-copy-recursive-perl<span class="w"> </span>libfile-listing-perl
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>python3<span class="w"> </span>python3-pip<span class="w"> </span>python3-dev<span class="w"> </span>python3-wheel
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>gettext<span class="w"> </span>gettext-base<span class="w"> </span>libprotobuf-dev<span class="w"> </span>tcl
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>libio-digest-perl<span class="w"> </span>libdigest-md5-file-perl<span class="w"> </span>libdata-dumper-simple-perl<span class="w"> </span>vim<span class="w"> </span>curl<span class="w"> </span>libcurlpp-dev
sudo<span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>doxygen<span class="w"> </span>graphviz<span class="w"> </span>texlive<span class="w"> </span>libncurses5<span class="w"> </span>msgpack*
sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>mlocate
</pre></div>
</div>
</li>
<li><p>离线安装依赖:
<br>
依赖离线包:deb_DTK2404_Ubuntu20.04.1_5.4.0-42-generic.tar
<br>
链接:https://pan.baidu.com/s/1jnWfddL4lHWVQb3btD34Iw?pwd=wj6q
<br>
提取码:wj6q
<br>
下载好导入服务器,进行解压:
<br></p>
<ol class="arabic">
<li><p><code class="docutils literal notranslate"><span class="pre">vi</span> <span class="pre">/etc/apt/sources.list.d/myrepo.list</span></code>,输入如下内容,注意修改解压的路径,下面配置是在/data路径下解压的;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>vi<span class="w"> </span>/etc/apt/sources.list.d/myrepo.list
<span class="c1">#输入如下内容,注意修改解压的路径,下面配置是在/data路径下解压的</span>
deb<span class="w"> </span><span class="o">[</span><span class="nv">trusted</span><span class="o">=</span>yes<span class="o">]</span><span class="w"> </span>file:///data/my-debian-packages<span class="w"> </span>./
<span class="c1">#保存退出即可</span>
chmod<span class="w"> </span>+r<span class="w"> </span>/data
chown<span class="w"> </span>-R<span class="w"> </span>_apt:root<span class="w"> </span>/datahR
chown<span class="w"> </span>-R<span class="w"> </span>man:root<span class="w"> </span>/var/cache/man
<span class="c1">#更新系统的apt缓存,使其能够识别并使用新添加的本地私有源</span>
apt<span class="w"> </span>update
apt-get<span class="w"> </span>install<span class="w"> </span>udev
apt<span class="w"> </span>install<span class="w"> </span>mlocate
</pre></div>
</div>
</li>
</ol>
<p>更新了之后,就可以通过<code class="docutils literal notranslate"><span class="pre">apt</span> <span class="pre">install</span></code>安装依赖包了。</p>
</li>
</ul>
</section>
<section id="id5">
<h2>3.5. <strong>校验系统配置:</strong><a class="headerlink" href="#id5" title="此标题的永久链接"></a></h2>
<table border="1" class="docutils">
<thead>
<tr>
<th>设备名称</th>
<th>设备码</th>
</tr>
</thead>
<tbody>
<tr>
<td>Z100L</td>
<td>1d94:55b7</td>
</tr>
<tr>
<td>K100</td>
<td>1d94:62b7</td>
</tr>
<tr>
<td>K100_AI</td>
<td>1d94:6210</td>
</tr>
</tbody>
</table>
<ul class="simple">
<li><p>查看DCU设备</p></li>
</ul>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Z100L</span>
root@sugontest79:/mnt#lspci<span class="w"> </span>-nn<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-i<span class="w"> </span>55b7
------------------------------------------------------------------------------------------------------
<span class="m">07</span>:00.0<span class="w"> </span>Display<span class="w"> </span>controller<span class="w"> </span><span class="o">[</span><span class="m">0380</span><span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>ZIFANG<span class="w"> </span><span class="o">[</span>1d94:55b7<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
0a:00.0<span class="w"> </span>Display<span class="w"> </span>controller<span class="w"> </span><span class="o">[</span><span class="m">0380</span><span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>ZIFANG<span class="w"> </span><span class="o">[</span>1d94:55b7<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
------------------------------------------------------------------------------------------------------
<span class="c1"># K100</span>
root@sugontest79:/mnt#lspci<span class="w"> </span>-nn<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-i<span class="w"> </span>62b7
------------------------------------------------------------------------------------------------------
<span class="m">07</span>:00.0<span class="w"> </span>Co-processor<span class="w"> </span><span class="o">[</span>0b40<span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>KONGMING<span class="w"> </span><span class="o">[</span>1d94:62b7<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
0a:00.0<span class="w"> </span>Co-processor<span class="w"> </span><span class="o">[</span>0b40<span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>KONGMING<span class="w"> </span><span class="o">[</span>1d94:62b7<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
------------------------------------------------------------------------------------------------------
<span class="c1"># K100-AI</span>
root@sugontest79:/mnt#lspci<span class="w"> </span>-nn<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-i<span class="w"> </span><span class="m">6210</span>
------------------------------------------------------------------------------------------------------
<span class="m">07</span>:00.0<span class="w"> </span>Co-processor<span class="w"> </span><span class="o">[</span>0b40<span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>KONGMING<span class="w"> </span><span class="o">[</span>1d94:6210<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
0a:00.0<span class="w"> </span>Co-processor<span class="w"> </span><span class="o">[</span>0b40<span class="o">]</span>:<span class="w"> </span>Chengdu<span class="w"> </span>Haiguang<span class="w"> </span>IC<span class="w"> </span>Design<span class="w"> </span>Co.,<span class="w"> </span>Ltd.<span class="w"> </span>KONGMING<span class="w"> </span><span class="o">[</span>1d94:6210<span class="o">]</span><span class="w"> </span><span class="o">(</span>rev<span class="w"> </span><span class="m">01</span><span class="o">)</span>
------------------------------------------------------------------------------------------------------
</pre></div>
</div>
<blockquote>
<div><p>注:输出信息可能和截图不完全一致。</p>
</div></blockquote>
</section>
<section id="id6">
<h2>3.6. <strong>安装驱动:</strong><a class="headerlink" href="#id6" title="此标题的永久链接"></a></h2>
<p><strong>注意:</strong></p>
<blockquote>
<div><p>DTK和rock驱动有对应关系,可参考<a class="reference internal" href="#DCU%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85%E6%89%8B%E5%86%8C"><span class="xref myst">dcu-环境安装手册</span></a>,推荐安装最新的使用<br>
-安装驱动之前需要安装基础包,包括cmake、gcc等多种基础依赖包,请先参考<code class="docutils literal notranslate"><span class="pre">DCU环境安装手册</span></code>完成基础环境包的安装。</p>
</div></blockquote>
<p><strong>驱动下载地址</strong>: <a class="reference external" href="https://cancon.hpccube.com:65024/6/main">https://cancon.hpccube.com:65024/6/main</a> → latest 驱动→ rock-xxx-xxx.aio.run</p>
<ol class="arabic">
<li><p>安装 DCU 加速卡驱动</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>chmod<span class="w"> </span><span class="m">755</span><span class="w"> </span>rock-5.7.1-6.2.13-V1.0.1a.aio.run
./rock-5.7.1-6.2.13-V1.0.1a.aio.run
</pre></div>
</div>
</li>
<li><p>如果安装过程更新了<code class="docutils literal notranslate"><span class="pre">vbios</span></code>, 则需要重启机器</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>reboot
</pre></div>
</div>
</li>
<li><p>查看验证是否安装成功</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 出现如下类似结果则安装成功</span>
<span class="o">[</span>root@b04r3n02<span class="w"> </span>~<span class="o">]</span><span class="c1"># lsmod | grep hydcu</span>
hydcu<span class="w"> </span><span class="m">1435342</span><span class="w"> </span><span class="m">0</span>
hydcu_sched<span class="w"> </span><span class="m">34432</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>hydcu
hyttm<span class="w"> </span><span class="m">61919</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>hydcu
hykcl<span class="w"> </span><span class="m">46567</span><span class="w"> </span><span class="m">3</span><span class="w"> </span>hydcu_sched,hydcu,hyttm
hy_extra<span class="w"> </span><span class="m">32140</span><span class="w"> </span><span class="m">3</span><span class="w"> </span>hydcu_sched,hydcu,hykcl
amd_iommu_v2<span class="w"> </span><span class="m">18821</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>hydcu
drm_kms_helper<span class="w"> </span><span class="m">179394</span><span class="w"> </span><span class="m">3</span><span class="w"> </span>ast,hydcu,hykcl
drm<span class="w"> </span><span class="m">429744</span><span class="w"> </span><span class="m">8</span><span class="w"> </span>ast,ttm,hydcu,hykcl,hyttm,drm_kms_helper
</pre></div>
</div>
</li>
<li><p>卸载驱动步骤:</p>
<br>
如遇到异常情况或需要更新版本,先执行驱动卸载。
<br>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>rpm<span class="w"> </span>-qa<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>rock<span class="w"> </span><span class="c1">#查询安装的驱动版本</span>
rmmod<span class="w"> </span>hydcu
rpm<span class="w"> </span>-e<span class="w"> </span>rock-5.7.1-6.2.18-1.x86_64
</pre></div>
</div>
</li>
</ol>
</section>
<section id="dtk">
<h2>3.7. <strong>安装DTK:</strong><a class="headerlink" href="#dtk" title="此标题的永久链接"></a></h2>
<p><strong>DTK下载地址</strong>: <a class="reference external" href="https://cancon.hpccube.com:65024/1/main">https://cancon.hpccube.com:65024/1/main</a> → latest → 对应的操作系统 → DTK-version-OS-version-x86_64.tar.gz</p>
<ol class="arabic">
<li><p>安装</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 解压安装</span>
tar<span class="w"> </span>xvf<span class="w"> </span>DTK-24.04.1-CentOS7.6-x86_64.tar.gz<span class="w"> </span>-C<span class="w"> </span>/opt
<span class="c1"># 创建软连接</span>
ln<span class="w"> </span>-s<span class="w"> </span>/opt/dtk-24.04.1<span class="w"> </span>/opt/dtk
</pre></div>
</div>
</li>
<li><p>设置 DTK 环境变量</p>
<blockquote>
<div><p>DTK 压缩文件中提供了设置环境变量脚本 env.sh。可以通过 source /opt/dtk/env.sh 的方式临时加载环境变量。为避免多次配置,常用以下方式加载环境变量</p>
</div></blockquote>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;source /opt/dtk/env.sh&quot;</span>&gt;&gt;<span class="w"> </span>~/.bashrc
<span class="c1"># 激活环境变量</span>
<span class="nb">source</span><span class="w"> </span>~/.bashrc
</pre></div>
</div>
</li>
<li><p>验证 DCU 环境</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 查看并执行 hy-smi 或者 rocm-smi 指令查看 dcu 基本信息</span>
<span class="o">[</span>root@h01r4n04~<span class="o">]</span><span class="c1"># rocm-smi</span>
<span class="c1"># 出现如下内容, 则安装成功</span>
<span class="o">===================</span>System<span class="w"> </span>Management<span class="w"> </span><span class="nv">Interface</span><span class="w"> </span><span class="o">=================</span>
<span class="o">==========================================================</span>
DCU<span class="w"> </span>Temp<span class="w"> </span>AvgPwr<span class="w"> </span>Fan<span class="w"> </span>Perf<span class="w"> </span>PwrCap<span class="w"> </span>VRAM%<span class="w"> </span>DCU%
<span class="m">0</span><span class="w"> </span><span class="m">50</span>.0c<span class="w"> </span><span class="m">55</span>.0W<span class="w"> </span><span class="m">0</span>.0%<span class="w"> </span>auto<span class="w"> </span><span class="m">450</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%
<span class="m">1</span><span class="w"> </span><span class="m">50</span>.0c<span class="w"> </span><span class="m">58</span>.0W<span class="w"> </span><span class="m">0</span>.0%<span class="w"> </span>auto<span class="w"> </span><span class="m">450</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%
<span class="m">2</span><span class="w"> </span><span class="m">49</span>.0c<span class="w"> </span><span class="m">58</span>.0W<span class="w"> </span><span class="m">0</span>.0%<span class="w"> </span>auto<span class="w"> </span><span class="m">450</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>
<span class="m">3</span><span class="w"> </span><span class="m">49</span>.0c<span class="w"> </span><span class="m">55</span>.0W<span class="w"> </span><span class="m">0</span>.0%<span class="w"> </span>auto<span class="w"> </span><span class="m">450</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%
<span class="o">==========================================================</span>
<span class="o">======================</span>End<span class="w"> </span>of<span class="w"> </span>SMI<span class="w"> </span><span class="nv">Log</span><span class="o">========================</span>
</pre></div>
</div>
</li>
</ol>
</section>
<section id="id7">
<h2>3.8. <strong>验证安装结果:</strong><a class="headerlink" href="#id7" title="此标题的永久链接"></a></h2>
<ol class="arabic">
<li><p>使用<code class="docutils literal notranslate"><span class="pre">rocminfo</span></code>命令检查ROCm系统状态</p>
<br>
终端输入如下内容:
<br>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>rocminfo<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>gfx
<span class="c1"># 其中Z100/Z100L为gfx906,K100为gfx926,K100_AI为gfx928; 有输出即说明驱动和DTK安装成功</span>
------------------------------------------------------------------------------------------------------------
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
<span class="w"> </span>Name:<span class="w"> </span>amdgcn-amd-amdhsa--gfx906:sramecc+:xnack-
</pre></div>
</div>
<br>
</li>
<li><p>运行<code class="docutils literal notranslate"><span class="pre">hy-smi</span></code><code class="docutils literal notranslate"><span class="pre">rocm-smi</span></code>来监控DCU的状态和性能指标;</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 查看并执行 hy-smi 或者 rocm-smi 指令查看 dcu 基本信息</span>
<span class="o">[</span>root@h01r4n04~<span class="o">]</span><span class="c1"># rocm-smi</span>
<span class="w"> </span><span class="c1"># 出现如下内容, 则安装成功</span>
<span class="o">============================</span><span class="w"> </span>System<span class="w"> </span>Management<span class="w"> </span><span class="nv">Interface</span><span class="w"> </span><span class="o">=============================</span>
<span class="o">======================================================================================</span>
DCU<span class="w"> </span>Temp<span class="w"> </span>AvgPwr<span class="w"> </span>Perf<span class="w"> </span>PwrCap<span class="w"> </span>VRAM%<span class="w"> </span>DCU%<span class="w"> </span>Mode<span class="w"> </span>
<span class="m">0</span><span class="w"> </span><span class="m">42</span>.0C<span class="w"> </span><span class="m">39</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">1</span><span class="w"> </span><span class="m">41</span>.0C<span class="w"> </span><span class="m">39</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">2</span><span class="w"> </span><span class="m">41</span>.0C<span class="w"> </span><span class="m">36</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">3</span><span class="w"> </span><span class="m">40</span>.0C<span class="w"> </span><span class="m">38</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">4</span><span class="w"> </span><span class="m">40</span>.0C<span class="w"> </span><span class="m">39</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">5</span><span class="w"> </span><span class="m">41</span>.0C<span class="w"> </span><span class="m">41</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">6</span><span class="w"> </span><span class="m">42</span>.0C<span class="w"> </span><span class="m">37</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span>Normal<span class="w"> </span>
<span class="m">7</span><span class="w"> </span><span class="m">41</span>.0C<span class="w"> </span><span class="m">36</span>.0W<span class="w"> </span>auto<span class="w"> </span><span class="m">280</span>.0W<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="m">0</span>%<span class="w"> </span><span class="nv">Normal</span><span class="w"> </span>
<span class="o">======================================================================================</span>
<span class="o">===================================</span><span class="w"> </span>End<span class="w"> </span>of<span class="w"> </span>SMI<span class="w"> </span><span class="nv">Log</span><span class="w"> </span><span class="o">===================================</span>
</pre></div>
</div>
</li>
</ol>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
<a href="centos.html" class="btn btn-neutral float-left" title="2 DCU基础环境完整教程-Centos7.6:" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
<a href="../Anaconda_Docker.html" class="btn btn-neutral float-right" title="1 基于Anaconda的DCU使用示例:" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>搜索 &mdash; DCU 0.2.0 文档</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/copybutton.css" type="text/css" />
<link rel="stylesheet" href="_static/css/readthedocs.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/clipboard.min.js"></script>
<script src="_static/copybutton.js"></script>
<script src="_static/translations.js"></script>
<script src="https://cdn.jsdelivr.net/npm/d3@7.9.0/dist/d3.min.js"></script>
<script type="module">import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@11.12.1/dist/mermaid.esm.min.mjs";
const initStyles = () => {
const defaultStyle = document.createElement('style');
defaultStyle.textContent = `pre.mermaid {
/* Same as .mermaid-container > pre */
display: block;
width: 100%;
}
pre.mermaid > svg {
/* Same as .mermaid-container > pre > svg */
height: 500px;
width: 100%;
max-width: 100% !important;
}`;
document.head.appendChild(defaultStyle);
const fullscreenStyle = document.createElement('style');
fullscreenStyle.textContent = `.mermaid-container {
display: flex;
flex-direction: row;
width: 100%;
}
.mermaid-container > pre {
display: block;
width: 100%;
}
.mermaid-container > pre > svg {
height: 500px;
width: 100%;
max-width: 100% !important;
}
.mermaid-fullscreen-btn {
width: 28px;
height: 28px;
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(0, 0, 0, 0.3);
border-radius: 4px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
font-size: 14px;
line-height: 1;
padding: 0;
color: #333;
}
.mermaid-fullscreen-btn:hover {
opacity: 100% !important;
background: rgba(255, 255, 255, 1);
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
transform: scale(1.1);
}
.mermaid-fullscreen-btn.dark-theme {
background: rgba(50, 50, 50, 0.95);
border: 1px solid rgba(255, 255, 255, 0.3);
color: #e0e0e0;
}
.mermaid-fullscreen-btn.dark-theme:hover {
background: rgba(60, 60, 60, 1);
box-shadow: 0 3px 10px rgba(255, 255, 255, 0.2);
}
.mermaid-fullscreen-modal {
display: none;
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 95vw;
height: 100vh;
background: rgba(255, 255, 255, 0.98);
z-index: 9999;
padding: 20px;
overflow: auto;
}
.mermaid-fullscreen-modal.dark-theme {
background: rgba(0, 0, 0, 0.98);
}
.mermaid-fullscreen-modal.active {
display: flex;
align-items: center;
justify-content: center;
}
.mermaid-container-fullscreen {
position: relative;
width: 95vw;
height: 90vh;
max-width: 95vw;
max-height: 90vh;
background: white;
border-radius: 8px;
padding: 20px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
overflow: auto;
display: flex;
align-items: center;
justify-content: center;
}
.mermaid-container-fullscreen.dark-theme {
background: #1a1a1a;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.8);
}
.mermaid-container-fullscreen pre.mermaid {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.mermaid-container-fullscreen .mermaid svg {
height: 100% !important;
width: 100% !important;
cursor: grab;
}
.mermaid-fullscreen-close {
position: fixed !important;
top: 20px !important;
right: 20px !important;
width: 40px;
height: 40px;
background: rgba(255, 255, 255, 0.95);
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 50%;
cursor: pointer;
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
transition: all 0.2s;
font-size: 24px;
line-height: 1;
color: #333;
}
.mermaid-fullscreen-close:hover {
background: white;
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);
transform: scale(1.1);
}
.mermaid-fullscreen-close.dark-theme {
background: rgba(50, 50, 50, 0.95);
border: 1px solid rgba(255, 255, 255, 0.2);
color: #e0e0e0;
}
.mermaid-fullscreen-close.dark-theme:hover {
background: rgba(60, 60, 60, 1);
box-shadow: 0 6px 16px rgba(255, 255, 255, 0.2);
}
.mermaid-fullscreen-modal .mermaid-fullscreen-btn {
display: none !important;
}`;
document.head.appendChild(fullscreenStyle);
}
// Detect if page has dark background
const isDarkTheme = () => {
// We use a set of heuristics:
// 1. Check for common dark mode classes or attributes
// 2. Check computed background color brightness
if (document.documentElement.classList.contains('dark') ||
document.documentElement.getAttribute('data-theme') === 'dark' ||
document.body.classList.contains('dark') ||
document.body.getAttribute('data-theme') === 'dark') {
// console.log("Dark theme detected via class/attribute");
return true;
}
if (document.documentElement.classList.contains('light') ||
document.documentElement.getAttribute('data-theme') === 'light' ||
document.body.classList.contains('light') ||
document.body.getAttribute('data-theme') === 'light') {
// console.log("Light theme detected via class/attribute");
return false;
}
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
// console.log("Dark theme detected via prefers-color-scheme");
return true;
}
const bgColor = window.getComputedStyle(document.body).backgroundColor;
const match = bgColor.match(/rgb\((\d+),\s*(\d+),\s*(\d+)/);
if (match) {
const r = parseInt(match[1]);
const g = parseInt(match[2]);
const b = parseInt(match[3]);
const brightness = (r * 299 + g * 587 + b * 114) / 1000;
// console.log("Background color brightness:", brightness);
return brightness < 128;
}
// console.log("No dark or light theme detected, defaulting to light theme");
return false;
};
let darkTheme = isDarkTheme();
let modal = null;
let modalContent = null;
let previousScrollOffset = [window.scrollX, window.scrollY];
const runMermaid = async (rerun) => {
console.log("Running mermaid diagrams, rerun =", rerun);
// clear all existing mermaid charts
let all_mermaids = document.querySelectorAll(".mermaid");
if (rerun) {
all_mermaids.forEach((el) => {
if(!el.hasAttribute("data-original-code")) {
// store original code
// console.log(`Storing original code for first run: `, el.innerHTML);
el.setAttribute('data-original-code', el.innerHTML);
}
if(el.getAttribute("data-processed") === "true") {
// remove and restore original
el.removeAttribute("data-processed");
// console.log(`Restoring original code for re-run: `, el.getAttribute('data-original-code'));
el.innerHTML = el.getAttribute('data-original-code');
} else {
// store original code
// console.log(`Storing original code for re-run: `, el.innerHTML);
el.setAttribute('data-original-code', el.innerHTML);
}
});
await mermaid.run();
}
all_mermaids = document.querySelectorAll(".mermaid");
const mermaids_processed = document.querySelectorAll(".mermaid[data-processed='true']");
if ("False" === "True") {
const mermaids_to_add_zoom = -1 === -1 ? all_mermaids.length : -1;
if(mermaids_to_add_zoom > 0) {
var svgs = d3.selectAll("");
if(all_mermaids.length !== mermaids_processed.length) {
setTimeout(() => runMermaid(false), 200);
return;
} else if(svgs.size() !== mermaids_to_add_zoom) {
setTimeout(() => runMermaid(false), 200);
return;
} else {
svgs.each(function() {
var svg = d3.select(this);
svg.html("<g class='wrapper'>" + svg.html() + "</g>");
var inner = svg.select("g");
var zoom = d3.zoom().on("zoom", function(event) {
inner.attr("transform", event.transform);
});
svg.call(zoom);
});
}
}
} else if(all_mermaids.length !== mermaids_processed.length) {
// Wait for mermaid to process all diagrams
setTimeout(() => runMermaid(false), 200);
return;
}
// Stop here if not adding fullscreen capability
if ("True" !== "True") return;
if (modal !== null ) {
// Destroy existing modal
modal.remove();
modal = null;
modalContent = null;
}
modal = document.createElement('div');
modal.className = 'mermaid-fullscreen-modal' + (darkTheme ? ' dark-theme' : '');
modal.setAttribute('role', 'dialog');
modal.setAttribute('aria-modal', 'true');
modal.setAttribute('aria-label', 'Fullscreen diagram viewer');
modal.innerHTML = `
<button class="mermaid-fullscreen-close${darkTheme ? ' dark-theme' : ''}" aria-label="Close fullscreen">✕</button>
<div class="mermaid-container-fullscreen${darkTheme ? ' dark-theme' : ''}"></div>
`;
document.body.appendChild(modal);
modalContent = modal.querySelector('.mermaid-container-fullscreen');
const closeBtn = modal.querySelector('.mermaid-fullscreen-close');
const closeModal = () => {
modal.classList.remove('active');
modalContent.innerHTML = '';
document.body.style.overflow = ''
window.scrollTo({left: previousScrollOffset[0], top: previousScrollOffset[1], behavior: 'instant'});
};
closeBtn.addEventListener('click', closeModal);
modal.addEventListener('click', (e) => {
if (e.target === modal) closeModal();
});
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && modal.classList.contains('active')) {
closeModal();
}
});
document.querySelectorAll('.mermaid').forEach((mermaidDiv) => {
if (mermaidDiv.parentNode.classList.contains('mermaid-container') ||
mermaidDiv.closest('.mermaid-fullscreen-modal')) {
// Already processed, adjust button class if needed
const existingBtn = mermaidDiv.parentNode.querySelector('.mermaid-fullscreen-btn');
if (existingBtn) {
existingBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
}
return;
}
const container = document.createElement('div');
container.className = 'mermaid-container';
mermaidDiv.parentNode.insertBefore(container, mermaidDiv);
container.appendChild(mermaidDiv);
const fullscreenBtn = document.createElement('button');
fullscreenBtn.className = 'mermaid-fullscreen-btn' + (darkTheme ? ' dark-theme' : '');
fullscreenBtn.setAttribute('aria-label', 'View diagram in fullscreen');
fullscreenBtn.textContent = '';
fullscreenBtn.style.opacity = '50%';
// Calculate dynamic position based on diagram's margin and padding
const diagramStyle = window.getComputedStyle(mermaidDiv);
const marginTop = parseFloat(diagramStyle.marginTop) || 0;
const marginRight = parseFloat(diagramStyle.marginRight) || 0;
const paddingTop = parseFloat(diagramStyle.paddingTop) || 0;
const paddingRight = parseFloat(diagramStyle.paddingRight) || 0;
fullscreenBtn.style.top = `${marginTop + paddingTop + 4}px`;
fullscreenBtn.style.right = `${marginRight + paddingRight + 4}px`;
fullscreenBtn.addEventListener('click', () => {
previousScrollOffset = [window.scroll, window.scrollY];
const clone = mermaidDiv.cloneNode(true);
modalContent.innerHTML = '';
modalContent.appendChild(clone);
const svg = clone.querySelector('svg');
if (svg) {
svg.removeAttribute('width');
svg.removeAttribute('height');
svg.style.width = '100%';
svg.style.height = 'auto';
svg.style.maxWidth = '100%';
svg.style.sdisplay = 'block';
if ("False" === "True") {
setTimeout(() => {
const g = svg.querySelector('g');
if (g) {
var svgD3 = d3.select(svg);
svgD3.html("<g class='wrapper'>" + svgD3.html() + "</g>");
var inner = svgD3.select("g");
var zoom = d3.zoom().on("zoom", function(event) {
inner.attr("transform", event.transform);
});
svgD3.call(zoom);
}
}, 100);
}
}
modal.classList.add('active');
document.body.style.overflow = 'hidden';
});
container.appendChild(fullscreenBtn);
});
};
const load = async () => {
initStyles();
await runMermaid(true);
const reRunIfThemeChanges = async () => {
const newDarkTheme = isDarkTheme();
if (newDarkTheme !== darkTheme) {
darkTheme = newDarkTheme;
console.log("Theme change detected, re-running mermaid with", darkTheme ? "dark" : "default", "theme");
await mermaid.initialize(
{...JSON.parse(
`{"startOnLoad": false}`
),
...{ darkMode: darkTheme, theme: darkTheme ? 'dark' : 'default' },
}
);
await runMermaid(true);
}
};
// Update theme classes when theme changes
const themeObserver = new MutationObserver(reRunIfThemeChanges);
themeObserver.observe(document.documentElement, {
attributes: true,
attributeFilter: ['class', 'style', 'data-theme']
});
themeObserver.observe(document.body, {
attributes: true,
attributeFilter: ['class', 'style', 'data-theme']
});
};
console.log("Initializing mermaid with", darkTheme ? "dark" : "default", "theme");
mermaid.initialize(
{...JSON.parse(
`{"startOnLoad": false}`
),
...{ darkMode: darkTheme, theme: darkTheme ? 'dark' : 'default' },
}
);
window.addEventListener("load", load);
window.runMermaid = runMermaid;</script>
<script src="_static/js/theme.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="索引" href="genindex.html" />
<link rel="search" title="搜索" href="#" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
DCU
</a>
<div class="version">
0.2.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="#" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<p class="caption" role="heading"><span class="caption-text">基础介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="get_started.html">操作系统版本兼容列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#dcu">支持的DCU型号</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id2">DCU软件介绍:</a></li>
<li class="toctree-l1"><a class="reference internal" href="get_started.html#id3"><strong>兼容性(必读)</strong></a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">资源下载地址</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="download.html">下载中心:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">构建DCU基础环境</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/base_install_intro.html">1. 开发者社区 DCU 环境安装手册</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/centos.html"><strong>2 DCU基础环境完整教程-Centos7.6</strong>:</a></li>
<li class="toctree-l1"><a class="reference internal" href="install_dcu_on_os/ubuntu.html"><strong>3 DCU基础环境完整教程-ubuntu</strong>:</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">快速使用 DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html">1 基于Anaconda的DCU使用示例:</a></li>
<li class="toctree-l1"><a class="reference internal" href="Anaconda_Docker.html#dockerdcu">2 基于Docker使用DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">hy-smi 使用介绍</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Hy-SMI.html">hy-smi 使用介绍</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">从NV的GPU迁移到DCU</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="NV_GPU_TO_DCU.html">1 从NV的GPU迁移到DCU</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">CUDA 与 HIP 移植常见问题</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html">问题一、纹理内存报错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#launch-bounds-256">问题二、 launch bounds (256) 报错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#asm">问题三、asm 代码,内联汇编代码编译报错;</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#cuda-math-h">问题四、 cuda应用不转码适配找不到 math.h 头文件</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#pycuda-cu">问题五、使用开源的pycuda 无法编译 cu文件</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#cu">问题六、如何针对一个文件夹的cu代码进行转码</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#hip">问题七、hip转码后部分宏定义不规范不会被转换,可能导致出现问题:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#math-constants-h">问题八、 math_constants.h 找不到:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#hip-min">问题九、转码后部分hip核函数不识别 min:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#dtk-25-04">问题十、使用 DTK-25.04 之后的软件栈编译报头文件错:</a></li>
<li class="toctree-l1"><a class="reference internal" href="faq_cuda_hip.html#g-hipruntime-hipmallochipmemcpy">问题十一、g++ 编译 hipRuntime(hipMalloc、hipMemcpy)等接口代码,编译报错:</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">DCU</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">搜索</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<noscript>
<div id="fallback" class="admonition warning">
<p class="last">
请启用 JavaScript 以便使用搜索功能
</p>
</div>
</noscript>
<div id="search-results">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2024-now, DCU User.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
<a href="https://readthedocs.org">Read the Docs</a> 开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
<script>
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script id="searchindexloader"></script>
</body>
</html>
\ No newline at end of file
Search.setIndex({"docnames": ["Anaconda_Docker", "Hy-SMI", "NV_GPU_TO_DCU", "download", "faq_cuda_hip", "get_started", "index", "install_dcu_on_os/base_install_intro", "install_dcu_on_os/centos", "install_dcu_on_os/ubuntu"], "filenames": ["Anaconda_Docker.md", "Hy-SMI.md", "NV_GPU_TO_DCU.md", "download.md", "faq_cuda_hip.md", "get_started.md", "index.rst", "install_dcu_on_os/base_install_intro.md", "install_dcu_on_os/centos.md", "install_dcu_on_os/ubuntu.md"], "titles": ["1 \u57fa\u4e8eAnaconda\u7684DCU\u4f7f\u7528\u793a\u4f8b:", "hy-smi \u4f7f\u7528\u4ecb\u7ecd", "1 \u4eceNV\u7684GPU\u8fc1\u79fb\u5230DCU", "\u4e0b\u8f7d\u4e2d\u5fc3:", "\u95ee\u9898\u4e00\u3001\u7eb9\u7406\u5185\u5b58\u62a5\u9519\uff1a", "\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\u517c\u5bb9\u5217\u8868", "\u6b22\u8fce\u6765\u5230 DCU \u7684\u73af\u5883\u5b89\u88c5\u6559\u7a0b\uff01", "1. \u5f00\u53d1\u8005\u793e\u533a DCU \u73af\u5883\u5b89\u88c5\u624b\u518c", "<strong>2 DCU\u57fa\u7840\u73af\u5883\u5b8c\u6574\u6559\u7a0b-Centos7.6</strong>:", "<strong>3 DCU\u57fa\u7840\u73af\u5883\u5b8c\u6574\u6559\u7a0b-ubuntu</strong>:"], "terms": {"conda": 0, "creat": 0, "dcu_test": 0, "python": [0, 5, 8], "10": [0, 4, 5, 8], "activ": 0, "pip3": [0, 2], "config": [0, 2, 8, 9], "set": [0, 2], "global": [0, 2], "index": [0, 2], "url": [0, 2], "https": [0, 2, 4, 8, 9], "pypi": [0, 2], "tuna": [0, 2], "tsinghua": [0, 2], "edu": [0, 2, 8], "cn": [0, 2, 4, 8], "simpl": [0, 2, 9], "das": [0, 3, 6], "whl": [0, 2, 5], "instal": [0, 2, 8, 9], "import": 0, "print": 0, "cuda": [0, 2], "is_avail": 0, "device_count": 0, "git": [0, 8, 9], "clone": 0, "http": [0, 8, 9], "develop": [0, 2, 4], "hpccube": [0, 2, 8, 9], "com": [0, 2, 8, 9], "code": 0, "wangkx1": 0, "torch_inference_resnet50": 0, "cd": 0, "torch_verifi": 0, "py": [0, 4], "sourcefind": [0, 2], "servic": 0, "list": [0, 2, 8, 9], "dtk": [0, 2, 3, 6, 7], "vllm": [0, 2], "lmdeploy": 0, "fastllm": 0, "migraphx": 0, "aitempl": 0, "cat": 0, "etc": [0, 8, 9], "os": [0, 3, 6, 8, 9], "releas": [0, 8], "pull": 0, "imag": [0, 9], "5000": 0, "admin": 0, "base": [0, 9], "ubuntu20": [0, 9], "04": [0, 5, 6, 8, 9], "dtk24": [0, 8], "py3": 0, "run": [0, 3, 6, 8, 9], "it": 0, "network": 0, "host": 0, "ipc": 0, "shm": 0, "size": 0, "16g": 0, "devic": 0, "dev": [0, 9], "kfd": 0, "mkfd": 0, "dri": 0, "opt": [0, 8, 9], "hyhal": 0, "your_path": 0, "workspac": 0, "group": [0, 9], "add": [0, 4], "video": [0, 8, 9], "cap": 0, "sys_ptrac": 0, "secur": [0, 9], "seccomp": 0, "unconfin": 0, "name": [0, 4, 8, 9], "bin": [0, 8], "bash": 0, "libhsa": 0, "runtim": 0, "none": 0, "shareabl": 0, "24g": 0, "dtk23": 0, "net_admin": 0, "label": 0, "disabl": [0, 8, 9], "custom": 0, "alphafold2": 0, "py38": 0, "shell": [0, 9], "dcu": [1, 3, 4], "temp": [1, 8, 9], "avgpwr": [1, 8, 9], "perf": [1, 8, 9], "pwrcap": [1, 8, 9], "varm": 1, "mode": [1, 8, 9], "normal": [1, 8, 9], "showproductnam": 1, "showpid": 1, "showpiddcus": 1, "showdriververs": 1, "vbio": [1, 8, 9], "showmeminfo": 1, "vram": [1, 8, 9], "tool": 2, "pip": [2, 8, 9], "modelzoo": 2, "readm": 2, "model": 2, "zoo": 2, "ai": [2, 6, 8, 9], "bert": 2, "yolo": 2, "resnet": 2, "qwen": 2, "llama": 2, "lmdpeloy": 2, "exampl": 2, "yolov10": 2, "rep_vit": 2, "alphafold2_jax": 2, "llama3": 2, "stablediffusion_v2": 2, "qwen1": 2, "latest": [3, 6, 8, 9], "rock": [3, 6, 8, 9], "xxx": [3, 6, 8, 9], "aio": [3, 6, 8, 9], "version": [3, 5, 6, 8, 9], "x86_64": [3, 5, 6, 8, 9], "tar": [3, 6, 8, 9], "gz": [3, 6, 8, 9], "kubernet": [3, 6], "hyqual": [3, 6], "iso": 5, "cento": [5, 8], "957": [5, 8], "el7": 5, "18": [5, 8, 9], "348": 5, "el8": 5, "rocki": 5, "ubuntu": [5, 6], "20": 5, "42": [5, 8, 9], "generic": [5, 9], "22": [5, 9], "15": [5, 9], "25": [5, 6, 9], "nfs": 5, "19": 5, "113": 5, "14": [4, 5], "nfs4": 5, "desktop": 5, "49": [5, 8, 9], "uos": 5, "1021e": 5, "90": 5, "2109": 5, "0108": 5, "up2": 5, "uel20": 5, "kylin": 5, "v10": 5, "sp2": 5, "24": [5, 8, 9], "v2101": 5, "ky10": 5, "anoli": 5, "91": 5, "23": 5, "an8": 5, "26": 5, "openeul": 5, "03": 5, "60": 5, "50": [5, 8, 9], "oe2203": 5, "bclinux": 5, "240": 5, "11": [4, 5], "el8_2": 5, "z100": [5, 8, 9], "z100l": [5, 8, 9], "k100": [5, 8, 9], "k100_ai": [5, 8, 9], "softwar": 5, "stack": 5, "gt": 5, "21": 5, "das1": 5, "ubuntu18": 5, "centos7": [5, 6, 9], "glibc": 5, "31": [4, 5], "glib": 5, "ldd": 5, "docker": [5, 6], "anaconda": 6, "pytorch": 6, "resnet50": 6, "resetnet50": 6, "pdf": 7, "sudo": [8, 9], "usermod": [8, 9], "ag": [8, 9], "user": [8, 9], "userid": [8, 9], "nomodeset": 8, "lsmod": [8, 9], "grep": [8, 9], "amdgpu": 8, "selinux": 8, "firewalld": 8, "systemctl": 8, "stop": 8, "conf": [8, 9], "main": [8, 9], "exclud": 8, "kernel": [4, 8, 9], "sed": [8, 9], "mirrorlist": 8, "baseurl": 8, "mirror": [8, 9], "org": [4, 8], "releasev": 8, "ustc": 8, "vault": 8, "minorv": 8, "bak": [8, 9], "repo": [8, 9], "cr": 8, "enabl": 8, "python3": [8, 9], "sclo": 8, "devtoolset": 8, "vi": [8, 9], "esc": 8, "wq": 8, "basearch": 8, "gpgcheck": 8, "gpgkey": 8, "file": [4, 8, 9], "pki": 8, "rpm": [8, 9], "gpg": 8, "key": 8, "sig": 8, "rh": 8, "epel": 8, "cmake3": 8, "extra": [8, 9], "packag": [8, 9], "for": [4, 8], "enterpris": 8, "linux": [8, 9], "aliyun": [8, 9], "failovermethod": 8, "prioriti": 8, "debuginfo": 8, "debug": 8, "sourc": [8, 9], "srpms": 8, "cach": [8, 9], "clean": 8, "all": 8, "makecach": 8, "gcc": [8, 9], "build": 8, "autoconf": [8, 9], "devel": 8, "unam": [8, 9], "header": [8, 9], "ln": [8, 9], "usr": [4, 8], "cmake": [4, 8, 9], "scl": 8, "gfortran": [8, 9], "elfutil": [8, 9], "make": [4, 8, 9], "libbabeltrac": [8, 9], "pciutil": [8, 9], "libpciaccess": [8, 9], "numactl": 8, "libelf": [8, 9], "mesa": [8, 9], "libgl": 8, "lib": 8, "perl": [4, 8, 9], "which": [8, 9], "basedir": [8, 9], "copi": [8, 9], "recurs": [8, 9], "java": 8, "openjdk": 8, "wheel": [8, 9], "sqlite": 8, "libibverb": 8, "redhat": 8, "lsb": 8, "core": 8, "gettext": [8, 9], "protobuf": 8, "digest": [8, 9], "md5": [8, 9], "data": [4, 8, 9], "dumper": [8, 9], "vim": [8, 9], "common": [8, 9], "curl": [8, 9], "libcurl": 8, "doxygen": [8, 9], "graphviz": [8, 9], "texliv": [8, 9], "xtab": 8, "multirow": 8, "sectsti": 8, "tocloft": 8, "adjustbox": 8, "deltarpm": 8, "tcl": [8, 9], "automak": [8, 9], "rpm_dtk2404_centos7": 8, "6_3": 8, "pan": [8, 9], "baidu": [8, 9], "1jnwfddl4lhwvqb3btd34iw": [8, 9], "pwd": [8, 9], "wj6q": [8, 9], "localyum": 8, "local": 8, "disablerepo": 8, "enablerepo": 8, "1d94": [8, 9], "55b7": [8, 9], "62b7": [8, 9], "6210": [8, 9], "sugontest79": [8, 9], "mnt": [8, 9], "lspci": [8, 9], "nn": [8, 9], "07": [8, 9], "00": [8, 9], "display": [8, 9], "control": [8, 9], "0380": [8, 9], "chengdu": [8, 9], "haiguang": [8, 9], "ic": [8, 9], "design": [8, 9], "co": [8, 9], "ltd": [8, 9], "zifang": [8, 9], "rev": [8, 9], "01": [8, 9], "0a": [8, 9], "processor": [8, 9], "0b40": [8, 9], "kongm": [8, 9], "profil": 8, "sh": [4, 8, 9], "cancon": [8, 9], "65024": [8, 9], "chmod": [8, 9], "755": [8, 9], "13": [8, 9], "v1": [8, 9], "1a": [8, 9], "reboot": [8, 9], "b04r3n02": [8, 9], "hydcu": [8, 9], "1435342": [8, 9], "hydcu_sch": [8, 9], "34432": [8, 9], "hyttm": [8, 9], "61919": [8, 9], "hykcl": [8, 9], "46567": [8, 9], "hy_extra": [8, 9], "32140": [8, 9], "amd_iommu_v2": [8, 9], "18821": [8, 9], "drm_kms_helper": [8, 9], "179394": [8, 9], "ast": [8, 9], "drm": [8, 9], "429744": [8, 9], "ttm": [8, 9], "qa": [8, 9], "rmmod": [8, 9], "xvf": [8, 9], "env": [8, 9], "echo": [8, 9], "bashrc": [8, 9], "hy": [8, 9], "smi": [8, 9], "rocm": [8, 9], "h01r4n04": [8, 9], "system": [8, 9], "manag": [8, 9], "interfac": [8, 9], "fan": [8, 9], "0c": [8, 9], "55": [8, 9], "0w": [8, 9], "auto": [8, 9], "450": [8, 9], "58": [8, 9], "end": [8, 9], "of": [4, 8, 9], "log": [8, 9], "rocminfo": [8, 9], "gfx": [8, 9], "gfx906": [8, 9], "gfx926": [8, 9], "gfx928": [8, 9], "amdgcn": [8, 9], "amd": [8, 9], "amdhsa": [8, 9], "sramecc": [8, 9], "xnack": [8, 9], "39": [8, 9], "280": [8, 9], "41": [8, 9], "36": [8, 9], "40": [8, 9], "38": [8, 9], "37": [8, 9], "ubuntu22": 9, "root": 9, "test79": 9, "173": 9, "test": 9, "dpkg": 9, "modul": 9, "ii": 9, "191": 9, "amd64": 9, "sign": 9, "hi": 9, "46": 9, "171": 9, "apt": 9, "10period": 9, "20auto": 9, "upgrad": 9, "period": 9, "updat": 9, "download": 9, "autocleaninterv": 9, "unattend": 9, "hold": 9, "mark": 9, "get": 9, "select": 9, "cp": 9, "deb": 9, "focal": 9, "restrict": 9, "univers": 9, "multivers": 9, "src": [4, 9], "propos": 9, "backport": 9, "archiv": 9, "huaweicloud": 9, "wget": 9, "libdrm": 9, "kmod": 9, "libtinfo5": 9, "sqlite3": 9, "libsqlite3": 9, "libibverbs1": 9, "libgtk2": 9, "libnuma": 9, "libgl1": 9, "rsync": 9, "util": 9, "libpci": 9, "pkg": 9, "libfil": 9, "libprotobuf": 9, "libio": 9, "libdigest": 9, "libdata": 9, "libcurlpp": 9, "libncurses5": 9, "msgpack": 9, "mlocat": 9, "deb_dtk2404_ubuntu20": 9, "1_5": 9, "myrepo": 9, "trust": 9, "yes": 9, "my": 9, "debian": 9, "chown": 9, "_apt": 9, "datahr": 9, "man": 9, "var": 9, "udev": 9, "faq": 4, "wkx": 4, "ppl": 4, "cv": 4, "warp": 4, "hpp": 4, "error": 4, "no": 4, "templat": 4, "textur": 4, "static": 4, "float4": 4, "cudatexturetype2d": 4, "3131": 4, "88": 4, "12": 4, "cudatextureobject_t": 4, "cudaresourcedesc": 4, "cudatexturedesc": 4, "param": 4, "1024": 4, "are": 4, "larger": 4, "than": 4, "_zl12rms_norm_f32ili1024eevpkfpfif": 4, "pleas": 4, "launch_bound": 4, "to": 4, "defin": 4, "or": 4, "use": 4, "gpu": 4, "max": 4, "thread": 4, "per": 4, "block": 4, "recompil": 4, "program": 4, "__global__": 4, "__launch_bounds__": 4, "nvcc": 4, "width": 4, "763888888888889in": 4, "height": 4, "8840080927384077in": 4, "ptx": 4, "fnline": 4, "996674321959755in": 4, "9728018372703413in": 4, "isystem": 4, "includ": 4, "verbos": 4, "project": 4, "compil": 4, "ontrack": 4, "hygon": 4, "brows": 4, "csd": 4, "10705": 4, "underlin": 4, "1527777777777778in": 4, "hipconvertinplac": 4, "prehip": 4, "cpp": 4, "cublashandlemanag": 4, "if": 4, "rocm_symlink_hipblas_h": 4, "hipbla": 4, "must": 4, "be": 4, "at": 4, "the": 4, "veri": 4, "top": 4, "ani": 4, "endif": 4, "cublas_v2_h_": 4, "eddymatrixkernel": 4, "void": 4, "qr": 4, "input": 4, "const": 4, "float": 4, "row": 4, "first": 4, "matric": 4, "decompos": 4, "unsign": 4, "int": 4, "number": 4, "column": 4, "nmat": 4, "output": 4, "qt": 4, "mxm": 4, "mxn": 4, "extern": 4, "__shared__": 4, "scratch": 4, "blockidx": 4, "threadidx": 4, "id": 4, "ntpm": 4, "blockdim": 4, "matrix": 4, "lk": 4, "lqt": 4, "lr": 4, "qr_singl": 4, "return": 4, "std": 4, "17": 4, "__hip_platform_amd__": 4, "galaxyhip": 4, "launch": 6, "bound": 6, "256": 6, "asm": 6, "math": 6, "pycuda": 6, "cu": 6, "math_const": 6, "min": 6, "hipruntim": 6, "hipmalloc": 6, "hipmemcpi": 6}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"anaconda": 0, "dcu": [0, 2, 5, 6, 7, 8, 9], "pytorch": 0, "resnet50": 0, "pip": 0, "torch": 0, "torchvis": 0, "resetnet50": 0, "docker": 0, "hy": [1, 6], "smi": [1, 6], "nv": [2, 6], "gpu": [2, 6], "dtk": [4, 5, 8, 9], "das": 5, "ai": 5, "centos7": 8, "root": 8, "yum": 8, "ubuntu": 9, "launch": 4, "bound": 4, "256": 4, "asm": 4, "cuda": [4, 6], "math": 4, "pycuda": 4, "cu": 4, "hip": [4, 6], "math_const": 4, "min": 4, "25": 4, "04": 4, "hipruntim": 4, "hipmalloc": 4, "hipmemcpi": 4}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 57}, "alltitles": {"1 \u57fa\u4e8eAnaconda\u7684DCU\u4f7f\u7528\u793a\u4f8b:": [[0, "anacondadcu"]], "1.1. \u5b89\u88c5Anaconda;": [[0, "anaconda"]], "1.2. \u4f7f\u7528DCU\u5728Pytorch\u63a8\u7406Resnet50\u5206\u7c7b": [[0, "dcupytorchresnet50"]], "1.2.1. \u521b\u5efa\u865a\u62df\u73af\u5883, \u8bbe\u7f6epip\u4e0b\u8f7d\u6e90\u4e3a\u56fd\u5185:": [[0, "pip"]], "1.2.2. \u4ece\u5f00\u53d1\u8005\u793e\u533a\u7684\u4e0b\u8f7dtorch\u3001torchvision;": [[0, "torchtorchvision"]], "1.2.3. \u6267\u884cresetnet50\u5206\u7c7b\u7684\u63a8\u7406\u4ee3\u7801:": [[0, "resetnet50"]], "2 \u57fa\u4e8eDocker\u4f7f\u7528DCU": [[0, "dockerdcu"]], "2.1. \u5b89\u88c5Docker": [[0, "docker"]], "2.2. \u542f\u52a8\u5bb9\u5668": [[0, "id1"]], "2.2.1. \u524d\u7f6e\u6761\u4ef6": [[0, "id2"]], "2.2.2. \u62c9\u53d6\u955c\u50cf": [[0, "id3"]], "2.2.3. \u542f\u52a8\u5bb9\u5668\u547d\u4ee4": [[0, "id4"]], "2.3. \u57fa\u4e8e\u5bb9\u5668\u6267\u884cresetnet50\u5206\u7c7b\u7684\u63a8\u7406\u4ee3\u7801": [[0, "id5"]], "2.3.1. \u9a8c\u8bc1torch\u662f\u5426\u5b89\u88c5\u6210\u529f;": [[0, "torch"]], "2.3.2. \u6267\u884cresetnet50\u5206\u7c7b\u7684\u63a8\u7406\u4ee3\u7801:": [[0, "id6"]], "hy-smi \u4f7f\u7528\u4ecb\u7ecd": [[1, "hy-smi"], [6, null]], "hy-smi \u547d\u4ee4\u8f93\u51fa\u4ecb\u7ecd": [[1, "id1"]], "\u5e38\u7528\u7528\u6cd5:": [[1, "id2"]], "\u66f4\u591a\u7528\u6cd5": [[1, "id3"]], "1 \u4eceNV\u7684GPU\u8fc1\u79fb\u5230DCU": [[2, "nvgpudcu"]], "1.1. \u6784\u5efaDCU\u57fa\u7840\u73af\u5883": [[2, "dcu"]], "1.2. \u66ff\u6362\u6df1\u5ea6\u5b66\u4e60\u7b97\u6cd5\u5305": [[2, "id1"]], "1.3. DCU \u9002\u914d\u6848\u4f8b\uff1a": [[2, "id2"]], "\u4e0b\u8f7d\u4e2d\u5fc3:": [[3, "id1"]], "\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\u517c\u5bb9\u5217\u8868": [[5, "id1"]], "\u652f\u6301\u7684DCU\u578b\u53f7": [[5, "dcu"]], "DCU\u8f6f\u4ef6\u4ecb\u7ecd:": [[5, "id2"]], "\u517c\u5bb9\u6027(\u5fc5\u8bfb)": [[5, "id3"]], "\u52a0\u901f\u5361\u4e0eDTK\u7684\u517c\u5bb9\u6027": [[5, "dtk"]], "DTK\u548cDAS(AI\u751f\u6001\u5305)\u517c\u5bb9\u6027": [[5, "dtkdas-ai"]], "1. \u5f00\u53d1\u8005\u793e\u533a DCU \u73af\u5883\u5b89\u88c5\u624b\u518c": [[7, "dcu"]], "2 DCU\u57fa\u7840\u73af\u5883\u5b8c\u6574\u6559\u7a0b-Centos7.6:": [[8, "dcu-centos7-6"]], "2.1 \u975eroot\u7528\u6237\u5b89\u88c5\u6ce8\u610f\u4e8b\u9879:": [[8, "root"]], "2.2. \u64cd\u4f5c\u7cfb\u7edf\u8bbe\u7f6e\uff1a": [[8, "id1"]], "2.3. \u5173\u95ed\u5185\u6838\u81ea\u52a8\u66f4\u65b0:": [[8, "id2"]], "2.4. \u66f4\u65b0yum\u6e90:": [[8, "yum"]], "2.5. \u5b89\u88c5\u76f8\u5173\u4f9d\u8d56:": [[8, "id3"]], "2.6. \u6821\u9a8c\u7cfb\u7edf\u914d\u7f6e:": [[8, "id4"]], "2.7. \u5b89\u88c5\u9a71\u52a8:": [[8, "id5"]], "2.8. \u5b89\u88c5DTK:": [[8, "dtk"]], "2.9. \u9a8c\u8bc1\u5b89\u88c5\u7ed3\u679c:": [[8, "id6"]], "3 DCU\u57fa\u7840\u73af\u5883\u5b8c\u6574\u6559\u7a0b-ubuntu:": [[9, "dcu-ubuntu"]], "3.1. \u5b89\u88c5\u7cfb\u7edf\u8fc7\u7a0b\u4e2d\u6ce8\u610f:": [[9, "id1"]], "3.2. \u5b89\u88c5\u5b8c\u6210\u7cfb\u7edf\u540e\u7684\u914d\u7f6e": [[9, "id2"]], "3.3. \u66f4\u65b0\u56fd\u5185\u8f6f\u4ef6\u4e0b\u8f7d\u6e90:": [[9, "id3"]], "3.4. \u5b89\u88c5\u76f8\u5173\u4f9d\u8d56:": [[9, "id4"]], "3.5. \u6821\u9a8c\u7cfb\u7edf\u914d\u7f6e:": [[9, "id5"]], "3.6. \u5b89\u88c5\u9a71\u52a8:": [[9, "id6"]], "3.7. \u5b89\u88c5DTK:": [[9, "dtk"]], "3.8. \u9a8c\u8bc1\u5b89\u88c5\u7ed3\u679c:": [[9, "id7"]], "\u95ee\u9898\u4e00\u3001\u7eb9\u7406\u5185\u5b58\u62a5\u9519\uff1a": [[4, "id1"]], "\u89e3\u51b3\u65b9\u6cd5\uff1a": [[4, "id2"], [4, "id3"], [4, "id4"], [4, "id5"], [4, "id6"], [4, "id7"], [4, "id8"], [4, "id9"], [4, "id10"], [4, "id11"], [4, "id12"]], "\u95ee\u9898\u4e8c\u3001 launch bounds (256) \u62a5\u9519\uff1a": [[4, "launch-bounds-256"]], "\u95ee\u9898\u4e09\u3001asm \u4ee3\u7801\uff0c\u5185\u8054\u6c47\u7f16\u4ee3\u7801\u7f16\u8bd1\u62a5\u9519\uff1b": [[4, "asm"]], "\u95ee\u9898\u56db\u3001 cuda\u5e94\u7528\u4e0d\u8f6c\u7801\u9002\u914d\u627e\u4e0d\u5230 math.h \u5934\u6587\u4ef6": [[4, "cuda-math-h"]], "\u95ee\u9898\u4e94\u3001\u4f7f\u7528\u5f00\u6e90\u7684pycuda \u65e0\u6cd5\u7f16\u8bd1 cu\u6587\u4ef6": [[4, "pycuda-cu"]], "\u95ee\u9898\u516d\u3001\u5982\u4f55\u9488\u5bf9\u4e00\u4e2a\u6587\u4ef6\u5939\u7684cu\u4ee3\u7801\u8fdb\u884c\u8f6c\u7801": [[4, "cu"]], "\u95ee\u9898\u4e03\u3001hip\u8f6c\u7801\u540e\u90e8\u5206\u5b8f\u5b9a\u4e49\u4e0d\u89c4\u8303\u4e0d\u4f1a\u88ab\u8f6c\u6362\uff0c\u53ef\u80fd\u5bfc\u81f4\u51fa\u73b0\u95ee\u9898\uff1a": [[4, "hip"]], "\u95ee\u9898\u516b\u3001 math_constants.h \u627e\u4e0d\u5230\uff1a": [[4, "math-constants-h"]], "\u95ee\u9898\u4e5d\u3001\u8f6c\u7801\u540e\u90e8\u5206hip\u6838\u51fd\u6570\u4e0d\u8bc6\u522b min\uff1a": [[4, "hip-min"]], "\u95ee\u9898\u5341\u3001\u4f7f\u7528 DTK-25.04 \u4e4b\u540e\u7684\u8f6f\u4ef6\u6808\u7f16\u8bd1\u62a5\u5934\u6587\u4ef6\u9519\uff1a": [[4, "dtk-25-04"]], "\u95ee\u9898\u5341\u4e00\u3001g++ \u7f16\u8bd1 hipRuntime\uff08hipMalloc\u3001hipMemcpy\uff09\u7b49\u63a5\u53e3\u4ee3\u7801\uff0c\u7f16\u8bd1\u62a5\u9519\uff1a": [[4, "g-hipruntime-hipmallochipmemcpy"]], "\u6b22\u8fce\u6765\u5230 DCU \u7684\u73af\u5883\u5b89\u88c5\u6559\u7a0b\uff01": [[6, "dcu"]], "\u8d44\u6e90\u4e0b\u8f7d:": [[6, "id1"]], "\u6587\u6863": [[6, "id4"]], "\u57fa\u7840\u4ecb\u7ecd": [[6, null]], "\u8d44\u6e90\u4e0b\u8f7d\u5730\u5740": [[6, null]], "\u6784\u5efaDCU\u57fa\u7840\u73af\u5883": [[6, null]], "\u5feb\u901f\u4f7f\u7528 DCU": [[6, null]], "\u4eceNV\u7684GPU\u8fc1\u79fb\u5230DCU": [[6, null]], "CUDA \u4e0e HIP \u79fb\u690d\u5e38\u89c1\u95ee\u9898": [[6, null]], "\u7d22\u5f15\u4e0e\u8868\u683c": [[6, "id5"]]}, "indexentries": {}})
\ No newline at end of file
### 1.2 DCU基础环境完整教程-Ubuntu20.04:
#### 1.2.1 **非root用户安装注意事项:**
#### 1.2.2. **操作系统设置**:
#### 1.2.3. **关闭内核自动更新:**
#### 1.2.4. **更新国内源:**
#### 1.2.5. **安装相关依赖:**
#### 1.2.6. **系统配置:**
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd
sphinx==6.2.1
recommonmark
sphinx-copybutton
sphinx-tabs
sphinx_markdown_tables>=0.0.16
sphinx-rtd-theme==1.3.0
sphinxcontrib-mermaid
docutils>=0.18.1,<0.20
m2r==0.2.1
markdown>=3.4.0
mistune==0.8.4
myst-parser
# -e git+https://github.com/InternLM/pytorch_sphinx_theme.git#egg=pytorch_sphinx_theme
# readthedocs.txt
# accelerate
# mmengine-lite
pillow
pydantic
# torch
# transformers
urllib3<2.0.0
# 1 基于Anaconda的DCU使用示例:
## 1.1. 安装Anaconda;
[Anaconda地址](https://www.anaconda.com/download)
## 1.2. 使用DCU在Pytorch推理Resnet50分类
### 1.2.1. 创建虚拟环境, 设置pip下载源为国内:
```bash
conda create -n dcu_test python=3.10
conda activate dcu_test
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
```
### 1.2.2. 从开发者社区的下载torch、torchvision;
[**DAS生态包下载地址**](https://cancon.hpccube.com:65024/4/main/)
1. 下载torch、torchvision的whl文件到本地;
2. `pip install *.whl`;
3. 验证`torch`是否安装成功;
```shell
python -c "import torch;print(torch.cuda.is_available());print(torch.cuda.device_count())"
```
### 1.2.3. 执行resetnet50分类的推理代码:
```shell
git clone http://developer.hpccube.com/codes/wangkx1/torch_inference_resnet50.git
cd torch_inference_resnet50
python torch_verify.py
```
# 2 基于Docker使用DCU
DCU开发者社区光源镜像介绍:
[https://sourcefind.cn/#/service-list](https://sourcefind.cn/#/service-list)
光源可以查询到基于多种DTK版本的安装的深度学习基础镜像、大模型推理框架(vllm、lmdeploy、fastllm等)镜像、通用模型推理框架镜像(migraphx、AITemplate等)镜像;
## 2.1. 安装Docker
参考当前操作系统的版本号,自行安装docker
查看当前操作系统版本号:
```bash
cat /etc/os-release
```
## 2.2. 启动容器
基于镜像创建的容器可提供开箱即用的基于DCU的深度学习运行环境:
### 2.2.1. 前置条件
1. 安装DCU加速卡,并完成其对应驱动的安装;
2. 正确安装docker;
### 2.2.2. 拉取镜像
```bash
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.0-ubuntu20.04-dtk24.04.1-py3.8
```
### 2.2.3. 启动容器命令
```bash
docker run -it \
--network=host \
--ipc=host \
--shm-size=16G \
--device=/dev/kfd \
--device=/dev/mkfd \
--device=/dev/dri \
-v /opt/hyhal:/opt/hyhal \
-v your_path:/workspace \
--group-add video \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--name=dcu_test \
image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.0-ubuntu20.04-dtk24.04.1-py3.8 \
/bin/bash
注:
(1)若出现libhsa-runtime相关报错,启动参数请加上-v /opt/hyhal:/opt/hyhal*;若物理机无/opt/hyhal,请下载hyhal并解压放置容器/opt/下;*
(2)参数解释:
-it # i:打开容器标准输入,t:分配一个伪终端
--network=host # 连接网络(none|host|自定义网络...)
--ipc=host # 设置IPC模式(none|shareable|host...)
--shm-size=24G # 设置/dev/shm大小
--device=/dev/kfd # 指定访问设备(DCU需要添加/dev/kfd、/dev/mkfd、/dev/dri)
--device=/dev/mkfd
--device=/dev/dri
-v /opt/hyhal:/opt/hyhal # dtk23.10以上版本镜像需要-v挂载物理机目录/opt/hyhal
-v your_path:/workspace # 挂载工作目录
--group-add video # 设置用户附加组(普通用户使用DCU需要)
--cap-add=SYS_PTRACE # 添加权限(SYS_PTRACE|NET_ADMIN...)
--security-opt seccomp=unconfined # 安全配置(seccomp=unconfined|label=disable...)
--name=dcu_test # 容器名称
image.sourcefind.cn:5000/dcu/admin/base/custom:alphafold2-2.3.2-dtk23.10-py38 # 所需镜像
/bin/bash # 容器内启动bash
```
## 2.3. 基于容器执行resetnet50分类的推理代码
### 2.3.1. 验证`torch`是否安装成功;
```shell
python -c "import torch;print(torch.cuda.is_available());print(torch.cuda.device_count())"
```
如果不可用, 从开[发者社区](https://cancon.hpccube.com:65024/4/main/)下载安装torch等你需要的深度学习依赖包;
1. 下载torch、torchvision的whl文件到本地;
2. `pip install *.whl`;
### 2.3.2. 执行resetnet50分类的推理代码:
```shell
git clone http://developer.hpccube.com/codes/wangkx1/torch_inference_resnet50.git
cd torch_inference_resnet50
python torch_verify.py
```
# hy-smi 使用介绍
## hy-smi 命令输出介绍
系统终端输入`hy-smi`得到如下输出:
![hy-smi输出](./imgs/hy_smi.png)
输出内容的每一列的说明
- DCU:0-7 是卡的序号索引
- Temp:DCU卡当前运行的温度
- AvgPwr:平均功耗
- Perf:运行的性能模式
- PwrCap:额定功耗
- VARM%:显存占用率
- DCU%:核心利用率
- Mode:默认模式即为`Normal`,不建议设置其他模式(会影响性能)。
## 常用用法:
- 查看显卡名字:`hy-smi --showproductname`
- 查看当前DCU卡上运行进程占用的资源情况:`hy-smi --showpids`
- 查看指定进程在DCU卡上的资源占用情况: `hy-smi --showpiddcus`
- 查看驱动版本号:`hy-smi --showdriverversion`
- 查看`vbios`版本号:`hy-smi -v`
- 查看具体显存占用情况: `hy-smi --showmeminfo vram`
## 更多用法
更多用法请使用 `hy-smi -h`查看学习使用;
\ No newline at end of file
# 1 从NV的GPU迁移到DCU
## 1.1. 构建DCU基础环境
参考第一部分 `构建DCU基础环境`, 完成 DCU 基础环境构建
## 1.2. 替换深度学习算法包
对于依赖cuda的深度学习算法包,需要替换为光合开发者社区的版本;
开发者社区:[https://developer.hpccube.com/tool](https://developer.hpccube.com/tool)
![AI生态包下载地址](./imgs/das.png)
<!-- <center><img src="./imgs/das.png" alt="AI生态包下载地址" style="zoom:50%;" /></center> -->
**手动下载其中对应算法包的whl文件到您的服务器,安装轮子**
参考如下步骤:
> 注意: 替换算法包的时候,算法包的版本需要和DTK对应;
1. pip 配置国内安装源
```bash
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install pip -U
```
2. 安装轮子
```bash
pip install ***.whl
```
## 1.3. DCU 适配案例:
**DCU开发者社区光源ModelZoo介绍**(可以快速查询所需的DCU算法模型,根据Readme进行构建DCU环境,一键运行所需的算法模型):
[https://sourcefind.cn/#/model-zoo/list](https://sourcefind.cn/#/model-zoo/list)
光源可以查询到基于多种DCU适配的各个AI技术领域的算法模型以及算法框架,如bert、yolo、resnet、Qwen、Llama、vllm、lmdpeloy等等;
**Examples:**
- [YOLOv10](https://sourcefind.cn/#/model-zoo/1802637886774013954)
- [Rep_Vit](https://sourcefind.cn/#/model-zoo/1805170476575846402)
- [alphafold2_jax](https://sourcefind.cn/#/model-zoo/1712346117256200194)
- [llama3](https://sourcefind.cn/#/model-zoo/1782218524112154626)
- [stablediffusion_v2.1](https://sourcefind.cn/#/model-zoo/1793173002231443458)
- [Qwen1.5](https://sourcefind.cn/#/model-zoo/1793160576505180161)
\ No newline at end of file
.blockquote {
background-color: #8f9092; /* 浅灰色背景 */
padding: 1em; /* 可选:增加内边距以改善可读性 */
margin: 1em 0; /* 可选:调整外边距 */
}
.blockquote p {
margin: 0; /* 移除段落之间的默认间距 */
}
.blockquote p:first-child {
margin-top: 0; /* 移除第一个段落的上间距 */
}
.blockquote p:last-child {
margin-bottom: 0; /* 移除最后一个段落的下间距 */
}
.header-logo {
background-image: url("../image/DCU-logo.svg");
background-size: 257px 60px;
height: 60px;
width: 257px;
}
@media screen and (min-width: 1100px) {
.header-logo {
top: -15px;
}
}
pre {
white-space: pre;
}
@media screen and (min-width: 2000px) {
.pytorch-content-left {
width: 1200px;
margin-left: 30px;
}
article.pytorch-article {
max-width: 1200px;
}
.pytorch-breadcrumbs-wrapper {
width: 1200px;
}
.pytorch-right-menu.scrolling-fixed {
position: fixed;
top: 45px;
left: 1580px;
}
}
article.pytorch-article section code {
padding: .2em .4em;
background-color: #f3f4f7;
border-radius: 5px;
}
/* Disable the change in tables */
article.pytorch-article section table code {
padding: unset;
background-color: unset;
border-radius: unset;
}
table.autosummary td {
width: 50%
}
img.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
article.pytorch-article p.rubric {
font-weight: bold;
}
<svg width="407" height="160" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Created with Method Draw - http://github.com/duopixel/Method-Draw/ -->
<g>
<title>background</title>
<rect fill="#ffffff" id="canvas_background" height="162" width="409" y="-1" x="-1"/>
<g display="none" overflow="visible" y="0" x="0" height="100%" width="100%" id="canvasGrid">
<rect fill="url(#gridpattern)" stroke-width="0" y="0" x="0" height="100%" width="100%"/>
</g>
</g>
<g>
<title>Layer 1</title>
<image stroke-dasharray="2,2" stroke="null" xlink:href="data:image/png;base64,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lkCNjRiasMbRzVouqeWVmmdcr1stj1qXTcpnmW3Un42af/Q/Xq9T32t1c4OVfazXK/l286ZC+PZcL+etVjJKd5CXeTRKBzcGf+j9wbrALa+0Hoha3F2CL/FKidwH26BV6jVdKJeiKISvhDoigAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQCEL/D+a+mY3rc5dLgAAAABJRU5ErkJggg==" id="svg_1" height="170" width="497" y="-5" x="-58"/>
</g>
</svg>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment