<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>记忆填埋场</title>
        <link>https://www.sqf.icu/</link>
        <description>ᕕ(◠ڼ◠)ᕗ </description>
        <lastBuildDate>Sat, 07 Mar 2026 05:04:26 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <copyright>All rights reserved 2026, sun510001</copyright>
        <item>
            <title><![CDATA[三维重建纹理映射调研]]></title>
            <link>https://www.sqf.icu/article/3c219494-a951-4b97-b550-04cfd5fef307</link>
            <guid>https://www.sqf.icu/article/3c219494-a951-4b97-b550-04cfd5fef307</guid>
            <pubDate>Mon, 13 Jun 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[三维重建纹理映射调研]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-3c219494a9514b97b55004cfd5fef307"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-20b5778b15ab4d38ab1bca79310b8d71" data-id="20b5778b15ab4d38ab1bca79310b8d71"><span><div id="20b5778b15ab4d38ab1bca79310b8d71" class="notion-header-anchor"></div><a class="notion-hash-link" href="#20b5778b15ab4d38ab1bca79310b8d71" title="纹理映射"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">纹理映射</span></span></h2><div class="notion-text notion-block-9f05f139bf3b41f889649dbe580a5f81">纹理映射 (Texture Mapping) 是一种将物体空间坐标点转化为纹理坐标，进而从纹理上获取对应点的值，以增强着色细节的方法。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-509071161b8b475ba9ee56bd837be369"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:528px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://pic2.zhimg.com/80/v2-e112d8e04c92a2cb91b24ba91bd60175_720w.jpg?spaceId=9b610bc5-196d-4def-949c-4224f64b1345&amp;t=50907116-1b8b-475b-a9ee-56bd837be369" alt="左：网格模型；右：纹理映射后的模型" loading="lazy" decoding="async"/><figcaption class="notion-asset-caption">左：网格模型；右：纹理映射后的模型</figcaption></div></figure><div class="notion-text notion-block-3b7e6c9d417142419f0399dcd9df9945">纹理映射有以下四个步骤，但并不是每个都要使用，只是体现纹理映射可以被灵活操控，以获得我们想要的效果。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1aaa52c87a6b4e498b607c3819d3f628"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://pic4.zhimg.com/80/v2-8b5fc92a339a303857bfe4419749ee2f_720w.jpg?spaceId=9b610bc5-196d-4def-949c-4224f64b1345&amp;t=1aaa52c8-7a6b-4e49-8b60-7c3819d3f628" alt="notion image" loading="lazy" decoding="async"/></div></figure><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-9f90812b0bb34079a154f2e0540f4e22" data-id="9f90812b0bb34079a154f2e0540f4e22"><span><div id="9f90812b0bb34079a154f2e0540f4e22" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9f90812b0bb34079a154f2e0540f4e22" title="1. 投影映射(Projector And Mapping)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1. 投影映射(Projector And Mapping)</span></span></h2><div class="notion-text notion-block-d4eb6e8f457847a397a612081f6252a7">投影映射是将三维的空间坐标点转化为二维的纹理坐标点，方法有两种：</div><ol start="1" class="notion-list notion-list-numbered notion-block-745373e10f724d82a26388431f1c4534" style="list-style-type:decimal"><li><b>Projector</b></li><ol class="notion-list notion-list-numbered notion-block-745373e10f724d82a26388431f1c4534" style="list-style-type:lower-alpha"><div class="notion-text notion-block-4dbfa56ef4364ed6b3187ce94283dc7b">Projector有4种投影方式Plane、Cubic、Cylindrical和Spherical</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-1aa19da13cac4dafb90d9542d6d543d5"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://pic3.zhimg.com/80/v2-b0984e8d8dfdce389f5f87d3ccd86342_720w.jpg?spaceId=9b610bc5-196d-4def-949c-4224f64b1345&amp;t=1aa19da1-3cac-4daf-b90d-9542d6d543d5" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-bab67a4892d74f57bc75318503b67f10" style="list-style-type:decimal"><li><b>UV Mapping</b></li><ol class="notion-list notion-list-numbered notion-block-bab67a4892d74f57bc75318503b67f10" style="list-style-type:lower-alpha"><div class="notion-text notion-block-fa8d879ca5f240a196b5d07fddbd8cd4">Projector 只适用于简单情况，对于更复杂的几何体贴图，往往需要用到 UV Mapping：用于将 3 维模型中的每个顶点与 2 维纹理坐标一一对应。</div></ol></ol><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-6d4d9bbc00904b0584499d3965291e50" data-id="6d4d9bbc00904b0584499d3965291e50"><span><div id="6d4d9bbc00904b0584499d3965291e50" class="notion-header-anchor"></div><a class="notion-hash-link" href="#6d4d9bbc00904b0584499d3965291e50" title="2. 变换函数(Corresponder Function)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. <b>变换函数(Corresponder Function)</b></span></span></h2><details class="notion-toggle notion-block-a1e28cc35a964c41a06756f11600d1a2"><summary><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-a1e28cc35a964c41a06756f11600d1a2" data-id="a1e28cc35a964c41a06756f11600d1a2"><span><div id="a1e28cc35a964c41a06756f11600d1a2" class="notion-header-anchor"></div><span class="notion-h-title">2.1. <b>坐标范围处理</b></span></span></h4></summary><div><div class="notion-text notion-block-651f215ce9b544feb43f3c2e5a65de8f">此时得到的有可能是 [0.25,0.3] 这种在 [0,1] 范围内的值，但也有可能超出了 [0,1] 范围，那么需要对范围外的值进行处理，一般有以下几种方法：<b>Repeat、Mirror、Clamp</b>
 和 <b>Border。</b></div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-8096298b585d4389a333490d76e68812"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fed92086a-a752-455d-acdc-952f006d2a2e%2FUntitled.png?table=block&amp;id=8096298b-585d-4389-a333-490d76e68812&amp;t=8096298b-585d-4389-a333-490d76e68812&amp;width=1074&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details><details class="notion-toggle notion-block-886e02c258874b45ad7467857c20c690"><summary><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-886e02c258874b45ad7467857c20c690" data-id="886e02c258874b45ad7467857c20c690"><span><div id="886e02c258874b45ad7467857c20c690" class="notion-header-anchor"></div><span class="notion-h-title">2.2. <b>坐标自由变换</b></span></span></h4></summary><div><div class="notion-text notion-block-6cb273268a70485c824efb121c6ed954">除了对这些超出范围的 uv 值处理，还可以对其施加“变换”，比如旋转，平移，缩放，比如想让纹理随着时间运动起来，那么就可以逐帧变换 uv 值</div><div class="notion-text notion-block-d598a8666cc34deb908aea316e4dfafa">但要注意的是：<b>对 uv 坐标施加的变换矩阵，往往是实际想要变换的逆矩阵</b></div><div class="notion-text notion-block-eb57303ea9334001a0631919213cd2d3">如：若想让纹理向右偏移 0.5 单位，那么则应该是 u – 0.5 而不是 u + 0.5。就好比是一个窗口去看这张纹理，uv 就是窗口，窗口向左移动，看起来就是纹理向右移动</div></div></details><details class="notion-toggle notion-block-3d20013e312d4a49b3f74d2488deeeac"><summary><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-3d20013e312d4a49b3f74d2488deeeac" data-id="3d20013e312d4a49b3f74d2488deeeac"><span><div id="3d20013e312d4a49b3f74d2488deeeac" class="notion-header-anchor"></div><span class="notion-h-title">2.3. <b>转到纹理空间</b></span></span></h4></summary><div><div class="notion-text notion-block-b8c37b907d744513a44370b6881cc4d2">在对 uv 进行合理变换之后，其范围都落到了 [0,1]，再分别乘以纹理实际的宽高，可得到纹理坐标。比如 uv 坐标为 [0.25,0.3]，纹理的宽高为 [256,256]，那么相乘可得到 [64,76.8]，出现了小数。</div></div></details><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-06af8dae055e422ab4c5d23265af8ad7" data-id="06af8dae055e422ab4c5d23265af8ad7"><span><div id="06af8dae055e422ab4c5d23265af8ad7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#06af8dae055e422ab4c5d23265af8ad7" title="3. 纹理采样(Texture Sampling)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3. <b>纹理采样(Texture Sampling)</b></span></span></h2><ul class="notion-list notion-list-disc notion-block-b89d13a54db049a2975c842b1137b3ce"><li>屏幕或者画布上的一个单元：pixel。</li></ul><ul class="notion-list notion-list-disc notion-block-c37991ce6e00420489f10345efe42ce5"><li>纹理上的一个单元：texel。</li></ul><div class="notion-text notion-block-c5312123c3644a26b4d3346a855bd782">设想一种特殊情况，我们要渲染的物体正面对着我们，刚好画布尺寸与纹理尺寸一致，比如都是 512*512，那么在获取每个 pixel 对应 texel 值时，刚好就能得到整数的纹理坐标，只需要每个 texel 逐个读取即可，不用考虑什么采样与重建。</div><div class="notion-text notion-block-6ceb2038221445b5ac8161d25d3314e9">而实际中，我们会面临纹理过大或者过小两种情况。分两种情况来讨论：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-bce36135045046f09da821dfd9a8dc6d"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:528px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://pic1.zhimg.com/80/v2-d17a12a38717427a0380b6772e2ecbd4_720w.jpg?spaceId=9b610bc5-196d-4def-949c-4224f64b1345&amp;t=bce36135-0450-46f0-9da8-21dfd9a8dc6d" alt="notion image" loading="lazy" decoding="async"/></div></figure><ul class="notion-list notion-list-disc notion-block-80a89d9d3eac42e69e1fb56e3535da3f"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://zhuanlan.zhihu.com/p/361383661">采样原理</a></li></ul><ol start="1" class="notion-list notion-list-numbered notion-block-5ddcb68341eb40b29100d86dbb6ccffb" style="list-style-type:decimal"><li>纹理分辨率过小，需要放大 (Magnification)</li><ol class="notion-list notion-list-numbered notion-block-5ddcb68341eb40b29100d86dbb6ccffb" style="list-style-type:lower-alpha"><div class="notion-text notion-block-b2673e02d433476c972217ce2f796c50">上采样涉及到重建和采样，重建时需要选择滤波器 (filter)：</div><li>最邻近采样 (nearest neighbor)：类似 box 滤波器</li><li>双线性采样 (bilinear)：类似 tent 滤波器</li><li>三次卷积采样 (cubic convolution)：类似 sinc 滤波器的截断近似，因为 sinc 本身是最理想的滤波器，但是宽度是无限，无法实际使用</li><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-f4ed4f382cff4c148674098921f198c6"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://pic2.zhimg.com/80/v2-731837d528b4e13da07f33582c2d6309_720w.jpg?spaceId=9b610bc5-196d-4def-949c-4224f64b1345&amp;t=f4ed4f38-2cff-4c14-8674-098921f198c6" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-fc8ad187a0c04caeb8cdc0d1b6437e28"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://pic4.zhimg.com/80/v2-1a7a3c3c915ea6bb4bf6c567b1e67f8f_720w.jpg?spaceId=9b610bc5-196d-4def-949c-4224f64b1345&amp;t=fc8ad187-a0c0-4cae-b8cd-c0d1b6437e28" alt="notion image" loading="lazy" decoding="async"/></div></figure><ul class="notion-list notion-list-disc notion-block-1a7fcc2ed3c445fbbd4f9aa676e2c314"><li>利用 GPU 的双线性插值特性，实现不同的上采样纹理插值:</li><ul class="notion-list notion-list-disc notion-block-1a7fcc2ed3c445fbbd4f9aa676e2c314"><div class="notion-text notion-block-69af42c5b1664953b974cd7b72e205e1"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://zhuanlan.zhihu.com/p/369977849">https://zhuanlan.zhihu.com/p/369977849</a></div></ul></ul></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-f5d1f7f884ad4d0d86d5ec21a91a0d91" style="list-style-type:decimal"><li>纹理分辨率过大，需要缩小 (Minification)</li><ol class="notion-list notion-list-numbered notion-block-f5d1f7f884ad4d0d86d5ec21a91a0d91" style="list-style-type:lower-alpha"><div class="notion-text notion-block-2384307ddc2d43768613a7fe5e4a85a3">将高分辨率的纹理贴到低分辨率的画布，即一个 pixel 覆盖了多个 texel。</div><ul class="notion-list notion-list-disc notion-block-3d46d37c74aa4647b5548beb277b1ad5"><li><b>纹理采样抗锯齿</b></li><ul class="notion-list notion-list-disc notion-block-3d46d37c74aa4647b5548beb277b1ad5"><li>在放大的情况进行混合时，只考虑了周围四个 texel 的值进行混合，而在缩小的情况中，一个 pixel 覆盖的 texel，个数往往不只 4 个，所以容易出现锯齿。</li><li>需要对纹理进行预处理，建立一种数据结构，在采样时尽可能对 pixel 覆盖的 texel 区域的平均值进行估计。</li><li>三种抗锯齿的方法</li><ul class="notion-list notion-list-disc notion-block-105b889522d44d1caad6269eb0970228"><ol start="1" class="notion-list notion-list-numbered notion-block-b066b52975ea428eb30476adaf38465e" style="list-style-type:decimal"><li><b>Mipmapping</b></li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-60a4b0ca5bd04e8da190051e18a9258d" style="list-style-type:decimal"><li>Summed-Area Table（SAT）</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-338fa5f097b4458e857392e42da0e815" style="list-style-type:decimal"><li>各向异性过滤 (Anisotropic Filtering)</li></ol></ul></ul></ul></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-5035e9070c5b4e0883530babbdda3955" style="list-style-type:decimal"><li><b>Texture Representation 纹理表现形式</b></li><ol class="notion-list notion-list-numbered notion-block-5035e9070c5b4e0883530babbdda3955" style="list-style-type:lower-alpha"><div class="notion-text notion-block-f8ab334978724bbf841a92f2d7064803">有一些方法可以优化处理纹理时的性能</div><ul class="notion-list notion-list-disc notion-block-e1a8ccb5c7394d75867ec899e5a9922e"><li>纹理合图(texture atlas)</li><ul class="notion-list notion-list-disc notion-block-e1a8ccb5c7394d75867ec899e5a9922e"><li>一般使用这个。</li><li>一般程序读取模型的时候，使用的是白模（.obj文件）和纹理合图（.png文件）</li></ul></ul><ul class="notion-list notion-list-disc notion-block-fbcf2bdc0a0d47ff8db381bab0c4876b"><li>纹理数组(texture array)</li></ul><ul class="notion-list notion-list-disc notion-block-ee371c1d519f4d0e8c356b3600a55b48"><li>无绑定纹理(bindless texture)</li></ul><div class="notion-blank notion-block-88e87aaea5ed4660816930b110ed1bcc"> </div></ol></ol><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-749b97a39e0d4bcdb5ecd43caecd92ba" data-id="749b97a39e0d4bcdb5ecd43caecd92ba"><span><div id="749b97a39e0d4bcdb5ecd43caecd92ba" class="notion-header-anchor"></div><a class="notion-hash-link" href="#749b97a39e0d4bcdb5ecd43caecd92ba" title="4. 纹理转换"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4. <b>纹理转换</b></span></span></h2><div class="notion-text notion-block-16422575decd43538d032a9bd19c977d">在通过纹理采样获取纹理值后，并不一定直接将纹理值作为颜色使用，还有其他用途，如在 Normal Mapping 中当作法向量使用，在 Bump Mapping 中当作高度偏移使用，所以还需要对纹理值进行相应的转换。</div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-f1d72c0430de4ce3add2095e8e5e8ebb" data-id="f1d72c0430de4ce3add2095e8e5e8ebb"><span><div id="f1d72c0430de4ce3add2095e8e5e8ebb" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f1d72c0430de4ce3add2095e8e5e8ebb" title="5. 最新论文进展"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">5. 最新论文进展</span></span></h2><ul class="notion-list notion-list-disc notion-block-4eb184aeacbf4e9eb0730ea8ecfbeea9"><li>meshroom使用的方法</li><ul class="notion-list notion-list-disc notion-block-4eb184aeacbf4e9eb0730ea8ecfbeea9"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://dl.acm.org/doi/pdf/10.1145/566654.566590?casa_token=uD01-WLHS5QAAAAA:U8XD9lDoYELlbB9D6JovKu5YzFWTwAPS091ZAH7T1v4RFYArx5to3Ea6oUUHRriTV_nl6ARLng">Lévy B, Petitjean S, Ray N, et al. Least squares conformal maps for automatic texture atlas generation[J]. ACM transactions on graphics (TOG), 2002, 21(3): 362-371.</a></li></ul></ul><ul class="notion-list notion-list-disc notion-block-20dc15b235d94c849b0d7d15d89d5b81"><li><b>UVAtlas - isochart texture atlasing(微软 2004持续更新)</b></li><ul class="notion-list notion-list-disc notion-block-20dc15b235d94c849b0d7d15d89d5b81"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://dl.acm.org/doi/pdf/10.1145/1057432.1057439?casa_token=H3I3ilE9YY0AAAAA:tlvqeWblSTa1N78pNSNxEidaDs22dcjzX_z1JMTgstitkYINHP38QFFrFvFkatdT5xE2VnzbGANbHA">Zhou K, Synder J, Guo B, et al. Iso-charts: stretch-driven mesh parameterization using spectral analysis[C]//Proceedings of the 2004 Eurographics/ACM SIGGRAPH symposium on Geometry processing. 2004: 45-54.</a></li><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/Microsoft/UVAtlas">https://github.com/Microsoft/UVAtlas</a></li></ul></ul><ul class="notion-list notion-list-disc notion-block-c87e2750ebde4c359bddd9ebe5e8dbb7"><li>AtlasNet CVPR2018 ADOBE</li><ul class="notion-list notion-list-disc notion-block-c87e2750ebde4c359bddd9ebe5e8dbb7"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://openaccess.thecvf.com/content_cvpr_2018/papers/Groueix_A_Papier-Mache_Approach_CVPR_2018_paper.pdf">Groueix T, Fisher M, Kim V G, et al. A papier-mâché approach to learning 3d surface generation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 216-224.</a></li><ul class="notion-list notion-list-disc notion-block-aebed7cb84d0483da9ce81bef6c53ba5"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-c6f51a41ae6d4a2fad7a5552e3a8ad49"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F6031a76a-0a46-4d64-8556-7b4454e844de%2FUntitled.png?table=block&amp;id=c6f51a41-ae6d-4a2f-ad7a-5552e3a8ad49&amp;t=c6f51a41-ae6d-4a2f-ad7a-5552e3a8ad49&amp;width=1055&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul><li>开源python：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/ThibaultGROUEIX/AtlasNet">https://github.com/ThibaultGROUEIX/AtlasNet</a></li></ul></ul><ul class="notion-list notion-list-disc notion-block-a0d8f6e99d194922bcd39c7fb3240e54"><li>Texture Fields CVPR2019</li><ul class="notion-list notion-list-disc notion-block-a0d8f6e99d194922bcd39c7fb3240e54"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://openaccess.thecvf.com/content_ICCV_2019/papers/Oechsle_Texture_Fields_Learning_Texture_Representations_in_Function_Space_ICCV_2019_paper.pdf">Oechsle M, Mescheder L, Niemeyer M, et al. Texture fields: Learning texture representations in function space[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019: 4531-4540.</a></li><ul class="notion-list notion-list-disc notion-block-45be85c969e0412294d482a0e0c2cf7f"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-4b736169f0ff40098b099fa3ef1e4220"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fb636784f-9e7b-494f-988c-588f13abc954%2FUntitled.png?table=block&amp;id=4b736169-f0ff-4009-8b09-9fa3ef1e4220&amp;t=4b736169-f0ff-4009-8b09-9fa3ef1e4220&amp;width=1081&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul><li>开源python：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/syb7573330/im2avatar">https://github.com/syb7573330/im2avatar</a></li></ul></ul><ul class="notion-list notion-list-disc notion-block-fe07dc81f0fe4f6a990213b047602930"><li>Xiang CVPR2021</li><ul class="notion-list notion-list-disc notion-block-fe07dc81f0fe4f6a990213b047602930"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://openaccess.thecvf.com/content/CVPR2021/papers/Xiang_NeuTex_Neural_Texture_Mapping_for_Volumetric_Neural_Rendering_CVPR_2021_paper.pdf">Xiang F, Xu Z, Hasan M, et al. Neutex: Neural texture mapping for volumetric neural rendering[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 7119-7128.</a></li><ul class="notion-list notion-list-disc notion-block-253a674ae2bb490887a1cc0affdea361"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-5ac89a93420b4b298be1b08113dcb9da"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F9e4f285a-026c-498d-adad-4dba20961cd2%2FUntitled.png?table=block&amp;id=5ac89a93-420b-4b29-8be1-b08113dcb9da&amp;t=5ac89a93-420b-4b29-8be1-b08113dcb9da&amp;width=299.984375&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-6c34bc8617df46bcaf2d1645566e0571"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:432px;max-width:100%;flex-direction:column"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F5d579122-298a-468c-a157-e78d3420b576%2FUntitled.png?table=block&amp;id=6c34bc86-17df-46bc-af2d-1645566e0571&amp;t=6c34bc86-17df-46bc-af2d-1645566e0571&amp;width=432&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul><li>开源python：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/fbxiang/NeuTex">https://github.com/fbxiang/NeuTex</a></li></ul></ul><ul class="notion-list notion-list-disc notion-block-33755bc7e69444cb8b5a5c416a572b68"><li>Wei ICCV2021</li><ul class="notion-list notion-list-disc notion-block-33755bc7e69444cb8b5a5c416a572b68"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://openaccess.thecvf.com/content/ICCV2021/papers/Wei_Deep_Hybrid_Self-Prior_for_Full_3D_Mesh_Generation_ICCV_2021_paper.pdf">Wei X, Chen Z, Fu Y, et al. Deep Hybrid Self-Prior for Full 3D Mesh Generation[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021: 5805-5814.</a></li><ul class="notion-list notion-list-disc notion-block-fc8adc79c2444f83bea4db9602d15a43"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-9e098cccf4e84725b0e2f7087d3801ee"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ffdf1fa26-0972-4f3e-9bc5-ec4d2492e0ae%2FUntitled.png?table=block&amp;id=9e098ccc-f4e8-4725-b0e2-f7087d3801ee&amp;t=9e098ccc-f4e8-4725-b0e2-f7087d3801ee&amp;width=1033&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-38f81b09b714472fa7fbbd00c2a3bc06"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F8e3c1a16-664f-42ce-9030-f64099309437%2FUntitled.png?table=block&amp;id=38f81b09-b714-472f-a7fb-bd00c2a3bc06&amp;t=38f81b09-b714-472f-a7fb-bd00c2a3bc06&amp;width=299.984375&amp;cache=v2" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul><li>开源python：<a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/weixk2015/DHSP3D">https://github.com/weixk2015/DHSP3D</a></li></ul></ul><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-d306b4a27e164e37a1569c8b307db0be" data-id="d306b4a27e164e37a1569c8b307db0be"><span><div id="d306b4a27e164e37a1569c8b307db0be" class="notion-header-anchor"></div><a class="notion-hash-link" href="#d306b4a27e164e37a1569c8b307db0be" title="参考资料"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">参考资料</span></span></h2><div class="notion-text notion-block-dc0535b3b3e04b23ab899e926628c0f3"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://geometryhub.net/slam#texture">SLAM texture</a></div><div class="notion-text notion-block-760fb10590154cf09b7beb78becbfd76"><b><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://zhuanlan.zhihu.com/p/369977849">图形学基础 - 纹理 - 纹理映射流程</a></b></div><div class="notion-text notion-block-bb3820bb8b9042299d05cb1829e8721e"><b><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://zhuanlan.zhihu.com/p/370927083">图形学基础 - 纹理 - 纹理映射盘点</a></b></div><div class="notion-text notion-block-4855bfb0b18742628ad3cdf591272def">更详细：</div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-7655745957214d98a16202cccdbfdd3a" href="https://zhuanlan.zhihu.com/p/365518995"><div><div class="notion-bookmark-title">六.纹理（Texturing）</div><div class="notion-bookmark-description">这篇笔记是整理的之前看《Real-Time Rendering 4th Edition》这本书的读书笔记~ 纹理通过修改shader计算中的数值来影响最终的着色，纹理图片中的像素我们一般还称之为纹素（texel）。 纹理处理的第一阶段是将一个空间中的坐标转换为纹理坐标，通过一个投影函数（projector function），这个处理被称为texture ...</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fstatic.zhihu.com%2Fheifetz%2Ffavicon.ico?table=block&amp;id=76557459-5721-4d98-a162-02cccdbfdd3a&amp;t=76557459-5721-4d98-a162-02cccdbfdd3a" alt="六.纹理（Texturing）" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://zhuanlan.zhihu.com/p/365518995</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fpic4.zhimg.com%2Fv2-ed22e1270253779099673fd4ccd3e62f_b.jpg?table=block&amp;id=76557459-5721-4d98-a162-02cccdbfdd3a&amp;t=76557459-5721-4d98-a162-02cccdbfdd3a" alt="六.纹理（Texturing）" loading="lazy" decoding="async"/></div></a></div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[大语言模型的推理加速方案]]></title>
            <link>https://www.sqf.icu/article/2a108f6b-06fd-8004-b40a-d0e444ef8883</link>
            <guid>https://www.sqf.icu/article/2a108f6b-06fd-8004-b40a-d0e444ef8883</guid>
            <pubDate>Tue, 04 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[介绍了大语言模型的推理加速方案，LLM inference原理，加速优化，量化。]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-2a108f6b06fd8004b40ad0e444ef8883"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-2a108f6b06fd800991c1cabdafa5b31c" href="https://www.bilibili.com/list/watchlater/?bvid=BV1hcWozpEdk&amp;oid=115412465489382&amp;watchlater_cfg=%7B%22viewed%22%3A0,%22key%22%3A%22%22,%22asc%22%3Afalse%7D&amp;spm_id_from=333.881.0.0"><div><div class="notion-bookmark-title">验证码_哔哩哔哩</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fwww.bilibili.com%2Ffavicon.ico?table=block&amp;id=2a108f6b-06fd-8009-91c1-cabdafa5b31c&amp;t=2a108f6b-06fd-8009-91c1-cabdafa5b31c" alt="验证码_哔哩哔哩" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://www.bilibili.com/list/watchlater/?bvid=BV1hcWozpEdk&amp;oid=115412465489382&amp;watchlater_cfg=%7B%22viewed%22%3A0,%22key%22%3A%22%22,%22asc%22%3Afalse%7D&amp;spm_id_from=333.881.0.0</div></div></div></a></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-2a108f6b06fd80d189f9f18dad0f3d9b" data-id="2a108f6b06fd80d189f9f18dad0f3d9b"><span><div id="2a108f6b06fd80d189f9f18dad0f3d9b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd80d189f9f18dad0f3d9b" title="1. 大语言模型的推理加速方案"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1. 大语言模型的推理加速方案</span></span></h2><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-2a108f6b06fd803ca39be7be22c78596" data-id="2a108f6b06fd803ca39be7be22c78596"><span><div id="2a108f6b06fd803ca39be7be22c78596" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd803ca39be7be22c78596" title="1.1. 为什么KV Cache不在training中使用只在inference中使用"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.1. 为什么KV Cache不在training中使用只在inference中使用</span></span></h3><div class="notion-text notion-block-2a108f6b06fd8053bf1ff100f1579b85">回答：因为训练（Training）和推理（Inference）的计算方式完全不同。</div><div class="notion-text notion-block-2a108f6b06fd805f828deb5106a9d16e">解释：</div><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd800b87b2cbeed21ef368"><li>训练 (Training) 是“并行”的： 为了高效利用 GPU，我们一次性将整个完整序列（例如，一个完整的句子）输入模型，并使用 Causal Mask (注意力掩码) 来防止位置 i 的 token &quot;偷看&quot; 到位置 j &gt; i 的 token。</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd800b87b2cbeed21ef368"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd8047b9befda0c7152b0f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A53b2a13e-afb1-4f08-b3d8-6cf66a3c6458%3Aimage.png?table=block&amp;id=2a108f6b-06fd-8047-b9be-fda0c7152b0f&amp;t=2a108f6b-06fd-8047-b9be-fda0c7152b0f" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80b8b9e3df2f6982c1e9"><li>推理 (Inference) 是“串行”的： 我们一次只生成一个新 token，然后把它添加到输入序列中，再生成下一个。</li></ul><div class="notion-text notion-block-2a108f6b06fd80a59b85f5f9ba0387b2">KV Cache 正是为了优化这种“串行”的、逐字生成的推理过程而设计的。</div><div class="notion-text notion-block-2a108f6b06fd8018b869da988e80ae4d">KV Cache的存储方式</div><div class="notion-text notion-block-2a108f6b06fd8069ae60d5174477bfa8">两个不同的句子是否需要重新计算所有的k和v的矩阵？</div><div class="notion-text notion-block-2a108f6b06fd8018a87bfd40ee59a68a">新的句子中相同的字符是否需要重新计算QKV？</div><div class="notion-text notion-block-2a108f6b06fd8030a4b3dcb7090b8721">回答：是的，必须重新计算。因为同一个词在句中的位置(Positional encoding)和上下文表示(Contextual representation)可能不同。</div><div class="notion-blank notion-block-2a108f6b06fd800b809ec28611e31654"> </div><div class="notion-text notion-block-2a108f6b06fd80e79c67ffc0dce3d177">换一种说法：</div><div class="notion-text notion-block-2a108f6b06fd808588a5ecf14362edb7">p1: what are the two steps in LLM inference?</div><div class="notion-text notion-block-2a108f6b06fd80cd95f4ff833c0712b2">prefill and decode 预填充和解码</div><div class="notion-text notion-block-2a108f6b06fd8000b903fa48a95a9525">由于self-attention, 多个token输入的时候，可以做成keys Matrix x Queries Matrix进行并行计算，</div><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd803b92e3e7919e2fdbda"><li><b>Prefill (预填充) 阶段</b>：负责<b>创建</b>和<b>填充</b>初始的 KV Cache。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd800980bad8e8c976507f"><li><b>Decode (解码) 阶段</b>：负责<b>使用</b>和<b>扩展</b>这个 KV Cache。</li></ul><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80f49055de63c27d10fe"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A67b9e3a4-2090-4c94-8bd5-d1d434bf8fe2%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80f4-9055-de63c27d10fe&amp;t=2a108f6b-06fd-80f4-9055-de63c27d10fe" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80dc8377f7021b920390"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A2a29b2f4-8887-409a-9c91-603d3d646c00%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80dc-8377-f7021b920390&amp;t=2a108f6b-06fd-80dc-8377-f7021b920390" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-2a108f6b06fd8096a843f8637f4a1dee">怎么加速推理？</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd807ab86cd5b2c385b110"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A1a163ee6-dd74-46ae-b036-efe89bc1a3e3%3Aimage.png?table=block&amp;id=2a108f6b-06fd-807a-b86c-d5b2c385b110&amp;t=2a108f6b-06fd-807a-b86c-d5b2c385b110" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-2a108f6b06fd806b84bcd90d9d6c957e">关键在于延迟和吞吐量。</div><div class="notion-text notion-block-2a108f6b06fd803ba33efb25ceb26551"><b>Latency (延迟)</b> 和 <b>Throughput (吞吐量)</b> 是衡量系统性能的两个关键指标，它们描述的是不同的东西：</div><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80a39070e1983a01c235"><li>Latency关注的是响应时间。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8047a984ea560d6a7639"><li>Througtput关注的是单位时间内系统能处理的操作数量(流量)。</li></ul><div class="notion-text notion-block-2a108f6b06fd80dd9c9ed523fbbc778d">提问：</div><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8000858fc1bc55bb7059"><li>Why multi-head attention?</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8000858fc1bc55bb7059"><li>多角度看问题。multi-head attention是设置多个注意力机制，详见子空间。</li></ul></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8072b5e5eced6fb80b01"><li>Theory: subspace 子空间</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8072b5e5eced6fb80b01"><li>每个注意力头都有自己的QKV矩阵</li><li>由于初始化矩阵不同，所以训练后会学到不同的投影方式。（如一个学会动词和主语之间关系，一个学会同义词之间的关联性）</li><li>多个注意力头在各自的小空间里独立学习，最后拼起来。怎么拼起来看下面。</li></ul></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8046a918fac13d417b12"><li>Compute: parallel 并行计算多注意力头</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8046a918fac13d417b12"><li>gpu可以同时计算所有头，不是使用loop。而是批处理矩阵（batched matrix multiply, BMM）。比如原本要输入[BatchSize=2（两句句子）, SeqLen（每句10个词）, 512（模型维度）] [2,10,512]。</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80968d4bf0c4aec5fe3c"><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd8053b21afa06b56a422d" style="list-style-type:decimal"><li>Reshape（逻辑拆分）。将维度拆分成多个头[2,10,8,64]。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80eb994cd50a0bb011a1" style="list-style-type:decimal"><li>Transpose（转置）。<!-- --> 都这么转 [2,8,10,64]。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-2a108f6b06fd809a9256e9442564245e" style="list-style-type:decimal"><li>矩阵乘法。 <!-- --> 中的 <!-- --> [2,8,64,10]。相乘的时候pytorch会自动识别后两维是批次维度，并行处理完结果就是注意力分数矩阵 [2,8,10,10]。</li></ol></ul></ul></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80b89644c611d1fff5c4"><li>How to use CUDA to optimized multi-head attention</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80b89644c611d1fff5c4"><li>由于MHA只有在计算 <!-- --> 的时候是在显存里，读结果的scale, mask,softmax都是在内存，所以有优化空间。</li><li>FlashAttention 是 MHA 优化技术。</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80a79f7ff4da08c5b493"><li>内核融合，将各步骤都融合到一个 CUDA 内核里完成。</li><li>分块（Tiling）：在计算 <!-- --> 的时候，是一个大矩阵，可能放不进片上内存（SRAM，计算速度快）。将这个矩阵分成小块（Tiles），在SRAM上计算每个结果的Softmax，然后累加起来。</li></ul></ul></ul><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-2a108f6b06fd808c94c3fae65054a066" data-id="2a108f6b06fd808c94c3fae65054a066"><span><div id="2a108f6b06fd808c94c3fae65054a066" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd808c94c3fae65054a066" title="1.2. tensor parallelism和pipeline parallelism（并行）"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.2. tensor parallelism和pipeline parallelism（并行）</span></span></h3><div class="notion-text notion-block-2a108f6b06fd800aa7afd5cab472d17e">这两个并行策略的作用：解决大模型过大一张显卡的显存装不下的问题。通过切分模型，分别在不同显卡中运算。</div><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd804d9dcad6f12288bfe5"><li>Pipeline parallelism（流水线并行）：</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd804d9dcad6f12288bfe5"><li>模型纵向切分</li><li>不同GPU处理不同层（GPU1: 1-10Layers, GPU2: 11-20Layers, …）。显卡之间是串行的，一个处理完传输结果到下一个，最后出结果。</li><li>优点：这样所有模型利用率拉满，在训练的时候用效果好。</li><li>缺点：推理的时候延迟很大 <!-- -->。</li></ul></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd805fb1d2cf05298a6f04"><li>Tensor parallelism（张量并行）：</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd805fb1d2cf05298a6f04"><li>模型横向切分</li><li>所有GPU同时在一个Layer上工作，最后拼成结果。</li><li>就是利用了 BMM 的原理，把不同的头分出来，然后装到不同显卡里计算。</li><li>优点：延迟很低 </li><li>缺点：每一层处理的结果都必须共享并求和（All-Reduce），才能进行下一层计算，所以受通信速度的影响（需要NVLink的高速网络进行数据通信）</li></ul></ul><table class="notion-simple-table notion-block-2a108f6b06fd80d3b300e623aee28463"><tbody><tr class="notion-simple-table-row notion-block-2a108f6b06fd8044af17dbd4ecbb5f40"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>特性</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>Tensor Parallelism (TP, 张量并行)</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>Pipeline Parallelism (PP, 流水线并行)</b></div></td></tr><tr class="notion-simple-table-row notion-block-2a108f6b06fd80b190f2eb81a8a14c6c"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>核心思想</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>层内并行</b> (Intra-layer Parallelism)</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>层间并行</b> (Inter-layer Parallelism)</div></td></tr><tr class="notion-simple-table-row notion-block-2a108f6b06fd8080bd5fc0ae9a950f2a"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>切分方式</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>横向切分</b>：把<b>单层</b>的权重矩阵（如 W_Q, W_K, W_V）“切碎”</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>纵向切分</b>：把<b>多层</b>（Layers）“切断”成不同的“阶段” (Stage)</div></td></tr><tr class="notion-simple-table-row notion-block-2a108f6b06fd80f89872d16258188f8c"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>通信开销</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>极高且频繁</b>。每计算完一层，GPU 间都需通信 (All-Reduce)</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>低且不频繁</b>。只在两个“阶段”的边界处通信 (Point-to-Point)</div></td></tr><tr class="notion-simple-table-row notion-block-2a108f6b06fd80c9841cdbdd009efea4"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>带宽依赖</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>极高</b>。必须使用 NVLink 这样的高速总线，基本<b>限于单机</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>较低</b>。可以使用 InfiniBand/Ethernet，可以<b>跨服务器（节点）</b></div></td></tr><tr class="notion-simple-table-row notion-block-2a108f6b06fd8004935fea2082af8f50"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>主要优点</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><span class="notion-red"><b>低延迟</b></span>。所有 GPU 同时计算，响应快。</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><span class="notion-red"><b>高吞吐</b></span><span class="notion-red"> (训练时)</span>。可跨节点扩展，装下超大模型。</div></td></tr><tr class="notion-simple-table-row notion-block-2a108f6b06fd80f88b36c910db3d65e5"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>主要缺点</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><span class="notion-red"><b>扩展性差</b></span>。受限于单机 GPU 数量 (如 8 卡)</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><span class="notion-red"><b>延迟极高</b></span>。串行计算，总延迟是所有阶段之和。</div></td></tr><tr class="notion-simple-table-row notion-block-2a108f6b06fd80be9a94df4e98579bce"><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>关键问题</b></div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">通信是瓶颈。</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell"><b>“流水线气泡”</b> (Bubble)：大量 GPU 处于空闲等待状态。</div></td></tr><tr class="notion-simple-table-row notion-block-2a108f6b06fd80ea9b06ce786c1ad141"><td class="" style="width:120px"><div class="notion-simple-table-cell">设备</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">最好是同一个host，多张显卡</div></td><td class="" style="width:120px"><div class="notion-simple-table-cell">可以是不同host</div></td></tr></tbody></table><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80c7a55dfacf7d07bff5"><li>Sequence parallelism（序列并行）：（最新方案，可输入超长tokens）</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80c7a55dfacf7d07bff5"><li>前面介绍的两种策略TP和PP，在每块GPU中都需要存储和处理<span class="notion-red"><b>完整序列长度（Full Sequence Length）</b></span>的激活值（在训练反向传播时，模型必须在显存里保留所有中间计算结果（Attention layer, FFN layer的输出等），这就是激活值）。而激活值的显存占用量与<b>序列长度</b> <!-- --> （输入的tokens长度）和<b>批次大小</b> <!-- --> （一个GPU同时并行处理的独立样本数量）成正比。所以，当 <!-- --> 很长时，激活值会比模型权重还大，成为新的显存瓶颈。导致就算TP和PP把权重分得再碎，激活值都有可能让显存爆。</li><li>解决方法：既然 <!-- --> 很长，那把 <!-- --> 也切了。</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80bfa95be38973b241fb"><li>问题是，self-attention对于上下文有依赖，切开会破坏这种依赖。</li><li>self-attention有依赖，但是FFM/MLP（前馈网络）的序列没有依赖，对每个token都是独立计算的。</li><li>SP和TP需要一起用。</li><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80acb5bde2f07e53b03d" style="list-style-type:decimal"><li>FFN/MLP layer</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd80acb5bde2f07e53b03d" style="list-style-type:lower-alpha"><li>输入：[S, B, H]</li><li>切分：在输入FFN前，先把输入切成8份。</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd80dab362c0f2dccde9c0" style="list-style-type:lower-roman"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd8013ba76d1ed7acaffb5"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Afa073223-e495-46a4-bfb4-cd63b0c82218%3Aimage.png?table=block&amp;id=2a108f6b-06fd-8013-ba76-d1ed7acaffb5&amp;t=2a108f6b-06fd-8013-ba76-d1ed7acaffb5" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol><li>每个GPU独立计算。</li></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd805dbbbfd91aaf18d9d3" style="list-style-type:decimal"><li>Attention layer</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd805dbbbfd91aaf18d9d3" style="list-style-type:lower-alpha"><li>将所有GPU的FFN结果拼回完整序列，并共享到所有GPU（All-Gather）。</li><li>使用TP策略。</li></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-2a108f6b06fd809996d5feb72256a51f" style="list-style-type:decimal"><li>通信（Reduce-Scatter）：</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd809996d5feb72256a51f" style="list-style-type:lower-alpha"><li>所有GPU执行一次 Reduce-Scatter（求和-分散）。就是所有TP结果相加，然后做切分（第1步的切分成8份）。输入下一个FFN。</li></ol></ol></ul></ul></ul><h4 class="notion-h notion-h3 notion-h-indent-2 notion-block-2a108f6b06fd80659b59faaa56b0452b" data-id="2a108f6b06fd80659b59faaa56b0452b"><span><div id="2a108f6b06fd80659b59faaa56b0452b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd80659b59faaa56b0452b" title="1.2.1. FFN"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.2.1. FFN</span></span></h4><div class="notion-text notion-block-2a108f6b06fd80938932df2364bdb58a">FFN 通常是一个非常简单的<b>两层全连接神经网络 (MLP)</b>：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80eca492fb4d3a579bcc"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A05f17ef1-c17b-45b0-bbb6-c413091be58a%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80ec-a492-fb4d3a579bcc&amp;t=2a108f6b-06fd-80ec-a492-fb4d3a579bcc" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80be8e32fcd3d4d2e47d"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A14b64f4f-f7f5-4dce-96a9-8d695557fb2b%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80be-8e32-fcd3d4d2e47d&amp;t=2a108f6b-06fd-80be-8e32-fcd3d4d2e47d" alt="notion image" loading="lazy" decoding="async"/></div></figure><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-2a108f6b06fd80baa86ef99bb4c390db" data-id="2a108f6b06fd80baa86ef99bb4c390db"><span><div id="2a108f6b06fd80baa86ef99bb4c390db" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd80baa86ef99bb4c390db" title="1.3. Quantization"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.3. Quantization</span></span></h3><div class="notion-text notion-block-2a108f6b06fd802ab64cf664406dbdb6">FP32 → FP4 大幅减少模型参数量来做到加速。</div><div class="notion-text notion-block-2a108f6b06fd8068b00ace84b609c6b1">FP32: -128～+127 （256）</div><div class="notion-text notion-block-2a108f6b06fd80a9ab17d67c8336af07">FP4: -8～+7 （16）</div><div class="notion-text notion-block-2a108f6b06fd8029a9a6f4a294159f7a">操作步骤：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80db8d94c63ff7848151"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Afd279316-0eb8-4f82-8585-4b47949f42b5%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80db-8d94-c63ff7848151&amp;t=2a108f6b-06fd-80db-8d94-c63ff7848151" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd807baef8ee1f3163bb50"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A7584731b-495b-4e83-9d6e-f20aa7fb1d5f%3Aimage.png?table=block&amp;id=2a108f6b-06fd-807b-aef8-ee1f3163bb50&amp;t=2a108f6b-06fd-807b-aef8-ee1f3163bb50" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-2a108f6b06fd8014b5d5e3cb9301fc0b">关键点：在推理时，模型会<b>用 INT8 整数进行极快的矩阵乘法</b>（INT8 计算比 FP32 快得多），只在最后需要输出时，才用 S 和 Z 把结果“反量化”回 FP32。</div><div class="notion-text notion-block-2a108f6b06fd80a48f11fb21b1b7be6f">例子：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80ff97a4c58788950e24"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Acf11a62f-bc1a-4be5-918a-74955c093e47%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80ff-97a4-c58788950e24&amp;t=2a108f6b-06fd-80ff-97a4-c58788950e24" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-2a108f6b06fd8056b917c327603d3f3d">zero point是将量化值和原始值对齐的操作。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80a3818af5584e24ec23"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A5156f1a7-8f07-4472-97b2-8b9809cfc446%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80a3-818a-f5584e24ec23&amp;t=2a108f6b-06fd-80a3-818a-f5584e24ec23" alt="notion image" loading="lazy" decoding="async"/></div></figure><h4 class="notion-h notion-h3 notion-h-indent-2 notion-block-2a108f6b06fd8077b252fcf7f72c9ddd" data-id="2a108f6b06fd8077b252fcf7f72c9ddd"><span><div id="2a108f6b06fd8077b252fcf7f72c9ddd" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd8077b252fcf7f72c9ddd" title="1.3.1. 量化的主要策略"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.3.1. 量化的主要策略</span></span></h4><h4 class="notion-h notion-h3 notion-h-indent-2 notion-block-2a108f6b06fd80df92d5ccabe6dfa8d3" data-id="2a108f6b06fd80df92d5ccabe6dfa8d3"><span><div id="2a108f6b06fd80df92d5ccabe6dfa8d3" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd80df92d5ccabe6dfa8d3" title="1.3.1.1. Post-Trainging Quantization (PTQ - 训练后量化)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.3.1.1. Post-Trainging Quantization (PTQ - 训练后量化)</span></span></h4><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd8012a33cfe81dcb033de" style="list-style-type:decimal"><li>训练高精度模型后，<span class="notion-yellow"><b>冻结参数</b></span>。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd806a9bb4f742b0f11983" style="list-style-type:decimal"><li>小批量样本推理，记录<span class="notion-yellow">每一层</span>的<span class="notion-yellow">权重和激活值</span>矩阵的最大和最小值。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-2a108f6b06fd809f9374de61ed374524" style="list-style-type:decimal"><li>根据量化值和记录的值计算S和Z。</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80fabbcfefdaad91e3d5" style="list-style-type:decimal"><li>所有权重从FP32转换为INT8，甚至INT4。</li></ol><h4 class="notion-h notion-h3 notion-h-indent-2 notion-block-2a108f6b06fd802b9f0ae0700b478525" data-id="2a108f6b06fd802b9f0ae0700b478525"><span><div id="2a108f6b06fd802b9f0ae0700b478525" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd802b9f0ae0700b478525" title="1.3.1.2. Quantization-aware training (QAT - 量化感知训练)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.3.1.2. Quantization-aware training (QAT - 量化感知训练)</span></span></h4><div class="notion-text notion-block-2a108f6b06fd80dd8058d9ae03cd8ed3">由于量化对精度的损失很大，所有需要QAT。</div><div class="notion-text notion-block-2a108f6b06fd8028a932f0877a43c4fb">策略：在<span class="notion-yellow"><b>训练时</b></span>就模拟量化。</div><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd8018b153f3151fa5fedf" style="list-style-type:decimal"><li>前向传播 Forward pass</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd8018b153f3151fa5fedf" style="list-style-type:lower-alpha"><li>拿到FP32权重，量化为INT8，倒回FP32。</li></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80a1816cf14489dffe9c" style="list-style-type:decimal"><li>反向传播 Backward pass</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd80a1816cf14489dffe9c" style="list-style-type:lower-alpha"><li>计算梯度。（注意梯度回绕过round函数，因为它不可导）</li><li>使用梯度更新FP32权重</li></ol></ol><div class="notion-text notion-block-2a108f6b06fd805d97dff508e200883b">这样模型就会在训练中自己优化量化造成的误差。</div><details class="notion-toggle notion-block-2a108f6b06fd8081859af3e82733fd6f"><summary>注意细节：</summary><div><div class="notion-text notion-block-2a108f6b06fd801ab7f9ebaa92d419c1"><span class="notion-yellow"><b>S 和 Z 是针对谁设计的？</b></span></div><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80e08589dbecc39840e0" style="list-style-type:decimal"><li>Per-Tensor（逐张量）</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd80e08589dbecc39840e0" style="list-style-type:lower-alpha"><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd801bb35af97ed621e9fe"><li>就是整个权重只给一组S和Z。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80cbb681f13ca48ee61d"><li>缺点：这样如果权重中有异常值，导致原始值范围巨大 → S 巨大，导致其他值被压缩成0，精度崩塌。</li></ul></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80ae8575d03b6bd3b9c7" style="list-style-type:decimal"><li>Per-Channel / Per-Group（逐通道 / 逐组）</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd80ae8575d03b6bd3b9c7" style="list-style-type:lower-alpha"><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80a1b814f0f0f7d548a3"><li>LLM里的标准做法。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd805da9e8ed886e374f0e"><li>对权重的<span class="notion-yellow"><b>每一行（或每一列）</b></span>都独立计算一组S和Z。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd808f978aff79ea82acdb"><li>比如：nxn的矩阵，会获得n组S和Z。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80c1a9e0d727dc0a4e21"><li>优点： 极大地隔离了异常值，精度保持得非常好。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8038baa5c2de732adcfc"><li>缺点：如下面的矩阵，最后一行转换后值相等了，就会不可取分。</li><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8038baa5c2de732adcfc"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80659dc2f2c0b50bbdda"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A0a2c5dc7-e1d1-49ae-8db4-2b9efe6b8895%3Aimage.png?table=block&amp;id=2a108f6b-06fd-8065-9dc2-f2c0b50bbdda&amp;t=2a108f6b-06fd-8065-9dc2-f2c0b50bbdda" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-2a108f6b06fd80d39d74ec664640e0b8">在LLM上量化会有巨大的损失（这里RTN是指Round-to-Nearest（四舍五入））</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd800f851acaaef21eeac2"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Adc5cfafe-4a9c-49a4-825c-034edb93a2c5%3Aimage.png?table=block&amp;id=2a108f6b-06fd-800f-851a-caaef21eeac2&amp;t=2a108f6b-06fd-800f-851a-caaef21eeac2" alt="notion image" loading="lazy" decoding="async"/></div></figure></ul></ul></ol></ol><div class="notion-text notion-block-2a108f6b06fd8028b4e4d64e46db77f9"><span class="notion-yellow"><b>针对 LLM 的特殊挑战：激活值异常点 (Outliers)</b></span></div><div class="notion-text notion-block-2a108f6b06fd804ba6b3c29616c789cd">LLM 的量化有一个大难题：</div><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80de8844ea3de6d93189"><li><b>权重 (Weights)</b> 很“乖”，是漂亮的正态分布（钟形曲线），很容易量化。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80069e63ffb1c1b084aa"><li><b>激活值 (Activations)</b>（即 MHA 和 FFN 的中间输出）很“野”。它们 99.9% 的值都接近 0，但有几个<b>极其巨大</b>的“异常值”。</li></ul><div class="notion-text notion-block-2a108f6b06fd80cb80e2f3f72a6575c0">这些异常值会毁了 Per-Tensor 的量化。</div><div class="notion-text notion-block-2a108f6b06fd8093a6e6c92df42568d2"><b>解决方案 (如 LLM.int8() / SmoothQuant):</b></div><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8084bdefd22a2de4ae25"><li>这是一种“混合精度”量化。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd801ebf3cea3c8dce6da0"><li>它在计算时，动态地检测出这些“异常值”所在的维度。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80e28cfde52e0e2051a0"><li>99.9% 的“正常”计算用 INT8 完成。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80cbaf24da8df095435a"><li>0.1% 的“异常”计算，<b>切换回 FP16</b> 来处理。</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80b3bbdecd98b78e120e"><li>这样既保证了速度，又保证了精度。</li></ul><div class="notion-text notion-block-2a108f6b06fd80698693c9a5b6af1b01">而更高级的 <b>GPTQ</b> / <b>AWQ</b> / <b>QLoRA (NF4)</b> 等 4-bit 量化，则是在 PTQ 的基础上，增加了“智能调整”步骤：它们会在量化<b>前</b>，就“重构”权重矩阵，把量化误差的伤害降到最低。</div><div class="notion-text notion-block-2a108f6b06fd809da5aaf6965f7b8a0a">策略：保留一部分全精度，如图loss降回原本的值。</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd801781e2d7c3bff97bf3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Afe67f4b5-4e4b-4fb7-88b5-91880fb612ad%3Aimage.png?table=block&amp;id=2a108f6b-06fd-8017-81e2-d7c3bff97bf3&amp;t=2a108f6b-06fd-8017-81e2-d7c3bff97bf3" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-2a108f6b06fd80839644f1e9f6c97b78">问题：哪些行保留？哪些行量化？</div><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80739be7f67eddcd1222" style="list-style-type:decimal"><li>看哪一行数值大就保留哪一行。→ 实验发现有26%要保留。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80a3a718da28f2638d51" style="list-style-type:decimal"><li>看X（取列的平均）乘这一行获得activation数值大（说明活跃）。（AWQ）</li></ol><div class="notion-text notion-block-2a108f6b06fd80d99079c707b0a2a897">问题：这样权重里有的是FP32有的是INT8怎么办？</div><div class="notion-text notion-block-2a108f6b06fd80149654eecc39e8639f">如果这一行activation大，那这一行 S 值乘2来凸显出这一行重要。（AWQ）</div><details class="notion-toggle notion-block-2a108f6b06fd80078458d895f410e92f"><summary>在数学约定中激活值是 <!-- -->，但在工程约定中是 <!-- -->（为了方便批处理）</summary><div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80a6b8c6d658cfa5c91d"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A8a802cd5-e037-4c0d-90fe-59f5766969e6%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80a6-b8c6-d658cfa5c91d&amp;t=2a108f6b-06fd-80a6-b8c6-d658cfa5c91d" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd8031a3c6d6ea34d30f78"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A3dbae6e5-24ab-41be-a744-0c7b33b13f96%3Aimage.png?table=block&amp;id=2a108f6b-06fd-8031-a3c6-d6ea34d30f78&amp;t=2a108f6b-06fd-8031-a3c6-d6ea34d30f78" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80aba5ddd4363dab2dad"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A940fb859-d487-435c-825e-879df9d9dd35%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80ab-a5dd-d4363dab2dad&amp;t=2a108f6b-06fd-80ab-a5dd-d4363dab2dad" alt="notion image" loading="lazy" decoding="async"/></div></figure><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd806f9d4ee04d44a54d2a"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Aee17883d-0a3b-435d-92ad-813e08df9c2b%3Aimage.png?table=block&amp;id=2a108f6b-06fd-806f-9d4e-e04d44a54d2a&amp;t=2a108f6b-06fd-806f-9d4e-e04d44a54d2a" alt="notion image" loading="lazy" decoding="async"/></div></figure></div></details></div></details><h4 class="notion-h notion-h3 notion-h-indent-2 notion-block-2a108f6b06fd809fa701c7927886f985" data-id="2a108f6b06fd809fa701c7927886f985"><span><div id="2a108f6b06fd809fa701c7927886f985" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd809fa701c7927886f985" title="1.3.1.3. Activation-aware Weight Quantization (激活感知权重Z化 AWQ)"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.3.1.3. Activation-aware Weight Quantization (激活感知权重Z化 AWQ)</span></span></h4><div class="notion-text notion-block-2a108f6b06fd80a680f9f5c9ad4eea12">AWQ 是一种<b>极快</b>且<b>高精度</b>的<b>训练后量化 (PTQ)</b> 方法。它的核心洞察是：<b>“我们不需要保护所有的权重，我们只需要保护那些与‘异常激活值’相乘的 1% 的‘显著权重’(Salient Weights) 就够了。”</b></div><div class="notion-text notion-block-2a108f6b06fd80baa066d1a567bfcb31">原理：</div><div class="notion-text notion-block-2a108f6b06fd80b3bee8f6704766c769">这个 s 是一个<b>缩放因子 (Scale)</b>。这个等式看起来毫无意义，但 AWQ 的魔力在于：
1. 这个 s 是<b>逐通道 (Per-Channel)</b> 的。
2. 这个 s 是<b>激活感知</b>的。</div><div class="notion-text notion-block-2a108f6b06fd80ce9e7bcc08c5087da9"><span class="notion-yellow"><b>AWQ的工作流程：</b></span></div><div class="notion-text notion-block-2a108f6b06fd80ea832dfd61d4ceb1ca">推理前执行一次：</div><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd8034b53cce9420300208" style="list-style-type:decimal"><li>搜索 (Search / Observe)</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd8034b53cce9420300208" style="list-style-type:lower-alpha"><li>运用少量数据通过模型。</li><li>观察激活值X，识别出包含异常值的通道。</li><li>标记这些通道对应的权重为<span class="notion-yellow"><b>显著权重</b></span>。</li></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80bf9c51f2f7427df5fe" style="list-style-type:decimal"><li>计算并缩放 (Scale &amp; Apply)</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd80bf9c51f2f7427df5fe" style="list-style-type:lower-alpha"><li>AWQ 为<b>每一个</b>权重通道（Channel） <!-- --> 计算一个<b>最佳缩放因子 </b>。</li><li>目标：找到一个 ，使得<b>预缩放</b>后的权重 <!-- --> 在被<b>四舍五入 (RTN)</b> 时，<b>误差最小</b>。</li></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80029fdac2d1ba537c39" style="list-style-type:decimal"><li>量化与保存 (Quantize &amp; Save)</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd80029fdac2d1ba537c39" style="list-style-type:lower-alpha"><li>将预缩放后的 <!-- --> 矩阵，用<b>最简单、最快</b>的 RTN 量化为 INT4 整数 <!-- -->。</li><li>将这个 <!-- --> (INT4 矩阵) 和 s (FP16 向量) 保存下来。</li></ol></ol><div class="notion-text notion-block-2a108f6b06fd806d9a4ffbc41c735168">推理时：</div><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd8049b645e8cdaece1686" style="list-style-type:decimal"><li>加载 INT4 权重 <!-- --> 和 FP16 缩放 <!-- -->。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd8092983ce9a470cf2e86" style="list-style-type:decimal"><li>执行计算 <!-- -->。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-2a108f6b06fd80e28d9cf80940cf29e9" style="list-style-type:decimal"><li>这个 <!-- --> 操作可以被 CUDA 内核高度优化（先反量化 <!-- -->，再与 <!-- --> 相乘），速度极快。</li></ol><div class="notion-blank notion-block-2a108f6b06fd802c990add3672283c26"> </div><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-2a108f6b06fd8084bc2dc1db10db2865" data-id="2a108f6b06fd8084bc2dc1db10db2865"><span><div id="2a108f6b06fd8084bc2dc1db10db2865" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd8084bc2dc1db10db2865" title="1.4. Flash Attention"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.4. Flash Attention</span></span></h3><div class="notion-text notion-block-2a108f6b06fd8035a4ebfec3be196fe5">vllm一般用的都是flash attention。</div><div class="notion-text notion-block-2a108f6b06fd8096b0a9cec193813699">简单来说，Flash Attention 的核心贡献是：<b>让注意力计算变得又快又省显存</b>，从而使处理超长序列（如 128K 甚至更长的上下文）成为可能。</div><div class="notion-text notion-block-2a108f6b06fd80fcbd57efd34fb0913d">它的发明人 Tri Dao 的核心洞察是：<b>标准注意力的瓶颈不在于计算（FLOPs），而在于显存的读写（Memory I/O）。</b></div><div class="notion-text notion-block-2a108f6b06fd8096a0b4ee546c255fb1">标准注意力的操作过程：</div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80de867acb68705b180b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Af66ff61c-a817-4a01-b89d-29babd774f18%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80de-867a-cb68705b180b&amp;t=2a108f6b-06fd-80de-867a-cb68705b180b" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-text notion-block-2a108f6b06fd80a79373ed035eb5384e">出现的问题是：GPU 的计算核心（SRAM，片上内存）速度极快，但容量很小；而 GPU 的显存（HBM）容量很大，但速度<b>相对很慢</b>。更糟糕的是，它<b>必须</b>在 HBM 中完整地创建（物化）那个 <!-- --> 的 S 和 P 矩阵。当序列长度 N 很大时（比如 64K），<!-- --> 是一个天文数字，这会<b>耗尽所有显存</b>。</div><div class="notion-text notion-block-2a108f6b06fd8019a8b1fef781885a75">解决方法：</div><div class="notion-text notion-block-2a108f6b06fd8050ac12d00529987dfd">FlashAttention 采用两种技术，将所有计算步骤“融合”到<b>一个</b> CUDA 内核（Kernel）中：</div><ol start="1" class="notion-list notion-list-numbered notion-block-2a108f6b06fd808f8bc9c9c8df7524c9" style="list-style-type:decimal"><li>内核融合（Kernel Fusion）</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd808f8bc9c9c8df7524c9" style="list-style-type:lower-alpha"><div class="notion-text notion-block-2a108f6b06fd80cc8679c5128af97ad6">FlashAttention把所有计算步骤都放到GPU里不需要传进传出。</div></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-2a108f6b06fd8018b845f26ff427ca6f" style="list-style-type:decimal"><li>分块/瓦片技术（Tiling）</li><ol class="notion-list notion-list-numbered notion-block-2a108f6b06fd8018b845f26ff427ca6f" style="list-style-type:lower-alpha"><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-2a108f6b06fd80f697c0c981e3add52f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A43035e67-94f1-42df-a946-ebba924693b4%3Aimage.png?table=block&amp;id=2a108f6b-06fd-80f6-97c0-c981e3add52f&amp;t=2a108f6b-06fd-80f6-97c0-c981e3add52f" alt="notion image" loading="lazy" decoding="async"/></div></figure></ol></ol><div class="notion-text notion-block-2a108f6b06fd80dc9cb5f3858430628f">注意基础概念：</div><div class="notion-text notion-block-2a108f6b06fd80e09c3affc7225d9f84">CUDA概念：显卡的高带宽显存（HBM，速度慢容量大）；高速片上内存（on-chip memory）；这个内存中有静态RAM（SRAM，速度快容量小）。</div><div class="notion-text notion-block-2a108f6b06fd808289d7dd6992726283">FlashAttention 简单来说就是用了两层for循环：第一层循环Q；第二层循环K和V。</div><details class="notion-toggle notion-block-2a108f6b06fd80afb308f2672c7f8322"><summary>伪代码如下：</summary><div></div></details><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-2a108f6b06fd8010928de325ac370468" data-id="2a108f6b06fd8010928de325ac370468"><span><div id="2a108f6b06fd8010928de325ac370468" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd8010928de325ac370468" title="2. Reinforcement learning frameworks"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. Reinforcement learning frameworks</span></span></h2><div class="notion-text notion-block-2a108f6b06fd80b9b2b4dde1c6001f2b">TODO</div><div class="notion-blank notion-block-2a108f6b06fd80c1bfe0df0c96206863"> </div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-2a108f6b06fd80078539c62bf9e94209" data-id="2a108f6b06fd80078539c62bf9e94209"><span><div id="2a108f6b06fd80078539c62bf9e94209" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a108f6b06fd80078539c62bf9e94209" title="资料"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">资料</span></span></h2><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd8006ab42e03094667dde"><li>谷歌ML电子书：https://jax-ml.github.io/scaling-book/index:</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd805d93cefc1df67d24c2"><li>英伟达博客：https://developer.nvidia.com/blog/mastering-llm-techniques-inference-optimization/</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80d28fafc519d7a4a106"><li>Lilian网红博客：https://lilianweng.github.io/posts/2023-01-10-inference-optimization/ (long article with quantization, etc)</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80b5b1e8c84ef4ac0e7f"><li>硬核ML博客：https://ralphmao.github.io/ML-software-system/</li></ul><div class="notion-text notion-block-2a108f6b06fd804a95cbfd5d839b7fe8">论文</div><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd804d8a29c4e8403018d7"><li>DeepSeek V3 Technical Report</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd802f9fbfd0c4d1986daf"><li>Mooncake: KV cache</li></ul><ul class="notion-list notion-list-disc notion-block-2a108f6b06fd80b597b2c02991f52884"><li>DistServe: disaggregated serving</li></ul></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[internvl3 微调记录]]></title>
            <link>https://www.sqf.icu/article/26d08f6b-06fd-80a7-bfaa-f893df120648</link>
            <guid>https://www.sqf.icu/article/26d08f6b-06fd-80a7-bfaa-f893df120648</guid>
            <pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[微调internvl3模型，少样本微调后测试推理]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-26d08f6b06fd80a7bfaaf893df120648"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-26d08f6b06fd80d18063cb372500b1d8" href="https://github.com/OpenGVLab/InternVL?tab=readme-ov-file"><div><div class="notion-bookmark-title">GitHub - OpenGVLab/InternVL: [CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o.  接近GPT-4o表现的开源多模态对话模型</div><div class="notion-bookmark-description">[CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o.  接近GPT-4o表现的开源多模态对话模型 - OpenGVLab/InternVL</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fgithub.com%2Ffluidicon.png?table=block&amp;id=26d08f6b-06fd-80d1-8063-cb372500b1d8&amp;t=26d08f6b-06fd-80d1-8063-cb372500b1d8" alt="GitHub - OpenGVLab/InternVL: [CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o.  接近GPT-4o表现的开源多模态对话模型" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://github.com/OpenGVLab/InternVL?tab=readme-ov-file</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fopengraph.githubassets.com%2Fbe77ba17fb66b4a618106fa51908866f0ba3703cd4961774caaaf97d71aa8227%2FOpenGVLab%2FInternVL?table=block&amp;id=26d08f6b-06fd-80d1-8063-cb372500b1d8&amp;t=26d08f6b-06fd-80d1-8063-cb372500b1d8" alt="GitHub - OpenGVLab/InternVL: [CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o.  接近GPT-4o表现的开源多模态对话模型" loading="lazy" decoding="async"/></div></a></div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-26d08f6b06fd80c5a1c1ccfa39af17ac" href="https://internvl.readthedocs.io/en/latest/internvl3.0/finetune.html"><div><div class="notion-bookmark-title">Fine-tune on a Custom Dataset — InternVL</div><div class="notion-bookmark-description">Before starting the second fine-tuning, download the pre-trained model we provide.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Finternvl.readthedocs.io%2Ffavicon.ico?table=block&amp;id=26d08f6b-06fd-80c5-a1c1-ccfa39af17ac&amp;t=26d08f6b-06fd-80c5-a1c1-ccfa39af17ac" alt="Fine-tune on a Custom Dataset — InternVL" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://internvl.readthedocs.io/en/latest/internvl3.0/finetune.html</div></div></div></a></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-26d08f6b06fd809bb7aae540bc6377f4" data-id="26d08f6b06fd809bb7aae540bc6377f4"><span><div id="26d08f6b06fd809bb7aae540bc6377f4" class="notion-header-anchor"></div><a class="notion-hash-link" href="#26d08f6b06fd809bb7aae540bc6377f4" title="环境安装"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">环境安装</span></span></h2><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-27108f6b06fd8023a462e987f0460224" data-id="27108f6b06fd8023a462e987f0460224"><span><div id="27108f6b06fd8023a462e987f0460224" class="notion-header-anchor"></div><a class="notion-hash-link" href="#27108f6b06fd8023a462e987f0460224" title="推理环境安装"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">推理环境安装</span></span></h3><div class="notion-text notion-block-26d08f6b06fd80339f3ee50937acbb1e">如果flash-attn==2.3.6安装失败，可能是flash-attn找不到对应nvcc版本。</div><div class="notion-text notion-block-26e08f6b06fd80bd8078ed1802709c2f">如果版本不对，重新安装nvcc</div><div class="notion-text notion-block-26d08f6b06fd80ae968dc57a9c7b7ab0">安装后续库</div><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-27108f6b06fd80e6b2efe4973231864e" data-id="27108f6b06fd80e6b2efe4973231864e"><span><div id="27108f6b06fd80e6b2efe4973231864e" class="notion-header-anchor"></div><a class="notion-hash-link" href="#27108f6b06fd80e6b2efe4973231864e" title="微调环境安装"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">微调环境安装</span></span></h3><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-27108f6b06fd800f93f8c4d899214861" href="https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/XTuner"><div><div class="notion-bookmark-title">Tutorial/docs/L1/XTuner at camp3 · InternLM/Tutorial</div><div class="notion-bookmark-description">LLM&amp;VLM Tutorial. Contribute to InternLM/Tutorial development by creating an account on GitHub.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fgithub.com%2Ffluidicon.png?table=block&amp;id=27108f6b-06fd-800f-93f8-c4d899214861&amp;t=27108f6b-06fd-800f-93f8-c4d899214861" alt="Tutorial/docs/L1/XTuner at camp3 · InternLM/Tutorial" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/XTuner</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fopengraph.githubassets.com%2F2f1963fa00b308fc62cbc166f33e7005e2fa0663bee8ff1d19e5053920f39222%2FInternLM%2FTutorial?table=block&amp;id=27108f6b-06fd-800f-93f8-c4d899214861&amp;t=27108f6b-06fd-800f-93f8-c4d899214861" alt="Tutorial/docs/L1/XTuner at camp3 · InternLM/Tutorial" loading="lazy" decoding="async"/></div></a></div><div class="notion-text notion-block-27108f6b06fd807fb2e7c462407c8e60">注意的是，可以将xtuner的分支改到最新tag，这样pip安装才会出现可执行的xtuner。</div><div class="notion-text notion-block-27108f6b06fd80dfada7e15fad9137d9">建议微调和推理环境分开。</div><div class="notion-blank notion-block-27108f6b06fd806b96a6e24faae0459b"> </div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-26d08f6b06fd8074995be98f33d3834d" data-id="26d08f6b06fd8074995be98f33d3834d"><span><div id="26d08f6b06fd8074995be98f33d3834d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#26d08f6b06fd8074995be98f33d3834d" title="数据集处理"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">数据集处理</span></span></h2><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-26d08f6b06fd804d8c71c3fde2e59b7f" href="https://internvl.readthedocs.io/en/latest/get_started/chat_data_format.html"><div><div class="notion-bookmark-title">Chat Data Format — InternVL</div><div class="notion-bookmark-description">In InternVL 2.0 and 2.5, the organization of the training data is controlled by several key parameters to optimize the balance and distribution of datasets during training.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Finternvl.readthedocs.io%2Ffavicon.ico?table=block&amp;id=26d08f6b-06fd-804d-8c71-c3fde2e59b7f&amp;t=26d08f6b-06fd-804d-8c71-c3fde2e59b7f" alt="Chat Data Format — InternVL" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://internvl.readthedocs.io/en/latest/get_started/chat_data_format.html</div></div></div></a></div><div class="notion-text notion-block-26d08f6b06fd80349706cf2b4cfb6f05">如果需要输入坐标信息，可以将坐标信息归一化到[0, 1000]之间的整型，token中有0到1000的数字，这样文本的token数量不会太多 </div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-26d08f6b06fd80b398e9ddb042c5aff5" data-id="26d08f6b06fd80b398e9ddb042c5aff5"><span><div id="26d08f6b06fd80b398e9ddb042c5aff5" class="notion-header-anchor"></div><a class="notion-hash-link" href="#26d08f6b06fd80b398e9ddb042c5aff5" title="微调"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">微调</span></span></h2><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-27108f6b06fd804fb807d523c47b510f" data-id="27108f6b06fd804fb807d523c47b510f"><span><div id="27108f6b06fd804fb807d523c47b510f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#27108f6b06fd804fb807d523c47b510f" title="关键设计决策（先说结论）"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">关键设计决策（先说结论）</span></span></h3><ol start="1" class="notion-list notion-list-numbered notion-block-27108f6b06fd80a396adfb82c2c72f23" style="list-style-type:decimal"><li><b>视觉 LoRA 而非解冻全部视觉参数</b>：你当前 <code class="notion-inline-code">freeze_visual_encoder=True</code>，配合 <code class="notion-inline-code">visual_encoder_lora</code> 是正确的方向 —— 冻结 base 参数、只训练 LoRA adapter，适合少样本场景且显存友好。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-27108f6b06fd80f8a711e50f5469d997" style="list-style-type:decimal"><li><b>target_modules 用子串匹配就够</b>：你列出的模块里，视觉的 attention 是 <code class="notion-inline-code">attn.qkv</code>，mlp 是 <code class="notion-inline-code">mlp.fc1/fc2</code>，用 <code class="notion-inline-code">[&quot;attn.qkv&quot;,&quot;mlp.fc1&quot;,&quot;mlp.fc2&quot;]</code> 即可匹配所有层。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-27108f6b06fd803e852df5fbd2197c41" style="list-style-type:decimal"><li><b>少样本时减小 LoRA 容量、再加低 LR 与更多 epoch</b>：把视觉 LoRA 的 <code class="notion-inline-code">r</code> / <code class="notion-inline-code">alpha</code> 调小（例如 r=32, alpha=32），学习率降到 <code class="notion-inline-code">1e-5 ~ 5e-6</code>，并增加 epoch（3~10，视样本数）或用更多 <code class="notion-inline-code">gradient_accumulation_steps</code>。</li></ol><ol start="4" class="notion-list notion-list-numbered notion-block-27108f6b06fd80c3b7d5c0169f7022df" style="list-style-type:decimal"><li><b>把 bbox 显式写入训练 prompt</b>：训练样本的文本（context）应包含 bbox 信息（格式化为 <code class="notion-inline-code">boxes: [[x1,y1,x2,y2,label], ...]</code> 或自然语言描述），模型依据该 context 学习把视觉特征和 bbox 对齐。</li></ol><ol start="5" class="notion-list notion-list-numbered notion-block-27108f6b06fd80a29736f67be1ba26d2" style="list-style-type:decimal"><li><b>数据量小 -&gt; 强正则/数据增强/重复采样</b>：对图片做轻微 augment（翻转/色彩 jitter）、使用重复采样或 upsampling 生成足够 batch。</li></ol><div class="notion-blank notion-block-27208f6b06fd80ddb84aceb27489563a"> </div><div class="notion-text notion-block-26f08f6b06fd80949aabc7c4c34cf3d9">遇到问题</div><details class="notion-toggle notion-block-27208f6b06fd80499010c45dc1ed3d6e"><summary>报错信息</summary><div></div></details><div class="notion-text notion-block-27208f6b06fd80dcadefd0483741212b">明白了，你 <code class="notion-inline-code">_llm_forward</code> 里已经把视觉模型和语言模型都混合在一起了，但问题是 <b>PEFT 封装会把 </b><code class="notion-inline-code"><b>input_ids</b></code><b>、</b><code class="notion-inline-code"><b>attention_mask</b></code><b> 等参数传给整个模型</b>，导致 <code class="notion-inline-code">InternVisionModel.forward()</code> 报错。</div><div class="notion-text notion-block-27208f6b06fd80c7b220ebf6cf60f33d">核心思路是：<b>视觉模型只接受 </b><code class="notion-inline-code"><b>pixel_values</b></code><b>，语言模型只接受 </b><code class="notion-inline-code"><b>inputs_embeds</b></code><b> 或 </b><code class="notion-inline-code"><b>input_ids</b></code><b>，两者不要混用参数</b>。</div><div class="notion-text notion-block-27208f6b06fd80238b7cdbb8d092edb8">你可以这样改 <code class="notion-inline-code">_llm_forward</code>：</div><div class="notion-text notion-block-27208f6b06fd802c8d66d000a0aac214">✅ 改动重点：</div><ol start="1" class="notion-list notion-list-numbered notion-block-27208f6b06fd80a6b848ff705c5d250b" style="list-style-type:decimal"><li><b>视觉模型单独前向</b>，不传 <code class="notion-inline-code">input_ids</code>、<code class="notion-inline-code">attention_mask</code> 等。</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-27208f6b06fd802ca6dff6d7c5a4684d" style="list-style-type:decimal"><li>文本模型单独使用 <code class="notion-inline-code">inputs_embeds</code> 前向。</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-27208f6b06fd802390b9f1d9a1957748" style="list-style-type:decimal"><li>LoRA/PEFT 调用 <code class="notion-inline-code">_llm_forward</code> 时不会把不需要的参数传给视觉模型。</li></ol><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-26d08f6b06fd804781c8c81c1810f433" data-id="26d08f6b06fd804781c8c81c1810f433"><span><div id="26d08f6b06fd804781c8c81c1810f433" class="notion-header-anchor"></div><a class="notion-hash-link" href="#26d08f6b06fd804781c8c81c1810f433" title="推理"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">推理</span></span></h2><div class="notion-text notion-block-26f08f6b06fd806f9613ce16f8c0a0e7">对于多边形的推理和微调</div><ul class="notion-list notion-list-disc notion-block-26f08f6b06fd806485baec0234da56d9"><li><b>LoRA 可以让模型学会 polygon 推理</b>，但需要大量高质量 polygon 标注 + 格式约束，且训练难度高。</li></ul><ul class="notion-list notion-list-disc notion-block-26f08f6b06fd8035866ef1ea378e6b94"><li><b>更实用的办法</b> 是用 InternVL3 做 bbox 检测，再接 SAM / 语义分割网络 → polygon。</li></ul><ul class="notion-list notion-list-disc notion-block-26f08f6b06fd80f5866ce4176c679c87"><li>如果你只是想快速落地，建议优先用 <b>检测 + SAM + mask2polygon</b>，而不是直接逼 LLM 输出 polygon。</li></ul></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Fuji Lake Hotel]]></title>
            <link>https://www.sqf.icu/article/28308f6b-06fd-8065-8947-e7716a009313</link>
            <guid>https://www.sqf.icu/article/28308f6b-06fd-8065-8947-e7716a009313</guid>
            <pubDate>Mon, 06 Oct 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[使用vivo x200 ultra拍摄，图片堆栈+少许后期处理]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-28308f6b06fd80658947e7716a009313"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><div class="notion-text notion-block-28308f6b06fd80a68e13ce1ca623eee3">Sep 29, 2025 03:26<!-- --> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-28308f6b06fd80f39df4e80154aa73b4"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A898b1fcf-ca38-4227-95cc-2c8a54ec9da8%3Afuji_normal_star_merge.jpg?table=block&amp;id=28308f6b-06fd-80f3-9df4-e80154aa73b4&amp;t=28308f6b-06fd-80f3-9df4-e80154aa73b4" alt="notion image" loading="lazy" decoding="async"/></div></figure><hr class="notion-hr notion-block-28308f6b06fd80d69fe2ce20641ccf08"/><div class="notion-text notion-block-28308f6b06fd8072853afb2a31605894">Sep 29, 2025 03:32<!-- --> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-28308f6b06fd8032a8e2e05866344e7b"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3Afff77ce5-9832-4ba8-a64a-3bb8fb4806ea%3Afuji_night_result_star_merged.jpg?table=block&amp;id=28308f6b-06fd-8032-a8e2-e05866344e7b&amp;t=28308f6b-06fd-8032-a8e2-e05866344e7b" alt="notion image" loading="lazy" decoding="async"/></div></figure><hr class="notion-hr notion-block-28308f6b06fd803cbae9c4f5b412d8ee"/><div class="notion-text notion-block-28308f6b06fd80608181d2a2b39016ad">Sep 29, 2025 04:06<!-- --> </div><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-28308f6b06fd80bfb48cf147068b0520"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/attachment%3A217079b2-99a4-4511-b8e6-93b39824b8d2%3Afuji_light_result.jpg?table=block&amp;id=28308f6b-06fd-80bf-b48c-f147068b0520&amp;t=28308f6b-06fd-80bf-b48c-f147068b0520" alt="notion image" loading="lazy" decoding="async"/></div></figure><div class="notion-blank notion-block-28308f6b06fd80b795f0dd2fed547972"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Windows 安装 WSL2 Ubuntu]]></title>
            <link>https://www.sqf.icu/article/596f072e-c529-4e8d-9179-d3dca39099e5</link>
            <guid>https://www.sqf.icu/article/596f072e-c529-4e8d-9179-d3dca39099e5</guid>
            <pubDate>Sat, 20 Jan 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[WSL2 安装Ubuntu 22.04.3]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-596f072ec5294e8d9179d3dca39099e5"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-df70c3d9c4dc4c8c9eb8b59cb9a5eecf" data-id="df70c3d9c4dc4c8c9eb8b59cb9a5eecf"><span><div id="df70c3d9c4dc4c8c9eb8b59cb9a5eecf" class="notion-header-anchor"></div><a class="notion-hash-link" href="#df70c3d9c4dc4c8c9eb8b59cb9a5eecf" title="1. 安装Ubuntu"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1. 安装Ubuntu</span></span></h2><ul class="notion-list notion-list-disc notion-block-f3c6ff9d763a432cbdf53d964bb9baa2"><li>首先检查windows是否可以更新, 必须保持在可以更新的状态才可以下载ubuntu镜像.</li></ul><ul class="notion-list notion-list-disc notion-block-d4909a2899fa4b749817b3f85c21b9cb"><li>管理员模式打开终端, 查看wsl可以安装的linux版本</li><ul class="notion-list notion-list-disc notion-block-d4909a2899fa4b749817b3f85c21b9cb"></ul></ul><ul class="notion-list notion-list-disc notion-block-f7ae40d375be483cad69e38d30af0a6f"><li>安装ubuntu</li><ul class="notion-list notion-list-disc notion-block-f7ae40d375be483cad69e38d30af0a6f"><div class="notion-text notion-block-6e4d334a5ace4e47896349be56a7b17f">如果windows无法更新这里会出现错误代码: <code class="notion-inline-code">0x80070005</code>.</div></ul></ul><ul class="notion-list notion-list-disc notion-block-da24830acb5643bebb6a81cff7039bd3"><li>启动ubuntu</li><ul class="notion-list notion-list-disc notion-block-da24830acb5643bebb6a81cff7039bd3"><div class="notion-text notion-block-4d906f324b0d4c688feaedd1a00ff904">安装完可能出现报错: <code class="notion-inline-code">WslRegisterDistribution failed with error: 0x800701bc</code></div><li>原因: linux内核没有更新. <a target="_blank" rel="noopener noreferrer" href="https://github.com/microsoft/WSL/issues/5393" class="notion-external notion-external-mention"><div class="notion-external-image"><svg viewBox="0 0 260 260"><g><path d="M128.00106,0 C57.3172926,0 0,57.3066942 0,128.00106 C0,184.555281 36.6761997,232.535542 87.534937,249.460899 C93.9320223,250.645779 96.280588,246.684165 96.280588,243.303333 C96.280588,240.251045 96.1618878,230.167899 96.106777,219.472176 C60.4967585,227.215235 52.9826207,204.369712 52.9826207,204.369712 C47.1599584,189.574598 38.770408,185.640538 38.770408,185.640538 C27.1568785,177.696113 39.6458206,177.859325 39.6458206,177.859325 C52.4993419,178.762293 59.267365,191.04987 59.267365,191.04987 C70.6837675,210.618423 89.2115753,204.961093 96.5158685,201.690482 C97.6647155,193.417512 100.981959,187.77078 104.642583,184.574357 C76.211799,181.33766 46.324819,170.362144 46.324819,121.315702 C46.324819,107.340889 51.3250588,95.9223682 59.5132437,86.9583937 C58.1842268,83.7344152 53.8029229,70.715562 60.7532354,53.0843636 C60.7532354,53.0843636 71.5019501,49.6441813 95.9626412,66.2049595 C106.172967,63.368876 117.123047,61.9465949 128.00106,61.8978432 C138.879073,61.9465949 149.837632,63.368876 160.067033,66.2049595 C184.49805,49.6441813 195.231926,53.0843636 195.231926,53.0843636 C202.199197,70.715562 197.815773,83.7344152 196.486756,86.9583937 C204.694018,95.9223682 209.660343,107.340889 209.660343,121.315702 C209.660343,170.478725 179.716133,181.303747 151.213281,184.472614 C155.80443,188.444828 159.895342,196.234518 159.895342,208.176593 C159.895342,225.303317 159.746968,239.087361 159.746968,243.303333 C159.746968,246.709601 162.05102,250.70089 168.53925,249.443941 C219.370432,232.499507 256,184.536204 256,128.00106 C256,57.3066942 198.691187,0 128.00106,0 Z M47.9405593,182.340212 C47.6586465,182.976105 46.6581745,183.166873 45.7467277,182.730227 C44.8183235,182.312656 44.2968914,181.445722 44.5978808,180.80771 C44.8734344,180.152739 45.876026,179.97045 46.8023103,180.409216 C47.7328342,180.826786 48.2627451,181.702199 47.9405593,182.340212 Z M54.2367892,187.958254 C53.6263318,188.524199 52.4329723,188.261363 51.6232682,187.366874 C50.7860088,186.474504 50.6291553,185.281144 51.2480912,184.70672 C51.8776254,184.140775 53.0349512,184.405731 53.8743302,185.298101 C54.7115892,186.201069 54.8748019,187.38595 54.2367892,187.958254 Z M58.5562413,195.146347 C57.7719732,195.691096 56.4895886,195.180261 55.6968417,194.042013 C54.9125733,192.903764 54.9125733,191.538713 55.713799,190.991845 C56.5086651,190.444977 57.7719732,190.936735 58.5753181,192.066505 C59.3574669,193.22383 59.3574669,194.58888 58.5562413,195.146347 Z M65.8613592,203.471174 C65.1597571,204.244846 63.6654083,204.03712 62.5716717,202.981538 C61.4524999,201.94927 61.1409122,200.484596 61.8446341,199.710926 C62.5547146,198.935137 64.0575422,199.15346 65.1597571,200.200564 C66.2704506,201.230712 66.6095936,202.705984 65.8613592,203.471174 Z M75.3025151,206.281542 C74.9930474,207.284134 73.553809,207.739857 72.1039724,207.313809 C70.6562556,206.875043 69.7087748,205.700761 70.0012857,204.687571 C70.302275,203.678621 71.7478721,203.20382 73.2083069,203.659543 C74.6539041,204.09619 75.6035048,205.261994 75.3025151,206.281542 Z M86.046947,207.473627 C86.0829806,208.529209 84.8535871,209.404622 83.3316829,209.4237 C81.8013,209.457614 80.563428,208.603398 80.5464708,207.564772 C80.5464708,206.498591 81.7483088,205.631657 83.2786917,205.606221 C84.8005962,205.576546 86.046947,206.424403 86.046947,207.473627 Z M96.6021471,207.069023 C96.7844366,208.099171 95.7267341,209.156872 94.215428,209.438785 C92.7295577,209.710099 91.3539086,209.074206 91.1652603,208.052538 C90.9808515,206.996955 92.0576306,205.939253 93.5413813,205.66582 C95.054807,205.402984 96.4092596,206.021919 96.6021471,207.069023 Z" fill="#161614"></path></g></svg></div><div class="notion-external-description"><div class="notion-external-title">WslRegisterDistribution failed with error: 0x800701bc</div><div class="notion-external-subtitle"><div class="notion-preview-card-domain-warp"><div class="notion-preview-card-logo"><svg viewBox="0 0 260 260"><g><path d="M128.00106,0 C57.3172926,0 0,57.3066942 0,128.00106 C0,184.555281 36.6761997,232.535542 87.534937,249.460899 C93.9320223,250.645779 96.280588,246.684165 96.280588,243.303333 C96.280588,240.251045 96.1618878,230.167899 96.106777,219.472176 C60.4967585,227.215235 52.9826207,204.369712 52.9826207,204.369712 C47.1599584,189.574598 38.770408,185.640538 38.770408,185.640538 C27.1568785,177.696113 39.6458206,177.859325 39.6458206,177.859325 C52.4993419,178.762293 59.267365,191.04987 59.267365,191.04987 C70.6837675,210.618423 89.2115753,204.961093 96.5158685,201.690482 C97.6647155,193.417512 100.981959,187.77078 104.642583,184.574357 C76.211799,181.33766 46.324819,170.362144 46.324819,121.315702 C46.324819,107.340889 51.3250588,95.9223682 59.5132437,86.9583937 C58.1842268,83.7344152 53.8029229,70.715562 60.7532354,53.0843636 C60.7532354,53.0843636 71.5019501,49.6441813 95.9626412,66.2049595 C106.172967,63.368876 117.123047,61.9465949 128.00106,61.8978432 C138.879073,61.9465949 149.837632,63.368876 160.067033,66.2049595 C184.49805,49.6441813 195.231926,53.0843636 195.231926,53.0843636 C202.199197,70.715562 197.815773,83.7344152 196.486756,86.9583937 C204.694018,95.9223682 209.660343,107.340889 209.660343,121.315702 C209.660343,170.478725 179.716133,181.303747 151.213281,184.472614 C155.80443,188.444828 159.895342,196.234518 159.895342,208.176593 C159.895342,225.303317 159.746968,239.087361 159.746968,243.303333 C159.746968,246.709601 162.05102,250.70089 168.53925,249.443941 C219.370432,232.499507 256,184.536204 256,128.00106 C256,57.3066942 198.691187,0 128.00106,0 Z M47.9405593,182.340212 C47.6586465,182.976105 46.6581745,183.166873 45.7467277,182.730227 C44.8183235,182.312656 44.2968914,181.445722 44.5978808,180.80771 C44.8734344,180.152739 45.876026,179.97045 46.8023103,180.409216 C47.7328342,180.826786 48.2627451,181.702199 47.9405593,182.340212 Z M54.2367892,187.958254 C53.6263318,188.524199 52.4329723,188.261363 51.6232682,187.366874 C50.7860088,186.474504 50.6291553,185.281144 51.2480912,184.70672 C51.8776254,184.140775 53.0349512,184.405731 53.8743302,185.298101 C54.7115892,186.201069 54.8748019,187.38595 54.2367892,187.958254 Z M58.5562413,195.146347 C57.7719732,195.691096 56.4895886,195.180261 55.6968417,194.042013 C54.9125733,192.903764 54.9125733,191.538713 55.713799,190.991845 C56.5086651,190.444977 57.7719732,190.936735 58.5753181,192.066505 C59.3574669,193.22383 59.3574669,194.58888 58.5562413,195.146347 Z M65.8613592,203.471174 C65.1597571,204.244846 63.6654083,204.03712 62.5716717,202.981538 C61.4524999,201.94927 61.1409122,200.484596 61.8446341,199.710926 C62.5547146,198.935137 64.0575422,199.15346 65.1597571,200.200564 C66.2704506,201.230712 66.6095936,202.705984 65.8613592,203.471174 Z M75.3025151,206.281542 C74.9930474,207.284134 73.553809,207.739857 72.1039724,207.313809 C70.6562556,206.875043 69.7087748,205.700761 70.0012857,204.687571 C70.302275,203.678621 71.7478721,203.20382 73.2083069,203.659543 C74.6539041,204.09619 75.6035048,205.261994 75.3025151,206.281542 Z M86.046947,207.473627 C86.0829806,208.529209 84.8535871,209.404622 83.3316829,209.4237 C81.8013,209.457614 80.563428,208.603398 80.5464708,207.564772 C80.5464708,206.498591 81.7483088,205.631657 83.2786917,205.606221 C84.8005962,205.576546 86.046947,206.424403 86.046947,207.473627 Z M96.6021471,207.069023 C96.7844366,208.099171 95.7267341,209.156872 94.215428,209.438785 C92.7295577,209.710099 91.3539086,209.074206 91.1652603,208.052538 C90.9808515,206.996955 92.0576306,205.939253 93.5413813,205.66582 C95.054807,205.402984 96.4092596,206.021919 96.6021471,207.069023 Z" fill="#161614"></path></g></svg></div><div class="notion-preview-card-domain">Github</div></div><div class="notion-preview-card-title">WslRegisterDistribution failed with error: 0x800701bc</div><div class="notion-external-subtitle-item"><div class="notion-external-subtitle-item-name">Updated</div><span class="notion-external-subtitle-item-desc">Jun 14, 2024</span></div><div class="notion-preview-card-github-shields"><img src="https://img.shields.io/github/stars/undefined/WslRegisterDistribution failed with error: 0x800701bc?logo=github" alt=""/><img src="https://img.shields.io/github/last-commit/undefined/WslRegisterDistribution failed with error: 0x800701bc" alt=""/></div></div></div></a></li><li>解决方法: <a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi">更新linux内核</a></li></ul></ul><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-60597179920141feb11977db1dbaf4ec" data-id="60597179920141feb11977db1dbaf4ec"><span><div id="60597179920141feb11977db1dbaf4ec" class="notion-header-anchor"></div><a class="notion-hash-link" href="#60597179920141feb11977db1dbaf4ec" title="2. 开启ssh"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. 开启ssh</span></span></h2><div class="notion-text notion-block-c508cd265994476293aba9b817d2ce38">修改<code class="notion-inline-code">/etc/ssh/sshd_config</code>结尾加上密码登录, 端口等参数</div><ul class="notion-list notion-list-disc notion-block-9eece5d05c774322a286f9f4964aa06d"><li>重启ssh</li><ul class="notion-list notion-list-disc notion-block-9eece5d05c774322a286f9f4964aa06d"><li>可能出现报错: <code class="notion-inline-code">sshd: no hostkeys available -- exiting</code></li><li>解决方法: <code class="notion-inline-code">sudo ssh-keygen -A</code></li></ul></ul><ul class="notion-list notion-list-disc notion-block-11908f6b06fd804aa660cc32457f3d3f"><li>wsl启动时，自动启动ssh</li><ul class="notion-list notion-list-disc notion-block-11908f6b06fd804aa660cc32457f3d3f"><li>在<code class="notion-inline-code">~/.bashrc</code>或<code class="notion-inline-code">~/.profile</code>添加以下命令</li><ul class="notion-list notion-list-disc notion-block-11908f6b06fd80808096dd41cd9c3042"></ul><li>无sudo密码启动ssh服务</li><ul class="notion-list notion-list-disc notion-block-11908f6b06fd803cac67cc456a7e0e49"></ul></ul></ul><details class="notion-toggle notion-block-4462383c7a9d42d287e20efa80cc5f20"><summary><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-4462383c7a9d42d287e20efa80cc5f20" data-id="4462383c7a9d42d287e20efa80cc5f20"><span><div id="4462383c7a9d42d287e20efa80cc5f20" class="notion-header-anchor"></div><span class="notion-h-title">3. 自动化windows虚拟网卡ip修改+启动ssh服务</span></span></h2></summary><div><div class="notion-text notion-block-5ae2085d7171482fad30e6c9b3f67f83">wsl的虚拟网卡在windows重启的时候, ip地址会自动改变. 编写bat文件, 管理员运行.</div><ul class="notion-list notion-list-disc notion-block-0a8898166fc1425f8bc3c568b29d6742"><li>由于每次wsl重启都会重置网卡配置, 所以可以写一个脚本自动修改网卡</li></ul><ul class="notion-list notion-list-disc notion-block-c84b55d815fb49109fc72895c848a47f"><li>在 wsl Ubuntu home 目录下添加一个脚本<code class="notion-inline-code">set_eth0.sh</code>(注意脚本保存的位置), 桥接网卡到host, 并打开 ssh 服务</li><ul class="notion-list notion-list-disc notion-block-c84b55d815fb49109fc72895c848a47f"></ul></ul><ul class="notion-list notion-list-disc notion-block-acf9f055b5b0485ab7d7a1d7679c62ad"><li>powershell桥接网络脚本</li><ul class="notion-list notion-list-disc notion-block-acf9f055b5b0485ab7d7a1d7679c62ad"><div class="notion-text notion-block-e919d68f00bc47d69903f466587ab68f">在windows中新建开启脚本: wsl-bridge-on.ps1</div><li>注意这里的<code class="notion-inline-code">Start-Process &quot;$psHome\powershell.exe&quot;</code> , 需要用终端输入<code class="notion-inline-code">$psHome</code> 查看 powershell 路径, 该路径下是 powershell.exe 还是 pwsh.exe. </li></ul></ul><details class="notion-toggle notion-block-123dd48666d24d0a8010e71a189ce791"><summary>powershell 取消桥接脚本, 可以不使用</summary><div><div class="notion-text notion-block-3142c3073a3b44b4b64c222cc884d91d">在 windows 中新建关闭脚本: wsl-bridge-off.ps1</div></div></details><ul class="notion-list notion-list-disc notion-block-dbba43eb541e4606a136f3547ca13375"><li>windows 下设置 ps1 文件运行程序</li><ul class="notion-list notion-list-disc notion-block-dbba43eb541e4606a136f3547ca13375"><div class="notion-text notion-block-b601a6aafe3c46dda34e00ed20a21424">分别右键 wsl-bridge-on.ps1 和 wsl-bridge-off.ps1 这两个脚本, 直接默认powershell运行 (或在打开方式中选择其它应用, 找到powershell安装路径下的可执行文件pwsh.exe, 勾选始终使用此应用打开.ps1文件, 这样就可以直接双击运行了). </div><div class="notion-text notion-block-9253a938babb449e91c78e5d49eeb135">不过, 默认情况下 windows powershell 不允许执行自定义脚本, 所以需要修改设置打开执行权限.</div><div class="notion-text notion-block-3ccd95c1bacb45c19ae21de46a5aeb86">管理员方式打开 powershell, 执行 Set-ExecutionPolicy Unrestricted 或 Set-ExecutionPolicy RemoteSigned</div></ul></ul><ul class="notion-list notion-list-disc notion-block-ce965465422f4e99980a73dff8678356"><li>将 ps1 文件添加到开始屏幕</li><ul class="notion-list notion-list-disc notion-block-ce965465422f4e99980a73dff8678356"><div class="notion-text notion-block-e8bdb5f2e33e40f486a777dc5e43aa0e">给 ps1 文件创建一个快捷方式, 复制到<code class="notion-inline-code">C:\ProgramData\Microsoft\Windows\Start Menu\Programs</code>文件夹下, 修改文件名.</div><div class="notion-text notion-block-2863c02e110f4b65a3edf5f67a446747">之后, 开始菜单搜索目标文件名, 右键添加开始屏幕即可.</div></ul></ul></div></details><details class="notion-toggle notion-block-11808f6b06fd80fd98f5f9e8477996d6"><summary><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-11808f6b06fd80fd98f5f9e8477996d6" data-id="11808f6b06fd80fd98f5f9e8477996d6"><span><div id="11808f6b06fd80fd98f5f9e8477996d6" class="notion-header-anchor"></div><span class="notion-h-title">3.1. mirror模式设置网络</span></span></h2></summary><div><div class="notion-text notion-block-11808f6b06fd804ab334fa5dcf9b2a74"><span class="notion-link-mention"><a href="https://blog.gazer.win/essay/wsl2-mirrored-network.html/comment-page-2#comments" target="_blank" rel="noopener noreferrer" class="notion-link-mention-link"><img class="notion-link-mention-icon" src="https://blog.gazer.win/favicon.ico"/><span class="notion-link-mention-title">第2页 - WSLg/WSL2 网络配置，终极解决方案 - 镜像网络 - STARGAZER</span></a><div class="notion-link-mention-preview"><article class="notion-link-mention-card"><img class="notion-link-mention-preview-thumbnail" alt="第2页 - WSLg/WSL2 网络配置，终极解决方案 - 镜像网络 - STARGAZER" referrerPolicy="same-origin"/><div class="notion-link-mention-preview-content"><p class="notion-link-mention-preview-title">第2页 - WSLg/WSL2 网络配置，终极解决方案 - 镜像网络 - STARGAZER</p><p class="notion-link-mention-preview-description">在这之前先后使用过几个 WSLg/WSL2 的网络配置方案实现了局域网同网域(网段)互联互通，并且也打通了 IPv6，整体上对之前的“桥接网络”方案还算满意。[post cid=&quot;126&quot; ...</p><div class="notion-link-mention-preview-footer"><img class="notion-link-mention-preview-icon" src="https://blog.gazer.win/favicon.ico" referrerPolicy="same-origin"/><span class="notion-link-mention-preview-provider"></span></div></div></article></div></span></div><div class="notion-text notion-block-11808f6b06fd80ed8ea7e04cb9cbe5a3">注意，设置的时候TUN模式需要关掉，防止wsl虚拟机的首选网卡从连接互联网的口变成TUN的虚拟网卡的口。可以通过<code class="notion-inline-code">ip addr</code>来查看。</div></div></details><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-a37503841ada4b03a94f56895a5dc186" data-id="a37503841ada4b03a94f56895a5dc186"><span><div id="a37503841ada4b03a94f56895a5dc186" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a37503841ada4b03a94f56895a5dc186" title="4. WSL 安装 ubuntu 之后, ubuntu 内使用 nvidia-smi 失效"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">4. WSL 安装 ubuntu 之后, ubuntu 内使用 nvidia-smi 失效</span></span></h2><div class="notion-text notion-block-04377fcddd9a4ecebdf92ffddba0e315">加入 .bachrc 文件中</div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-1bb0a0b19dd34541aa184de7869294bb" data-id="1bb0a0b19dd34541aa184de7869294bb"><span><div id="1bb0a0b19dd34541aa184de7869294bb" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1bb0a0b19dd34541aa184de7869294bb" title="5. WSL 无法 ping 通 Windows 宿主机"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">5. WSL 无法 ping 通 Windows 宿主机</span></span></h2><div class="notion-text notion-block-5365be81f0524fe994b2c9939fb4b84a">因为 windows 防火墙屏蔽了外来的 icmp 包, 需要给防火墙添加规则</div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-c288289f021b4db8bb2721b73e1b7189" href="https://www.cnblogs.com/SocialistYouth/p/16691035.html"><div><div class="notion-bookmark-title">WSL2 网络异常排查 [ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截] - SocialistYouth - 博客园</div><div class="notion-bookmark-description">最近在使用的 wsl2 的时候突然发现 wsl2 无法正常联网，即 ping 不通外网以及宿主机的 wsl 网卡。但是将 wsl 版本设置为 1 就可以联网了。 如果你是正常使用的时候，并且自己没有手动修改过 主机 和 WSL2 的网络配置，然后就忽然发现 WSL2 不能正常访问网络了，这个时候你重</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fcommon.cnblogs.com%2Ffavicon.svg?table=block&amp;id=c288289f-021b-4db8-bb27-21b73e1b7189&amp;t=c288289f-021b-4db8-bb27-21b73e1b7189" alt="WSL2 网络异常排查 [ping 不通、网络地址异常、缺少默认路由、被宿主机防火墙拦截] - SocialistYouth - 博客园" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://www.cnblogs.com/SocialistYouth/p/16691035.html</div></div></div></a></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-cef4abf4917a48bd9a3ba748c5a22654" data-id="cef4abf4917a48bd9a3ba748c5a22654"><span><div id="cef4abf4917a48bd9a3ba748c5a22654" class="notion-header-anchor"></div><a class="notion-hash-link" href="#cef4abf4917a48bd9a3ba748c5a22654" title="6. 安装图形化界面"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">6. 安装图形化界面</span></span></h2><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-14f08f6b06fd80c0b98dffac6596eb9e" href="https://blog.csdn.net/m0_60171828/article/details/138376726?spm=1001.2101.3001.6650.2&amp;utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-2-138376726-blog-136660292.235%5Ev43%5Epc_blog_bottom_relevance_base3&amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-2-138376726-blog-136660292.235%5Ev43%5Epc_blog_bottom_relevance_base3&amp;utm_relevant_index=5"><div><div class="notion-bookmark-title">blog.csdn.net</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-text">https://blog.csdn.net/m0_60171828/article/details/138376726?spm=1001.2101.3001.6650.2&amp;utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-2-138376726-blog-136660292.235%5Ev43%5Epc_blog_bottom_relevance_base3&amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-2-138376726-blog-136660292.235%5Ev43%5Epc_blog_bottom_relevance_base3&amp;utm_relevant_index=5</div></div></div></a></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-11808f6b06fd8060a0ffc901eb526b22" data-id="11808f6b06fd8060a0ffc901eb526b22"><span><div id="11808f6b06fd8060a0ffc901eb526b22" class="notion-header-anchor"></div><a class="notion-hash-link" href="#11808f6b06fd8060a0ffc901eb526b22" title="7. WSL 中的cuda驱动是和宿主机共享"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">7. WSL 中的cuda驱动是和宿主机共享</span></span></h2><div class="notion-text notion-block-b0261adc60d842a3a40cee53b0aba9d8">由于 CUDA 驱动的地址在 Windows 路径下, 所以安装 opencv 等 python 库关联的模块会出现各种环境问题. 如果需要做开发用的话, 不建议使用 WSL.</div><details class="notion-toggle notion-block-25d08f6b06fd803890b4f7c26f8f56d9"><summary><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-25d08f6b06fd803890b4f7c26f8f56d9" data-id="25d08f6b06fd803890b4f7c26f8f56d9"><span><div id="25d08f6b06fd803890b4f7c26f8f56d9" class="notion-header-anchor"></div><span class="notion-h-title">安装opencv</span></span></h3></summary><div><div class="notion-text notion-block-25d08f6b06fd80598b52ff941697b41f">clone opencv和opencv_contrib 版本改为4.5.5</div><div class="notion-text notion-block-25d08f6b06fd809588e8f8aa7d1f7409">mkdir build in opencv</div><div class="notion-text notion-block-25d08f6b06fd8008b1a8c85a240e7147">使用 <code class="notion-inline-code">update-alternatives</code> 切换到 GCC 8：</div><div class="notion-text notion-block-25d08f6b06fd8020ab0af6fe86d5463c">cmake编译</div><div class="notion-text notion-block-25d08f6b06fd806aa604d8ff8bb93495">编译安装</div></div></details><div class="notion-blank notion-block-25d08f6b06fd8068ba81f2a295220836"> </div><div class="notion-blank notion-block-25d08f6b06fd80519512c60924f362bd"> </div><div class="notion-blank notion-block-25d08f6b06fd80988840d9555400a9df"> </div><div class="notion-blank notion-block-25d08f6b06fd8032914cda8cd8921735"> </div><div class="notion-blank notion-block-25d08f6b06fd8094b258fc9665283235"> </div><div class="notion-blank notion-block-25d08f6b06fd80bba2c3d6d3f4ad0f97"> </div><div class="notion-text notion-block-11808f6b06fd80ffadc7ec836df2c879">如果安装了图形化界面，再图形化界面使用终端会发现<code class="notion-inline-code">nvidia-smi</code>不能用。</div><div class="notion-text notion-block-11808f6b06fd80bfb8f2fc388907f189">所以需要安装cuda驱动</div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-a613b0a2b88c4b6bbb0b5fd0934aad7f" data-id="a613b0a2b88c4b6bbb0b5fd0934aad7f"><span><div id="a613b0a2b88c4b6bbb0b5fd0934aad7f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a613b0a2b88c4b6bbb0b5fd0934aad7f" title="8. WSL 安装smb挂在ext4磁盘"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">8. WSL 安装smb挂在ext4磁盘</span></span></h2><ul class="notion-list notion-list-disc notion-block-32e25bf841054ce5ae8062851f6b755e"><li>挂载磁盘</li><ul class="notion-list notion-list-disc notion-block-32e25bf841054ce5ae8062851f6b755e"></ul></ul><div class="notion-blank notion-block-11808f6b06fd807285efe7617f98b6fd"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Linux 问题整理]]></title>
            <link>https://www.sqf.icu/article/280d7a1b-5f4e-477e-945c-7e8ecd27d667</link>
            <guid>https://www.sqf.icu/article/280d7a1b-5f4e-477e-945c-7e8ecd27d667</guid>
            <pubDate>Sun, 01 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Linux 问题整理]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-280d7a1b5f4e477e945c7e8ecd27d667"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-f3ff8c5ca0844bceb6705cd64e5f7b77" data-id="f3ff8c5ca0844bceb6705cd64e5f7b77"><span><div id="f3ff8c5ca0844bceb6705cd64e5f7b77" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f3ff8c5ca0844bceb6705cd64e5f7b77" title="Linux"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Linux</span></span></h2><a class="notion-page-link notion-block-bfe1a19cd7e54da782fcc67fbe7790f0" href="/bfe1a19cd7e54da782fcc67fbe7790f0"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="Ubuntu 20.04 系统安装流程" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">Ubuntu 20.04 系统安装流程</span></span></a><details class="notion-toggle notion-block-182afc56087e49cf87ae7d3af730505b"><summary>NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.</summary><div></div></details><details class="notion-toggle notion-block-b8c22b8a2a67442d94b1cfc28c81dc88"><summary>移动文件夹下所有文件, 包括子文件夹下的内容</summary><div><div class="notion-text notion-block-030c601de2f847d1b35b7cf2be28a67e">Open a terminal and execute this command:</div><div class="notion-text notion-block-a11a08cdbb15430d9fd90584e3f3a811">It will move all the files and folders from Downloads folder to Videos folder.</div><hr class="notion-hr notion-block-b652f4f28a8541658f5074a216b79250"/><div class="notion-text notion-block-9585d4a9d6634583829f744b79dc309b"><b>To move all files, but not folders:</b></div><div class="notion-text notion-block-dcb5cb57c6ad42b0ade7784c84f47081">If you are interested in moving all files (but not folders) from Downloads folder to Videos folder, use this command</div><div class="notion-text notion-block-c9222a217278423db9fbdf62c2c4d4e4"><b>To move only files from the Download folders, but not from sub-folders:</b></div><div class="notion-text notion-block-b32c7b7813f64c4096eb81c20e41f16b">If you want to move all files from the Downloads folder, but not any files within folders in the Download folder, use this command:</div><div class="notion-text notion-block-9081670f0f724fd3b77647107d600d45">here, <code class="notion-inline-code">-maxdepth</code> option specifies how deep find should try, <code class="notion-inline-code">1</code> means, only the directory specified in the find command. You can try using <code class="notion-inline-code">2</code>, <code class="notion-inline-code">3</code> also to test.</div></div></details><details class="notion-toggle notion-block-d50ff2da67da406ea796ac6c3b5406ec"><summary>文件大小查看命令</summary><div></div></details><details class="notion-toggle notion-block-d19f0d2346bf4fc5810b9aad43996c1a"><summary>文件查找命令</summary><div></div></details><details class="notion-toggle notion-block-4e135bd43f874999a6504506539fb0ee"><summary>批量执行命令 awk</summary><div><ul class="notion-list notion-list-disc notion-block-bf84c26a658347338b73fa69abdffdca"><li>查找文件后批量处理</li><ul class="notion-list notion-list-disc notion-block-bf84c26a658347338b73fa69abdffdca"></ul></ul><ul class="notion-list notion-list-disc notion-block-89a5317503dd494fa83a883c3914479c"><li>script 输入参数:
直接写 $1 就是第一个参数</li></ul><ul class="notion-list notion-list-disc notion-block-888efce6f96a46599a9c624a3ff4c141"><li>获得当前文件夹名</li><ul class="notion-list notion-list-disc notion-block-888efce6f96a46599a9c624a3ff4c141"></ul></ul><div class="notion-blank notion-block-3bc0b5acaec149919aa3d2bfb58644ac"> </div></div></details><details class="notion-toggle notion-block-5945c8bd6a054673aa5d880e11a69b64"><summary>DNS服务器地址修改</summary><div><div class="notion-text notion-block-363172e78a004e4ab3ebf4241b4bcf7b">找到/etc/resolv.conf</div><div class="notion-text notion-block-ddef63b584a74ace8ee4d181f0024e06">nameserver 就是DNS服务器地址</div></div></details><details class="notion-toggle notion-block-04770a2203554b0aa607de5e5e53bb93"><summary>图形界面添加自动启动项</summary><div></div></details><details class="notion-toggle notion-block-117293d01abe471890397738f43ad727"><summary>文本界面设置子启动服务</summary><div><ul class="notion-list notion-list-disc notion-block-88ea123b678d4a1d8fdecc83d03c1d21"><li>写服务文件，如nginx.service、redis.service、supervisord.service</li><ul class="notion-list notion-list-disc notion-block-88ea123b678d4a1d8fdecc83d03c1d21"></ul></ul><ul class="notion-list notion-list-disc notion-block-de7aa905086b4aa3886ec2100c8c7077"><li>文件保存在目录下：以754的权限。目录路径：/usr/lib/systemd/system/</li><ul class="notion-list notion-list-disc notion-block-de7aa905086b4aa3886ec2100c8c7077"></ul></ul></div></details><details class="notion-toggle notion-block-1bbdf2858a3340719af70d811e8ff3bb"><summary>开机自动启动脚本</summary><div><div class="notion-text notion-block-d59229c672d4446a944218dacfd774f9">写脚本放入/etc/profile.d/</div></div></details><details class="notion-toggle notion-block-fa873642ff9f4c5bb31ff778f1344c2c"><summary>Ubuntu引导损坏 引导修复</summary><div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-d826b8ef75584ce5b6b4f66f4e68c444" href="https://blog.csdn.net/u012260238/article/details/52713724"><div><div class="notion-bookmark-title">双系统Ubuntu 引导修复（Boot Repair）_碧海凌云的博客-CSDN博客_ubuntu引导修复</div><div class="notion-bookmark-description">安装完双系统，如果在使用过程中不小心删除了Ubuntu引导向，则会导致开机后无法选择进入Ubuntu系统。或者当我们重装了windows系统后，也会发现原来的Ubuntu引导不见了，当出现这两种情况之一时，最好的解决办法不是重新把Ubuntu系统装一遍，我们只需要冲洗修复一下Ubuntu引导文件，就可以把问题解决了。 不过首先你需要Ubuntu U盘启动盘，来进入Ubuntu系统来修复引导问题。 第一步： 还是需要进入Ubuntu界面，但是并不需要安装（如果直接安装的话，以前在Ubuntu里面的文件可全部都没有了，所以万不得已，千 万别这样做）。 第二步： 选择TRY Ubuntu选项，进入U盘的Ubuntu 试用系统，并连接好网络（因为后续工作需要用到网络）。 第三步： 打开终端，终端快捷键是Ctrl+Alt+T，输入命令，添加boot-repair所在的源： sudo add-apt-repository ppa:yannubuntu/boot-repair &amp;&amp; sudo apt-get update 第四步： 待上面命令执行完毕后，继续输入以下命令，安装boot-repair并且开启boot-repair： sudo apt-get install -y boot-repair &amp;&amp; boot-repair 等一会，会出现如下的界面： 就会出现这个，点击Recommended repair，过几分钟重启就行了。 第五步： 如果上面已经执行成功了，可以跳过此部，否则，我们可以自己输入命令进行修复： 　　sudo recommended repair 　 成功后，就会弹出我们的盘的各种信息以及引导的信息。 　 如果有些人不小心点击了Create a BootInfo summary的话，那你的开机启动界面将会出来一大堆你以前没见过的东西。 那样的话，你可以输入名令：cd /boot/grub 接着输入sudo gedit grub.cfg,打开grub.cfg文件后，通过搜索找到windows，然后把下面这些删去就和原来一样了。 END /etc/grub.d/25_custom 也可以参考这篇博文： http://m.blog.csdn.net/article/details?id=50589667</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fg.csdnimg.cn%2Fstatic%2Flogo%2Ffavicon32.ico?table=block&amp;id=d826b8ef-7558-4ce5-b6b4-f66f4e68c444&amp;t=d826b8ef-7558-4ce5-b6b4-f66f4e68c444" alt="双系统Ubuntu 引导修复（Boot Repair）_碧海凌云的博客-CSDN博客_ubuntu引导修复" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://blog.csdn.net/u012260238/article/details/52713724</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fcsdnimg.cn%2Frelease%2Fblogv2%2Fdist%2Fpc%2Fimg%2Foriginal.png?table=block&amp;id=d826b8ef-7558-4ce5-b6b4-f66f4e68c444&amp;t=d826b8ef-7558-4ce5-b6b4-f66f4e68c444" alt="双系统Ubuntu 引导修复（Boot Repair）_碧海凌云的博客-CSDN博客_ubuntu引导修复" loading="lazy" decoding="async"/></div></a></div></div></details><details class="notion-toggle notion-block-11c48a330fd44baf96f01c9d91522144"><summary>linux 使用rar</summary><div><div class="notion-text notion-block-557a767224334f63b490a5a19855b114"><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.rarlab.com/download.htm">https://www.rarlab.com/download.htm</a>找到对应linux的压缩包</div></div></details><details class="notion-toggle notion-block-a047af4c10b84ee0b27f79f02b9d0f39"><summary>ubuntu tar 多线程压缩</summary><div><ul class="notion-list notion-list-disc notion-block-4a384b201bda4421b173ea65ec7b1b05"><li>安装<b><b>pigz</b></b></li><ul class="notion-list notion-list-disc notion-block-4a384b201bda4421b173ea65ec7b1b05"></ul></ul><ul class="notion-list notion-list-disc notion-block-49b3cf76088c49e69e863ee28098adca"><li>压缩文件夹(默认占用所有cpu核心, 占用率50%-80%)</li><ul class="notion-list notion-list-disc notion-block-49b3cf76088c49e69e863ee28098adca"></ul></ul><ul class="notion-list notion-list-disc notion-block-7009e4446b4a4f2bbf423e7a103a1204"><li>解压文件夹</li><ul class="notion-list notion-list-disc notion-block-7009e4446b4a4f2bbf423e7a103a1204"></ul></ul><ul class="notion-list notion-list-disc notion-block-071a3906224645168903a7373b33244b"><li>需要限制cpu占用的话</li><ul class="notion-list notion-list-disc notion-block-071a3906224645168903a7373b33244b"></ul></ul><ul class="notion-list notion-list-disc notion-block-9bac1c806f4b4422ace96b750340e327"><li>向压缩包里追加文件</li><ul class="notion-list notion-list-disc notion-block-9bac1c806f4b4422ace96b750340e327"></ul></ul></div></details><details class="notion-toggle notion-block-dfb23f42d5784052b11d5ead240349f6"><summary>格式化新的磁盘</summary><div><div class="notion-text notion-block-86b822988f1f4db79dfc80272c93f81d">Installing A New Hard Drive</div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-e81b23d82a8240b7a9fe38a9111f2a68" href="https://help.ubuntu.com/community/InstallingANewHardDrive"><div><div class="notion-bookmark-title">InstallingANewHardDrive</div><div class="notion-bookmark-description">While it&#x27;s not every day that you need to add a new hard drive to your computer, the task does not have to be complicated. Use this guide to help you install a new hard drive with an existing Ubuntu system, and partition it for use.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fhelp.ubuntu.com%2Ffavicon.ico?table=block&amp;id=e81b23d8-2a82-40b7-a9fe-38a9111f2a68&amp;t=e81b23d8-2a82-40b7-a9fe-38a9111f2a68" alt="InstallingANewHardDrive" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://help.ubuntu.com/community/InstallingANewHardDrive</div></div></div></a></div><div class="notion-text notion-block-ec21ee2e63624ef7a461accb35158c04">1) Start parted as follows:</div><div class="notion-text notion-block-2424f28fad8c40da8db0b004b833bc3d">2) Create a new GPT disklabel (aka partition table):</div><div class="notion-text notion-block-ef3a2af499754fa7b4c5b554ae715a4f">3) Set the default unit to TB:</div><div class="notion-text notion-block-8320f2a817454baebb51f38700ec1f9a">4) Create one partition occupying all the space on the drive. For a 4TB drive:</div><div class="notion-text notion-block-6697d62eaa2d4e59898ec29a72d13a36">5) Check that the results are correct:</div><div class="notion-text notion-block-d9f78ff605604cf6b8362aeeb79bfa90">There should be one partition occupying the entire drive.</div><div class="notion-text notion-block-1e103b749399470ebccf5cbca6e798c2">6) Save and quit &quot;parted&quot;:</div><h4 class="notion-h notion-h3 notion-block-61b98ee54f2744a8b3bcdd3eb7dde38a" data-id="61b98ee54f2744a8b3bcdd3eb7dde38a"><span><div id="61b98ee54f2744a8b3bcdd3eb7dde38a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#61b98ee54f2744a8b3bcdd3eb7dde38a" title="Command Line Formatting"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Command Line Formatting</span></span></h4><div class="notion-text notion-block-329223a788a847d88406aae87cc2f9b4">To format the new partition as ext4 file system (best for use under Ubuntu):</div><ul class="notion-list notion-list-disc notion-block-26f76f07d628437f9963f416a262bf14"><li><code class="notion-inline-code">sudo mkfs -t ext4 /dev/sdb1</code></li></ul><div class="notion-text notion-block-5caa12eb29a64a7f90e71719b59e4b48">To format the new partition as fat32 file system (best for use under Ubuntu &amp; Windows):</div><ul class="notion-list notion-list-disc notion-block-e2930794f471453b8a3757246123d543"><li><code class="notion-inline-code">sudo mkfs -t fat32 /dev/sdb1</code></li></ul><div class="notion-text notion-block-46a287c78fbb4d93855806f0a6684b46">As always, substitute &quot;/dev/sdb1&quot; with your own partition&#x27;s path.</div></div></details><details class="notion-toggle notion-block-19e2ebee032a4bb1bb1dc2f20551990c"><summary>匹配k380键盘</summary><div><div class="notion-text notion-block-c946bbeb20c2431bb91cd21f95139020">可能成功</div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-d65c2bba3ed143b6939583bf99068e0f" href="https://unix.stackexchange.com/questions/590221/pairing-logitech-k380-in-ubuntu-20-04"><div><div class="notion-bookmark-title">Pairing LOGITECH K380 in Ubuntu 20.04</div><div class="notion-bookmark-description">The author of the question provided the following solution. Install bluetoothctl if it is not already installed. In Ubuntu 20.04 it comes with the default install.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fcdn.sstatic.net%2FSites%2Funix%2FImg%2Ffavicon.ico%3Fv%3Dfb86ccabb921?table=block&amp;id=d65c2bba-3ed1-43b6-9395-83bf99068e0f&amp;t=d65c2bba-3ed1-43b6-9395-83bf99068e0f" alt="Pairing LOGITECH K380 in Ubuntu 20.04" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://unix.stackexchange.com/questions/590221/pairing-logitech-k380-in-ubuntu-20-04</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fcdn.sstatic.net%2FSites%2Funix%2FImg%2Fapple-touch-icon%402.png%3Fv%3D32fb07f7ce26?table=block&amp;id=d65c2bba-3ed1-43b6-9395-83bf99068e0f&amp;t=d65c2bba-3ed1-43b6-9395-83bf99068e0f" alt="Pairing LOGITECH K380 in Ubuntu 20.04" loading="lazy" decoding="async"/></div></a></div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-a7f91a59f55a411ba406fa2c34813ee1" href="https://bbs.archlinux.org/viewtopic.php?id=195886&amp;p=2"><div><div class="notion-bookmark-title">Arch Linux</div><div class="notion-bookmark-description">juil. 28 18:12:00 laptop bluetoothd[602]: Failed to obtain handles for &quot;Service Changed&quot; characteristic juil. 28 18:12:00 laptop bluetoothd[602]: Not enough free handles to register service juil. 28 18:12:00 laptop bluetoothd[602]: Error adding Link Loss service juil. 28 18:12:00 laptop bluetoothd[602]: Not enough free handles to register service juil.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fbbs.archlinux.org%2Fstyle%2FArchLinux%2Ffavicon.ico?table=block&amp;id=a7f91a59-f55a-411b-a406-fa2c34813ee1&amp;t=a7f91a59-f55a-411b-a406-fa2c34813ee1" alt="Arch Linux" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://bbs.archlinux.org/viewtopic.php?id=195886&amp;p=2</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fbbs.archlinux.org%2Fimg%2Favatars%2F21060.jpg%3Fm%3D1572193438?table=block&amp;id=a7f91a59-f55a-411b-a406-fa2c34813ee1&amp;t=a7f91a59-f55a-411b-a406-fa2c34813ee1" alt="Arch Linux" loading="lazy" decoding="async"/></div></a></div></div></details><details class="notion-toggle notion-block-2e1bd2e499e7431ebb8c6ab1c46270d8"><summary>开发常用组件安装，遇到gcc之类的基础组件缺失时使用</summary><div></div></details><details class="notion-toggle notion-block-16999b39c9614dae88c8c684b34a3c56"><summary>向日葵 远程登录失败问题</summary><div><div class="notion-text notion-block-59fd38341d0c4875abc527f90e726393">需要轻量化桌面</div></div></details><details class="notion-toggle notion-block-0eecb30ccb2148008db017ada98831c4"><summary>查看某个文件夹下文件或文件夹的数量(递归)</summary><div></div></details><details class="notion-toggle notion-block-4face33644024173b8dd2f654fb36dd0"><summary>非root用户cuda安装</summary><div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-a5b04ad8577b4f9a8bbd29a74873deb2" href="https://blog.csdn.net/kxqt233/article/details/113825524"><div><div class="notion-bookmark-title">安装CUDA和cuDNN到指定目录_kxqt233的博客-CSDN博客_cudnn安装位置</div><div class="notion-bookmark-description">ubuntu 16.04 anaconda 4.7.10 先前已经参考 这个博客 安装了cuda10.1，但现在需要在服务器上安装cuda10.0并实现多版本cuda管理，而且cuda10.0没有所谓的update版本，而笔者又没有管理员权限，因此需要另找方法。 先到官网下载对应版本的cuda和cudnn，我下载的是cuda_10.0.130_410.48_linux.run和cudnn-10.0-linux-x64-v7.6.5.32.tgz（科学上网下载速度可能会快一点） 运行以下命令查看帮助 sh cuda_10.0.130_410.48_linux.run --help 得到命令提示，其中有几个option比较有用 Options: --silent Performs an installation with no further user-input and minimal command-line output based on the options provided below. Silent installations are useful for scripting the installation of CUDA. Using this option implies acceptance of the EULA.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fg.csdnimg.cn%2Fstatic%2Flogo%2Ffavicon32.ico?table=block&amp;id=a5b04ad8-577b-4f9a-8bbd-29a74873deb2&amp;t=a5b04ad8-577b-4f9a-8bbd-29a74873deb2" alt="安装CUDA和cuDNN到指定目录_kxqt233的博客-CSDN博客_cudnn安装位置" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://blog.csdn.net/kxqt233/article/details/113825524</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fcsdnimg.cn%2Frelease%2Fblogv2%2Fdist%2Fpc%2Fimg%2Foriginal.png?table=block&amp;id=a5b04ad8-577b-4f9a-8bbd-29a74873deb2&amp;t=a5b04ad8-577b-4f9a-8bbd-29a74873deb2" alt="安装CUDA和cuDNN到指定目录_kxqt233的博客-CSDN博客_cudnn安装位置" loading="lazy" decoding="async"/></div></a></div></div></details><details class="notion-toggle notion-block-4c3c0d2862054c50ab1a82619edad8ea"><summary>磁盘空间清理</summary><div></div></details><details class="notion-toggle notion-block-50e80d4c08fb40fa8588f3d49176a429"><summary>htop设置</summary><div><ul class="notion-list notion-list-disc notion-block-8dc6aa7b0584413fbe3ddb87c37fa22f"><li>使用htop命令查看进程的时候可以关闭重复线程方便查看</li></ul></div></details><details class="notion-toggle notion-block-f114a49434004010a9ded96897a03283"><summary>Ubuntu 隐藏上方状态栏、左边任务栏及菜单按钮移到下方居中及隐藏（详细）</summary><div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-7d54da8de9c6429f94c72d675d964f0c" href="https://blog.csdn.net/weixin_43629813/article/details/100525856"><div><div class="notion-bookmark-title">Ubuntu 隐藏上方状态栏、左边任务栏及菜单按钮移到下方居中及隐藏（详细）_锵锵锵锵~蒋的博客-CSDN博客_ubuntu隐藏任务栏</div><div class="notion-bookmark-description">隐藏上方状态栏使用shell扩展hide top barhide top bar//安装sudo apt-get install gnome-shell-extension-autohidetopbar//也可以在Ubuntu软件中直接搜索hide top bar//卸载sudo apt-get remove gnome-shell-extension-autohidetopbar...</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fg.csdnimg.cn%2Fstatic%2Flogo%2Ffavicon32.ico?table=block&amp;id=7d54da8d-e9c6-429f-94c7-2d675d964f0c&amp;t=7d54da8d-e9c6-429f-94c7-2d675d964f0c" alt="Ubuntu 隐藏上方状态栏、左边任务栏及菜单按钮移到下方居中及隐藏（详细）_锵锵锵锵~蒋的博客-CSDN博客_ubuntu隐藏任务栏" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://blog.csdn.net/weixin_43629813/article/details/100525856</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fimg-blog.csdnimg.cn%2F20190903194136163.png%3Fx-oss-process%3Dimage%2Fwatermark%2Ctype_ZmFuZ3poZW5naGVpdGk%2Cshadow_10%2Ctext_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzYyOTgxMw%3D%3D%2Csize_16%2Ccolor_FFFFFF%2Ct_70?table=block&amp;id=7d54da8d-e9c6-429f-94c7-2d675d964f0c&amp;t=7d54da8d-e9c6-429f-94c7-2d675d964f0c" alt="Ubuntu 隐藏上方状态栏、左边任务栏及菜单按钮移到下方居中及隐藏（详细）_锵锵锵锵~蒋的博客-CSDN博客_ubuntu隐藏任务栏" loading="lazy" decoding="async"/></div></a></div></div></details><details class="notion-toggle notion-block-ef0116fae104489896a8182976d0d529"><summary>ubuntu 20.04 vps 开机自启动</summary><div></div></details><details class="notion-toggle notion-block-515250ee63674abba3e52c68b3b138ed"><summary>zip相关指令</summary><div><h3 class="notion-h notion-h2 notion-block-9d834697167e439fbf1e7926a0d8d6ac" data-id="9d834697167e439fbf1e7926a0d8d6ac"><span><div id="9d834697167e439fbf1e7926a0d8d6ac" class="notion-header-anchor"></div><a class="notion-hash-link" href="#9d834697167e439fbf1e7926a0d8d6ac" title="1.1. 查看压缩包内容和统计"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.1. 查看压缩包内容和统计</span></span></h3><ul class="notion-list notion-list-disc notion-block-db75dbb4d3234978b1983ffd3acec90f"><li>zip -sf: 查看zip压缩包内容</li></ul><ul class="notion-list notion-list-disc notion-block-d7e543b91faa4e9f9209e85c85dbf39f"><li>grep -v: 去除不需要的行, 筛选需要的文件名</li></ul><ul class="notion-list notion-list-disc notion-block-1eb4e323a4fb4802835a99478ecd1795"><li>wc -l: 按行统计</li></ul><h3 class="notion-h notion-h2 notion-block-0ea9e7fcb15c43a7a1e2d6e99b639300" data-id="0ea9e7fcb15c43a7a1e2d6e99b639300"><span><div id="0ea9e7fcb15c43a7a1e2d6e99b639300" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0ea9e7fcb15c43a7a1e2d6e99b639300" title="1.2. 解压压缩包内部分文件"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.2. 解压压缩包内部分文件</span></span></h3><h3 class="notion-h notion-h2 notion-block-eff2b3bc7ba94643a5c8c978fff7fa40" data-id="eff2b3bc7ba94643a5c8c978fff7fa40"><span><div id="eff2b3bc7ba94643a5c8c978fff7fa40" class="notion-header-anchor"></div><a class="notion-hash-link" href="#eff2b3bc7ba94643a5c8c978fff7fa40" title="1.3. 批量压缩文件夹并删除原文件夹"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1.3. 批量压缩文件夹并删除原文件夹</span></span></h3></div></details><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-7746ac6fdce54358be58e33ddd1fb942" data-id="7746ac6fdce54358be58e33ddd1fb942"><span><div id="7746ac6fdce54358be58e33ddd1fb942" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7746ac6fdce54358be58e33ddd1fb942" title="Docker 问题整理"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Docker 问题整理</span></span></h3><a class="notion-page-link notion-block-b24b41eaf5eb45079a4af29a38e6de99" href="/b24b41eaf5eb45079a4af29a38e6de99"><span class="notion-page-title"><div class="notion-page-icon-inline notion-page-icon-image"><svg class="notion-page-title-icon notion-page-icon" alt="Docker 开发环境配置 1 (1)" viewBox="0 0 30 30" width="16"><path d="M16,1H4v28h22V11L16,1z M16,3.828L23.172,11H16V3.828z M24,27H6V3h8v10h10V27z M8,17h14v-2H8V17z M8,21h14v-2H8V21z M8,25h14v-2H8V25z"></path></svg></div><span class="notion-page-title-text">Docker 开发环境配置 1 (1)</span></span></a><details class="notion-toggle notion-block-9a79562e30ab4bddb80ab53a6e647955"><summary>常用命令</summary><div></div></details><details class="notion-toggle notion-block-aec7eca0088b45d5a2a30a65ff1598c0"><summary>换源</summary><div></div></details><details class="notion-toggle notion-block-f9a8715704e04bc494c76f0bf271ae94"><summary>docker中安装使用openvpn</summary><div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-b5a94c698c134dfdb33d943c73f01a18" href="https://donggan.me/post/install-openvpn-on-ubuntu-in-3min/"><div><div class="notion-bookmark-title">3分钟快速在 Ubuntu 上安装 OpenVPN</div><div class="notion-bookmark-description">OpenVPN 是一个开源的商业 VPN 服务软件，是一种可以提供访问远程资源安全的虚拟专用网络。 它可以同时给多个客户端提供服务，通过给每个客户端颁发一个鉴权证书对客户端进行验证，并在安全协议上使用了基于 SSL/TLS 的密钥交换。它的使用场景有很多，例如通过 OpenVPN 建立隧道，连接企业内网等。很多系统都集成或嵌入了 OpenVPN 服务。例如基于 DD-WRT 开源路由器操作系统就包含有 OpenVPN 功能。 OpenVPN 的客户端也支持各种平台，例如常见的 Linux、macOS 和 Windows 等。一些嵌入式 Linux 系统也支持 OpenVPN，例如稍好一点的智能家用路由器或入门企业级路由器也会含有 OpenVPN 服务。这是因为 OpenVPN 可以给小型企业作为远程接入办公网络使用，即从公网通过 OpenVPN 访问办公内网资源。 笔者当年加入创业团队，组建办公网络环境，就使用了一个不到千元的华硕路由器（印象中是 RT-AC68U 还是什么），在路由器上创建维护基于 OpenVPN 的远程访问体系，很好支撑了几十人规模的无线设备接入和在家远程访问办公室网络需求。 本文就出于学习和研究的目的，介绍一下如何 3 分钟迅速在 Ubuntu Linux 上搭建 OpenVPN 服务器。以下安装教程在 Ubuntu 16.04 和 18.04 两个 LTS 版本中亲测有效。 这里我们使用 社区提供的万能脚本 来进行安装和配置。 至此，OpenVPN 的快速安装就完成了。</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fdonggan.me%2Ffavicon-16x16.png?table=block&amp;id=b5a94c69-8c13-4dfd-b33d-943c73f01a18&amp;t=b5a94c69-8c13-4dfd-b33d-943c73f01a18" alt="3分钟快速在 Ubuntu 上安装 OpenVPN" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://donggan.me/post/install-openvpn-on-ubuntu-in-3min/</div></div></div></a></div><div class="notion-text notion-block-2db463a582674525bc7c8b8b6fab67bc">需要注意的是docker容器需要有host的权限!</div></div></details><details class="notion-toggle notion-block-0c962e5213af4f17b77d25c87275f21e"><summary>docker显卡插件</summary><div></div></details><details class="notion-toggle notion-block-447c5027a38848ceac6c6ee90c8d1cac"><summary>删除docker none镜像</summary><div><div class="notion-text notion-block-3160cbf550234c95b779cb9d845d441b">有效的 none 镜像Docker文件系统的组成，docker镜像是由很多 layers组成的，每个 layer之间有父子关系，所有的docker文件系统层默认都存储在/var/lib/docker/graph目录下，docker称之为图层数据库。</div><div class="notion-text notion-block-ee571a41252b486cbd37ab9ed0e73602">最后做一个总结&lt; none&gt;:&lt; none&gt; 镜像是一种中间镜像，我们可以使用docker images -a来看到，他们不会造成硬盘空间占用的问题（因为这是镜像的父层，必须存在的），但是会给我们的判断带来迷惑。</div><div class="notion-text notion-block-952c220392534bf39ad9e3b3120b1f0a">无效的 none 镜像</div><div class="notion-text notion-block-50f79f86c4a9465195d8bce1bda77431">另一种类型的 &lt; none&gt;:&lt; none&gt; 镜像是dangling images ，这种类型会造成磁盘空间占用问题。</div><div class="notion-text notion-block-2e450cf021e646ac8910bcbc559b0956">像Java和Golang这种编程语言都有一个内存区，这个内存区不会关联任何的代码。这些语言的垃圾回收系统优先回收这块区域的空间，将他返回给堆内存，所以这块内存区对于之后的内存分配是有用的</div><div class="notion-text notion-block-45456080baa142aea25a513d5f229f64">docker的悬挂(dangling)文件系统与上面的原理类似，他是没有被使用到的并且不会关联任何镜像，因此我们需要一种机制去清理这些悬空镜像。</div><div class="notion-text notion-block-185cc6d6d478428193f21165a104cb2b">我们在上文已经提到了有效的&lt; none&gt;镜像，他们是一种中间层，那无效的&lt; none&gt;镜像又是怎么出现的？这些 dangling镜像主要是我们触发 docker build 和 docker pull命令产生的。</div><div class="notion-text notion-block-3cf574a680274db5bdb5af596be58670">使用下面的命令可以清理</div><div class="notion-text notion-block-012e0aa57f27442d9a55eb4858da5a43">sudo docker rmi $(sudo docker images -f “dangling=true” -q)</div><div class="notion-text notion-block-79c7f0b909604428b49311ba2c680e72">docker没有自动垃圾回收处理机制，未来可能会有这方面的改进，但是目前我们只能这样手动清理（写个脚本就好）。</div><div class="notion-blank notion-block-27226be7bcf046bba0fec95a05ecd712"> </div></div></details><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-8ba0d0da11624477bc3ba1d525dfc387" data-id="8ba0d0da11624477bc3ba1d525dfc387"><span><div id="8ba0d0da11624477bc3ba1d525dfc387" class="notion-header-anchor"></div><a class="notion-hash-link" href="#8ba0d0da11624477bc3ba1d525dfc387" title="Docker Dockerfile"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Docker Dockerfile</span></span></h3><details class="notion-toggle notion-block-949ae5d50f834ebba872986a33e8afc7"><summary>换源</summary><div><ul class="notion-list notion-list-disc notion-block-55a8533954e442eeac4a7dbb9afc0aa7"><li>或者直接用-i命令接在install后面</li></ul></div></details><details class="notion-toggle notion-block-31c3732b7ac74856910377c7297bd2d7"><summary>当dockerfile安装失败的时候, 想进入容器debug</summary><div><div class="notion-text notion-block-6c9675612cbb47958775a912d696aa9e">如果在构建Docker镜像时遇到失败，你可以使用<code class="notion-inline-code"><b>--no-cache</b></code>选项强制重新构建，以便解决某些缓存相关的问题。此外，你还可以将失败的构建层作为一个新的容器运行，以便进入容器并手动调试问题。</div><div class="notion-text notion-block-d9317d1d8c154a8b988a3fd7809d951f">要进入失败的Docker构建，首先找到最后一个构建层的ID。在构建过程中，你会看到类似以下内容的输出：</div><div class="notion-text notion-block-e7348cdb57f24b539fbdafea1569df0c">在这里，<code class="notion-inline-code"><b>54f176c9b38d</b></code>是构建层的ID。构建失败后，使用以下命令创建一个新的容器并运行：</div><div class="notion-text notion-block-09b20bfe7e8143bb815f1243df03e054">现在你应该已经进入了容器。你可以手动运行命令来尝试找出导致构建失败的原因。在解决问题后，使用<code class="notion-inline-code"><b>exit</b></code>命令离开容器，并尝试重新构建Docker镜像。</div></div></details><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-ab22669fad0e4057b91be7677214f295" data-id="ab22669fad0e4057b91be7677214f295"><span><div id="ab22669fad0e4057b91be7677214f295" class="notion-header-anchor"></div><a class="notion-hash-link" href="#ab22669fad0e4057b91be7677214f295" title="Docker使用ubuntu初始配置"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Docker使用ubuntu初始配置</span></span></h3><ol start="1" class="notion-list notion-list-numbered notion-block-bb10c39905ff46f185d9d46803d54f60" style="list-style-type:decimal"><li>更新apt-get</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-b20fad1e9b9b47e3877a93aaf7e5cd45" style="list-style-type:decimal"><li> 更换apt-get源</li><ol class="notion-list notion-list-numbered notion-block-b20fad1e9b9b47e3877a93aaf7e5cd45" style="list-style-type:lower-alpha"><div class="notion-text notion-block-0e401e81f2f24f09804d1bb9e180d560"><a class="notion-link" href="/1761303394d24033b21da000a8967fe2"><span class="notion-page-title"><span class="notion-page-title-text">apt-get 换源</span></span></a> </div></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-9766323e6ad548708ecd60a04b306724" style="list-style-type:decimal"><li>安装cmake</li></ol><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-a45f7009ea0c493d8a6610b4e98e3b7b" href="https://vitux.com/how-to-install-cmake-on-ubuntu/"><div><div class="notion-bookmark-title">How to Install CMake on Ubuntu 20.04 LTS</div><div class="notion-bookmark-description">CMake is an open-source, cross-platform family of tools designed to build, test, and package software. CMake is used to control the software compilation process using simple platform and compiler-independent configuration files, and generate native makefiles and workspaces that can be used in the compiler environment of your choice.</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fvitux.com%2Ffavicon.ico?table=block&amp;id=a45f7009-ea0c-493d-8a66-10b4e98e3b7b&amp;t=a45f7009-ea0c-493d-8a66-10b4e98e3b7b" alt="How to Install CMake on Ubuntu 20.04 LTS" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://vitux.com/how-to-install-cmake-on-ubuntu/</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fvitux.com%2Fwp-content%2Fuploads%2Fubuntu-cmake.jpg?table=block&amp;id=a45f7009-ea0c-493d-8a66-10b4e98e3b7b&amp;t=a45f7009-ea0c-493d-8a66-10b4e98e3b7b" alt="How to Install CMake on Ubuntu 20.04 LTS" loading="lazy" decoding="async"/></div></a></div><ol start="4" class="notion-list notion-list-numbered notion-block-c0b780e3b53e4d3d9dd138cec28504c9" style="list-style-type:decimal"><li>挂载宿主机硬盘</li><ol class="notion-list notion-list-numbered notion-block-c0b780e3b53e4d3d9dd138cec28504c9" style="list-style-type:lower-alpha"></ol></ol><ol start="2" class="notion-list notion-list-numbered notion-block-b2042b794868401b8c7f88602f9eedb9" style="list-style-type:decimal"><li>对修改的container进行保存</li><ol class="notion-list notion-list-numbered notion-block-b2042b794868401b8c7f88602f9eedb9" style="list-style-type:lower-alpha"></ol></ol><ol start="3" class="notion-list notion-list-numbered notion-block-156b8e649a9f428ba93a3da48d7686c4" style="list-style-type:decimal"><li>docker 导入导出容器</li><ol class="notion-list notion-list-numbered notion-block-156b8e649a9f428ba93a3da48d7686c4" style="list-style-type:lower-alpha"><ul class="notion-list notion-list-disc notion-block-ed4423fbfacd4cdd9aee121b5b722d8b"><li>docker import之后docker run报错</li><ul class="notion-list notion-list-disc notion-block-ed4423fbfacd4cdd9aee121b5b722d8b"><li>解决方法: </li><ul class="notion-list notion-list-disc notion-block-3196293bec0745cbabaa8fff64722f75"><div class="notion-text notion-block-602cf3a7ad2249ba86dc960dfa33459b">在docker run命令最后加上command, 一般是/bin/bash</div></ul><div class="notion-blank notion-block-3def1670da4b4c6da6f151681cfe0cf8"> </div></ul></ul></ol></ol><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-97e1d97fc7ac4508bc45c46fb0975a32" data-id="97e1d97fc7ac4508bc45c46fb0975a32"><span><div id="97e1d97fc7ac4508bc45c46fb0975a32" class="notion-header-anchor"></div><a class="notion-hash-link" href="#97e1d97fc7ac4508bc45c46fb0975a32" title="docker error"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">docker error</span></span></h3><ul class="notion-list notion-list-disc notion-block-f874dda35d5042c7ab81881a8118c21a"><li>一些服务器在安装用到nvidia服务的Dockerfile的时候可能会报错</li></ul><ul class="notion-list notion-list-disc notion-block-6caad8a53a714c959d4328bb7c824fa1"><li>原因: host没有安装nvidia适配docker的驱动</li></ul><h3 class="notion-h notion-h2 notion-h-indent-1 notion-block-67fb54b45de748b9ada698ac47c773fa" data-id="67fb54b45de748b9ada698ac47c773fa"><span><div id="67fb54b45de748b9ada698ac47c773fa" class="notion-header-anchor"></div><a class="notion-hash-link" href="#67fb54b45de748b9ada698ac47c773fa" title="apt-get update"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">apt-get update</span></span></h3><ul class="notion-list notion-list-disc notion-block-7b22ce5b2eab4fc48da69f1a17cf1021"><li>有时候docker使用apt-get update的时候可能会有下面的报错</li></ul><ul class="notion-list notion-list-disc notion-block-bdbf05a3fc8444688b5c5c522d0ea7dc"><li>遇到库缺失问题，安装apt-file查找库</li></ul><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-600a4e64d6c343e08c5a44f42f05f344" data-id="600a4e64d6c343e08c5a44f42f05f344"><span><div id="600a4e64d6c343e08c5a44f42f05f344" class="notion-header-anchor"></div><a class="notion-hash-link" href="#600a4e64d6c343e08c5a44f42f05f344" title="Proxy和换源"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Proxy和换源</span></span></h2><details class="notion-toggle notion-block-4679bf4d6b7947069ee9c49491ba3126"><summary>wget 使用代理</summary><div><ul class="notion-list notion-list-disc notion-block-4e2f9fbe2a7f4de7a17ed160767a2e23"><li>For all users of the system via the <code class="notion-inline-code">/etc/wgetrc</code>or for the user only with the <code class="notion-inline-code">~/.wgetrc</code>file:</li></ul></div></details><details class="notion-toggle notion-block-1761303394d24033b21da000a8967fe2"><summary>apt-get 换源</summary><div><div class="notion-text notion-block-7942752bac7345058aafc489573fee96">清华源生成源的路径点下面的链接, 修改<b>/etc/apt/sources.list</b></div><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-6ed3dfad86034291bc9ff6161eeed870" href="https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/?spm=a2c6h.12873639.article-detail.7.4d0a3d66HQ6bML"><div><div class="notion-bookmark-title">ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror</div><div class="notion-bookmark-description">ubuntu 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站，致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务，帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fmirrors.tuna.tsinghua.edu.cn%2Fstatic%2Fimg%2Ffavicon.png?table=block&amp;id=6ed3dfad-8603-4291-bc9f-f6161eeed870&amp;t=6ed3dfad-8603-4291-bc9f-f6161eeed870" alt="ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/?spm=a2c6h.12873639.article-detail.7.4d0a3d66HQ6bML</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fmirrors.tuna.tsinghua.edu.cn%2Fstatic%2Fimg%2Flogo-share.png?table=block&amp;id=6ed3dfad-8603-4291-bc9f-f6161eeed870&amp;t=6ed3dfad-8603-4291-bc9f-f6161eeed870" alt="ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror" loading="lazy" decoding="async"/></div></a></div><ul class="notion-list notion-list-disc notion-block-cd4f95164833495da7b2de3cd79419c2"><li>其他版本</li><ul class="notion-list notion-list-disc notion-block-cd4f95164833495da7b2de3cd79419c2"><div class="notion-row"><a target="_blank" rel="noopener noreferrer" class="notion-bookmark notion-block-3bb64aecd392442a8a6b02eb91fceab1" href="https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3e221b11BVILSx"><div><div class="notion-bookmark-title">ubuntu镜像-ubuntu下载地址-ubuntu安装教程-阿里巴巴开源镜像站</div><div class="notion-bookmark-description">Ubuntu，是一款基于 Debian Linux 的以桌面应用为主的操作系统，内容涵盖文字处理、电子邮件、软件开发工具和 Web 服务等，可供用户免费下载、使用和分享。 下载地址: https://mirrors.aliyun.com/ubuntu/ 相关仓库 对于阿里云ECS用户，可以直接使用内部域名访问，而对于非云用户则需要使用公网域名 mirrors.aliyun.com 来访问。 新手推荐使用图形界面配置： 系统设置 -&gt; 软件和更新 选择下载服务器 -&gt; &quot;mirrors.aliyun.com&quot; 用你熟悉的编辑器打开： /etc/apt/sources.list 替换默认的 http://archive.ubuntu.com/ 为 mirrors.aliyun.com 以Ubuntu 14.04.5 LTS为例，最后的效果如下： deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb-src</div><div class="notion-bookmark-link"><div class="notion-bookmark-link-icon"><img src="https://www.notion.so/image/https%3A%2F%2Fdeveloper.aliyun.com%2Ffavicon.ico?table=block&amp;id=3bb64aec-d392-442a-8a6b-02eb91fceab1&amp;t=3bb64aec-d392-442a-8a6b-02eb91fceab1" alt="ubuntu镜像-ubuntu下载地址-ubuntu安装教程-阿里巴巴开源镜像站" loading="lazy" decoding="async"/></div><div class="notion-bookmark-link-text">https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3e221b11BVILSx</div></div></div><div class="notion-bookmark-image"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fimg.alicdn.com%2Ftfs%2FTB1zLW7lFT7gK0jSZFpXXaTkpXa-292-292.png?table=block&amp;id=3bb64aec-d392-442a-8a6b-02eb91fceab1&amp;t=3bb64aec-d392-442a-8a6b-02eb91fceab1" alt="ubuntu镜像-ubuntu下载地址-ubuntu安装教程-阿里巴巴开源镜像站" loading="lazy" decoding="async"/></div></a></div></ul></ul></div></details><ul class="notion-list notion-list-disc notion-block-ed8f7bc5349643f592a86075ba0e293d"><li><b>alpine修改镜像源</b></li><ul class="notion-list notion-list-disc notion-block-ed8f7bc5349643f592a86075ba0e293d"><li><b>使用阿里镜像 </b><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.jianshu.com/?t=https%3A%2F%2Fmirrors.aliyun.com"><b>https://mirrors.aliyun.com</b></a></li><ul class="notion-list notion-list-disc notion-block-973ddd78fa4c4348b2accbeb36d2f972"><div class="notion-text notion-block-61ac95b6826f4f32b2f8a9423c5caf8b"><code class="notion-inline-code">sed -i &#x27;s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g&#x27; /etc/apk/repositories</code></div></ul><li><b>使用科大镜像 </b><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://link.jianshu.com/?t=http%3A%2F%2Fmirrors.ustc.edu.cn"><b>http://mirrors.ustc.edu.cn</b></a></li><ul class="notion-list notion-list-disc notion-block-97a98f8eb43e4b7a91cc159bd7e9f4b9"><div class="notion-text notion-block-c4040d7d5c43472e9983dee8994126af"><code class="notion-inline-code">sed -i &#x27;s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g&#x27; /etc/apk/repositories</code></div></ul></ul></ul><ul class="notion-list notion-list-disc notion-block-c7b07a1ca298423d8c5e864613547470"><li>anaconda 安装后替换源</li><ul class="notion-list notion-list-disc notion-block-c7b07a1ca298423d8c5e864613547470"><li><a class="notion-link" href="/9ed2a8a9ada54ce2b64db41d27e1c678"><span class="notion-page-title"><span class="notion-page-title-text">anaconda换源</span></span></a> </li></ul></ul><ul class="notion-list notion-list-disc notion-block-3dccf781ae014583892c7eca9919ccf5"><li>pip 换源</li><ul class="notion-list notion-list-disc notion-block-3dccf781ae014583892c7eca9919ccf5"><li><a class="notion-link" href="/2e2337ffd6854b25877e7241e82fd141"><span class="notion-page-title"><span class="notion-page-title-text">pip换源</span></span></a> </li></ul></ul><ul class="notion-list notion-list-disc notion-block-e5ea4fa2c3dd4e949b8fd81ad0fa9a29"><li>cmake 使用代理</li><ul class="notion-list notion-list-disc notion-block-e5ea4fa2c3dd4e949b8fd81ad0fa9a29"><li>需要在CMakeLists.txt文件中添加代理地址</li><ul class="notion-list notion-list-disc notion-block-d16c8cee708d4d26894c5eb1c6a15ffe"><div class="notion-blank notion-block-93a3ffbf0a6743f5822cef55f2ae93de"> </div></ul></ul></ul></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>