<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Yunqing</title><description>技术博客 | 分享编程、AI和Web开发经验</description><link>https://yunqing.org/</link><language>zh_CN</language><item><title>如何在Vercel上部署博客</title><link>https://yunqing.org/posts/%E5%A6%82%E4%BD%95%E5%9C%A8vercel%E4%B8%8A%E9%83%A8%E7%BD%B2%E5%8D%9A%E5%AE%A2/</link><guid isPermaLink="true">https://yunqing.org/posts/%E5%A6%82%E4%BD%95%E5%9C%A8vercel%E4%B8%8A%E9%83%A8%E7%BD%B2%E5%8D%9A%E5%AE%A2/</guid><description>如何在Vercel上部署博客</description><pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;找到喜欢的博客&lt;/h2&gt;
&lt;p&gt;Vercel支持大量框架的博客模板，比如&lt;code&gt;nextjs&lt;/code&gt;、&lt;code&gt;astro&lt;/code&gt;、&lt;code&gt;express&lt;/code&gt;、&lt;code&gt;hexo&lt;/code&gt;等。在github等方法上挑选喜欢的模板即可(99%可以在vercel上直接部署)
我使用的模板如下，是一个使用&lt;code&gt;astro&lt;/code&gt;框架的博客模板。
::github{repo=&quot;saicaca/fuwari&quot;}
在挑选好模板后，记得fork到自己的仓库下，相当于你自己的github账户下需要有博客仓库(后续vercel是直接从github仓库里进行导入)&lt;/p&gt;
&lt;h2&gt;在vercel上部署博客&lt;/h2&gt;
&lt;p&gt;登录vercel推荐直接使用github账号登录
&lt;img src=&quot;https://s2.loli.net/2025/08/27/AaPbMDBGLvd4Os9.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;登录后，点击右边的&lt;code&gt;Add New&lt;/code&gt;，选择&lt;code&gt;Project&lt;/code&gt;
&lt;img src=&quot;https://s2.loli.net/2025/08/27/z91rI45yXDsCV7n.png&quot; alt=&quot;&quot; /&gt;
选择仓库里准备使用的模板，点击&lt;code&gt;import&lt;/code&gt;
&lt;img src=&quot;https://s2.loli.net/2025/08/27/p6rzOQuEmXZkfSP.png&quot; alt=&quot;&quot; /&gt;
进入该界面后，正常来说只需要修改&lt;code&gt;Project Name&lt;/code&gt;，博客使用的框架会被直接识别出来。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：这里如果仓库涉及到一些&lt;code&gt;环境变量&lt;/code&gt;,可以在底部的&lt;code&gt;EnvironmentVariables&lt;/code&gt;里配置&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/27/e1XZqStDKOJwARz.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;等待2-3分钟后vercel就可以部署成功你的博客
&lt;img src=&quot;https://s2.loli.net/2025/08/27/zZJQNO7DgjtW2TG.png&quot; alt=&quot;&quot; /&gt;
这时vercel会给你一个以&lt;code&gt;vercel.app&lt;/code&gt;结尾的博客地址，该地址可以直接在公网进行访问&lt;/p&gt;
&lt;h2&gt;添加自己的域名(可选)&lt;/h2&gt;
&lt;p&gt;当然，我们都希望自己的博客能有自己独特的域名。域名的购买不在这里赘述，推荐的域名购买商是：&lt;code&gt;vercel&lt;/code&gt;(胜在方便，价格合理)，&lt;code&gt;namecheap&lt;/code&gt;。
不推荐在国内域名商购买，会涉及到一些备案问题，后续可能也不方便被&lt;code&gt;google&lt;/code&gt;搜索到。&lt;/p&gt;
&lt;p&gt;在你拥有自己的域名后，进入vercel的project空间，点击&lt;code&gt;Domains&lt;/code&gt;，点击&lt;code&gt;Add Existing&lt;/code&gt;，选择你要添加域名的项目，点击&lt;code&gt;Select&lt;/code&gt;
&lt;img src=&quot;https://s2.loli.net/2025/08/27/Q2SyJ3zGlhjO8a9.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;输入你所购买的域名，注意不带www
&lt;img src=&quot;https://s2.loli.net/2025/08/27/g2rBlmN5Vpfs6z8.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;添加好域名后，域名还无法正确解析，因为vercel无法验证域名所有权是否属于你
&lt;img src=&quot;https://s2.loli.net/2025/08/27/6r9ycjSdCmlOFP7.png&quot; alt=&quot;&quot; /&gt;
这里红框部分就是你需要添加的&lt;code&gt;DNS Records&lt;/code&gt;，需要你去域名提供商那里添加一条DNS Records，另外vercel还需要你添加两个nameserver，才能正确解析。
&lt;img src=&quot;https://s2.loli.net/2025/08/27/XJMySH7CsbZRLfv.png&quot; alt=&quot;&quot; /&gt;
在正确添加完&lt;code&gt;DNS Records&lt;/code&gt;后，点击&lt;code&gt;Refresh&lt;/code&gt;，验证域名所属权后，就可以直接通过域名访问博客～&lt;/p&gt;
</content:encoded><category>blog</category><category>vercel</category></item><item><title>在vercel上购买的域名如何验证google search console</title><link>https://yunqing.org/posts/%E5%9C%A8vercel%E4%B8%8A%E8%B4%AD%E4%B9%B0%E7%9A%84%E5%9F%9F%E5%90%8D%E5%A6%82%E4%BD%95%E9%AA%8C%E8%AF%81google-search-console/</link><guid isPermaLink="true">https://yunqing.org/posts/%E5%9C%A8vercel%E4%B8%8A%E8%B4%AD%E4%B9%B0%E7%9A%84%E5%9F%9F%E5%90%8D%E5%A6%82%E4%BD%95%E9%AA%8C%E8%AF%81google-search-console/</guid><description>在vercel上购买的域名如何验证google search console</description><pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;在vercel上购买的域名如何验证google search console&lt;/h1&gt;
&lt;h2&gt;背景&lt;/h2&gt;
&lt;p&gt;最近在vercel上购买了域名用来做自己博客，为了能被google搜索到，想着在google search console上进行验证。没想到vercel可能是比较小众的域名提供商，在google search console的官方文档里没有找到vercel对应的验证方法。&lt;/p&gt;
&lt;p&gt;vercel自己也不提供快捷的TXT导入dns 记录方法，害得我自己摸索了半天&lt;/p&gt;
&lt;h2&gt;验证步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在google search console上输入自己域名开始验证，复制下图的TXT记录值
&lt;img src=&quot;https://s2.loli.net/2025/08/25/7RzoQ2trAkgcBwe.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;进入&lt;code&gt;vercel&lt;/code&gt;的&lt;code&gt;domain&lt;/code&gt;界面，在&lt;code&gt;name&lt;/code&gt;栏输入自己的域名，比如我的就是&lt;code&gt;yunqing.org&lt;/code&gt;,然后在&lt;code&gt;value&lt;/code&gt;复制步骤1得到的TXT记录值，随后点击黑色按钮ADD即可
&lt;img src=&quot;https://s2.loli.net/2025/08/25/XG4PImKDBYwQ3EV.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;等待几分钟，回到google search console点击验证即可验证成功 (事实上我根本没有等待XD)&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><category>vercel</category><category>google search console</category><category>域名</category></item><item><title>基于langfuse api提取指定trace</title><link>https://yunqing.org/posts/%E5%9F%BA%E4%BA%8Elangfuse-api%E6%8F%90%E5%8F%96%E6%8C%87%E5%AE%9Atrace/</link><guid isPermaLink="true">https://yunqing.org/posts/%E5%9F%BA%E4%BA%8Elangfuse-api%E6%8F%90%E5%8F%96%E6%8C%87%E5%AE%9Atrace/</guid><description>基于langfuse api提取指定trace的日志</description><pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;基于langfuse api提取指定trace的日志&lt;/h1&gt;
&lt;h2&gt;背景&lt;/h2&gt;
&lt;p&gt;在开发过程中，我需要批量的获取指定的trace的日志，但是langfuse的ui没法做到批量的下载指定trace为json文件，这里简单介绍一下如果通过langfuse api来实现。&lt;/p&gt;
&lt;h2&gt;sessionId获取&lt;/h2&gt;
&lt;p&gt;这里需要用到sessionId来获取当时那一批session对应的全部trace。
获取方法很简单，在langfuse的ui界面里，找到trace里的&lt;code&gt;sessionId&lt;/code&gt;列，然后复制出来&lt;/p&gt;
&lt;h2&gt;获取langfuse key和BASE_URL&lt;/h2&gt;
&lt;p&gt;在&lt;code&gt;langfuse&lt;/code&gt;ui的&lt;code&gt;setting&lt;/code&gt;里，找到&lt;code&gt;API Keys&lt;/code&gt;，创建apikey，这里会获得两个key，分别是PUBLIC_KEY和SECRECT_KEY，都需要记录下来&lt;/p&gt;
&lt;p&gt;这里如果你的langfuse在公网，那么BASE_URL就是&lt;code&gt;https://api.langfuse.com/api/public/&lt;/code&gt;，如果你的langfuse在本地，那么BASE_URL就是&lt;code&gt;http://YOUR_HOST/api/public/&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;相关代码&lt;/h2&gt;
&lt;p&gt;最后把&lt;code&gt;sessionId&lt;/code&gt;，&lt;code&gt;PUBLIC_KEY&lt;/code&gt;，&lt;code&gt;SECRECT_KEY&lt;/code&gt;,&lt;code&gt;BASE_URL&lt;/code&gt;写入到&lt;code&gt;langfuse_api.py&lt;/code&gt;中，然后运行&lt;code&gt;langfuse_api.py&lt;/code&gt;，就可以获取到指定trace的日志。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import requests
import json

# 配置
PUBLIC_KEY = &quot;&quot;
SECRET_KEY = &quot;&quot;
BASE_URL = &quot;http://10.65.171.100:33000/api/public/&quot;

# 要筛选的 message_id
TARGET_MESSAGE_ID = &quot;17400353&quot;
PAGE_SIZE=100

# 存储结果
results = 0
page = 1
has_more = True
target_date = &quot;2025-08-06&quot;
hour = 18


while has_more:
    print(f&quot;📌 正在获取第 {page} 页（每页 {PAGE_SIZE} 条）...&quot;)
    
    url = f&quot;{BASE_URL}/traces&quot;
    response = requests.get(
        url,
        auth=(PUBLIC_KEY, SECRET_KEY),
        params={
            &quot;page&quot;:page,
            &quot;limit&quot;:PAGE_SIZE,
            &quot;sessionId&quot;:&quot;test_cases_fivedoctors_20250806185514&quot;
        },
    )
    res = response.json()


    if response.status_code != 200:
        print(f&quot;❌ 请求失败: {response.status_code} - {response.text}&quot;)
        break

    try:
        data = response.json()
    except json.JSONDecodeError:
        print(&quot;❌ 返回内容不是 JSON 格式，可能是网络问题或地址错误&quot;)
        print(&quot;响应内容:&quot;, response.text)
        break

    if isinstance(data, list):
        traces = data
        has_more = len(traces) == PAGE_SIZE  # 如果刚好满页，可能还有下一页
    else:
        traces = data.get(&quot;data&quot;, [])
        current_page_size = len(traces)
        has_more = current_page_size == PAGE_SIZE

    for trace in traces:
        metadata = trace.get(&quot;metadata&quot;) or {}
        id = metadata[&quot;message_id&quot;]
        with open(f&apos;./result/{id}.json&apos;,&quot;w&quot;,encoding=&quot;utf-8&quot;) as f:
            json.dump(trace, f, indent=2, ensure_ascii=False)
            results+=1
        

    if len(traces) &amp;lt; PAGE_SIZE:
        has_more = False

    page += 1

print(f&quot;✅成功导出{results}条日志&quot;)

&lt;/code&gt;&lt;/pre&gt;
</content:encoded><category>langfuse</category><category>api</category><category>trace</category><category>log</category></item><item><title>通过TypeScript语法让大模型(LLMs)理解树形json结构</title><link>https://yunqing.org/posts/%E9%80%9A%E8%BF%87typescript%E8%AF%AD%E6%B3%95%E8%AE%A9%E5%A4%A7%E6%A8%A1%E5%9E%8Bllms%E7%90%86%E8%A7%A3%E6%A0%91%E5%BD%A2json%E7%BB%93%E6%9E%84/</link><guid isPermaLink="true">https://yunqing.org/posts/%E9%80%9A%E8%BF%87typescript%E8%AF%AD%E6%B3%95%E8%AE%A9%E5%A4%A7%E6%A8%A1%E5%9E%8Bllms%E7%90%86%E8%A7%A3%E6%A0%91%E5%BD%A2json%E7%BB%93%E6%9E%84/</guid><description>通过TypeScript语法让大模型(LLMs)理解树形json结构</description><pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;动机&lt;/h2&gt;
&lt;p&gt;最近在工作中需要针对大量的语料去抽取出树形json结构。
现有的让大模型输出json的方法一般是设置&lt;code&gt;response_format&lt;/code&gt;为&lt;code&gt;json_object&lt;/code&gt;，在你指定输出样例的key是固定的时候，能够起到很好的效果。比如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    &quot;name&quot;: &quot;John&quot;,
    &quot;age&quot;: 30,
    &quot;city&quot;: &quot;New York&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是当key是动态的时候，你很难通过自然语言准确的传达出一个key名、value可变的树形结构(可以无限延伸)。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下图这样的节点树很难用自然语言或者json格式描述出来&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2025/08/21/BnHjmyk87Q4RdDL.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;基于TypeScript语言描述节点树&lt;/h2&gt;
&lt;p&gt;经过搜索资料发现了采用&lt;code&gt;typescript&lt;/code&gt;的&lt;code&gt;interface&lt;/code&gt;类来描述你想要的树，可以让大模型理解树的嵌套结构,而且有更多丰富的表达。&lt;/p&gt;
&lt;h3&gt;参考prompt&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;请返回json数据，并严格遵循这个&lt;code&gt;Tree&lt;/code&gt;interface&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;type Tree = {
  [一级节点: string]: {
    [二级节点: string]: Level2Node;
  };
};

interface Level2Node {
  &quot;节点描述&quot;: string;
  &quot;节点任务&quot;: string[];
  // 以XXX条件作为分支，进入更深层递归节点
  [分支条件: string]: DeepNode;
}

interface DeepNode {
  &quot;节点描述&quot;: string;
  &quot;节点任务&quot;: string[];
  &quot;节点内容&quot;?：string[] | string;
  [分支条件: string]: DeepNode;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;在prompt中，可以通过string或string[]来告诉模型，希望在这个key下的value是纯字符串还是字符串数组，也可以使用?来表示这个key是一个可选key。&lt;/li&gt;
&lt;li&gt;可以使用&lt;code&gt;|&lt;/code&gt;符号表示多个可选类型&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;事实上应该还有基于&lt;code&gt;json schema&lt;/code&gt;方式的指定方式，但是笔者当时搜索了资料较少，自己摸索出来的基于typescript语法的方式有非常显著的成效，所以一直在使用这个方法，希望可以对需要指定llm生成json的读者有所帮助&lt;/p&gt;
</content:encoded><category>大模型</category><category>树形json</category><category>理解</category><category>LLMs</category><category>TypeScript</category></item><item><title>PicGo+SMMS搭建稳定图床</title><link>https://yunqing.org/posts/picgosmms%E6%90%AD%E5%BB%BA%E7%A8%B3%E5%AE%9A%E5%9B%BE%E5%BA%8A/</link><guid isPermaLink="true">https://yunqing.org/posts/picgosmms%E6%90%AD%E5%BB%BA%E7%A8%B3%E5%AE%9A%E5%9B%BE%E5%BA%8A/</guid><description>PicGo+SMMS搭建稳定图床</description><pubDate>Mon, 11 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;本人之前也折腾过Picgo+Github等图床，但是换了新设备又要重来一遍。本身图床就是生产力工具，所以越简单越快速的配置越好~&lt;/p&gt;
&lt;p&gt;smms本身免费，而且不折腾，免费版本的5GB也能满足大多数人的需要，因此选择smms。当然有更多需求可以付费升级。&lt;/p&gt;
&lt;h1&gt;下载安装PicGo&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Github上下载&lt;a href=&quot;https://github.com/Molunerfinn/PicGo/releases&quot;&gt;PicGo Github官方下载&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows用户选择红框软件下载并安装即可。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pic1.zhimg.com/v2-31c01e6b949f331ac8d8dc3d2b4b8bc6_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;山东大学镜像站下载（如果你上不了Github）&lt;a href=&quot;https://mirrors.sdu.edu.cn/github-release/1713403144/github-release/Molunerfinn_PicGo/v2.3.1/&quot;&gt;PicGo-山东大学镜像站&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows用户选择红框的下载安装即可。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pic2.zhimg.com/v2-21372e0552d4089985cbd582ae695f6b_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;smms注册并获取Token&lt;/h1&gt;
&lt;h2&gt;smms注册&lt;/h2&gt;
&lt;p&gt;访问&lt;a href=&quot;http://smms.app&quot;&gt;smms.app&lt;/a&gt;，这是sm.ms在中国大陆的专用域名，保证了网络通信顺畅。在smms.app上注册账号。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://picx.zhimg.com/v2-8c5cefdf9878fd514385c383f09edd4f_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;获取个人Token&lt;/h2&gt;
&lt;p&gt;登录后，在页面右上角User中进入Dashboard。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://picx.zhimg.com/v2-3c59a4b24bbe88e641a91fa348fcba2f_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;进入Dashboard后选择ApI Token。正常来说你需要再Generate 一个Token（笔者已经生成过了），复制你的Secret Token。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pica.zhimg.com/v2-4f01a6322b7043f19420f76a9d2f19f0_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;在PicGo中使用SMMS&lt;/h1&gt;
&lt;p&gt;进入安装好的PicGo，点击左侧&lt;strong&gt;图床设置&lt;/strong&gt;的&lt;strong&gt;SM.MS&lt;/strong&gt;，点击加号按钮，新增配置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pic1.zhimg.com/v2-1815bb6f4b0f7c5d415bf3b8f019d39e_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;需要设置的配置有三个，第一个是配置名称，根据你的喜好命名，笔者命名为smms。第二个是 &lt;strong&gt;设定Token，&lt;strong&gt;将刚才生成的Token复制进来。第三个是&lt;/strong&gt;备用上传域名&lt;/strong&gt;，使用这个域名 &lt;strong&gt;smms.app&lt;/strong&gt;。最后确定即可。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pica.zhimg.com/v2-de08ba7669f1b1303881d1ec24a174d0_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;使用smms图床&lt;/h1&gt;
&lt;p&gt;在正确配置后，我们就可以在PicGo的上传区上传图片了，支持拖拽文件，选择文件，剪切板图片上传。剪切板图片上传应该是最实用的。&lt;/p&gt;
&lt;p&gt;上传成功后，会自动复制Marddown语法的图片链接格式，非常方便~。当然也可以在左下角调整你需要的链接格式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://pic3.zhimg.com/v2-2c57b4fc7e510fae32e927f38995f2d6_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;相册&lt;/h2&gt;
&lt;p&gt;在PicGo左侧的相册可以查看曾经上传过的图片，左下角的标识可以重新复制Markdown链接~&lt;/p&gt;
</content:encoded><category>PicGo</category><category>SMMS</category><category>图床</category></item><item><title>基于python vtk的脑血管渲染</title><link>https://yunqing.org/posts/python-vtk-cerebrovascular-rendering/</link><guid isPermaLink="true">https://yunqing.org/posts/python-vtk-cerebrovascular-rendering/</guid><description>基于python vtk的脑血管渲染</description><pubDate>Mon, 11 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;由于在论文写作过程对血管有渲染需要，在原有C++代码上制作了Python vtk版本的渲染。渲染效果一般，但是用于科研绘图已经足够。源码开源在了Github上，觉得有用的话烦请点个Star&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;QingYunA/Cerebrovascular-Segmentation-Rendering-by-Python-VTK&quot;}&lt;/p&gt;
&lt;h2&gt;如何使用&lt;/h2&gt;
&lt;p&gt;使用说明在Github上有英文版本与中文版本，看着readme大概率都可以直接上手使用。&lt;/p&gt;
&lt;p&gt;需要注意的是我只测试了&lt;code&gt;.mhd&lt;/code&gt;格式的渲染，其他文件可能会出问题，欢迎提issue。&lt;/p&gt;
&lt;h2&gt;渲染效果图&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;仅渲染prediction&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://pic2.zhimg.com/v2-2a8578619c6b2df8288ded4ba5db48c5_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;prediction与gt（label）计算混淆矩阵后渲染ft,fp,tp等&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://pic1.zhimg.com/v2-cfbd0bac52b33f468ecb75de490f56e8_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在渲染基础上添加colorbar（目前做的很丑）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://pic3.zhimg.com/v2-fac9ec2fd7c11e2d8c05801bb04e9756_r.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded><category>Python</category><category>VTK</category><category>脑血管渲染</category><category>科研绘图</category></item><item><title>RSS</title><link>https://yunqing.org/posts/rss/</link><guid isPermaLink="true">https://yunqing.org/posts/rss/</guid><description>RSS</description><pubDate>Wed, 24 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;RSS软件&lt;/h2&gt;
&lt;p&gt;我使用的RSS软件是 &lt;code&gt;Fluent Reader&lt;/code&gt; , 可以在&lt;a href=&quot;https://github.com/yang991179/fluent-reader&quot;&gt;github&lt;/a&gt;上下载。&lt;/p&gt;
&lt;p&gt;整体界面相当的美观，这也是选用他的一大理由
&lt;img src=&quot;https://s3.loli.net/2023/10/30/nIdFpLT3UEsgACk.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;RSS源分享&lt;/h2&gt;
&lt;p&gt;我常用的RSS源主要包括三类&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新闻类（少数派 爱范儿）&lt;/li&gt;
&lt;li&gt;游戏类(游研社)&lt;/li&gt;
&lt;li&gt;学术类(arxiv)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Fluent Reader&lt;/code&gt; 支持导入本地RSS源为 &lt;code&gt;.opml&lt;/code&gt; , 因此这里分享我的RSS源文件。
&lt;a href=&quot;https://github.com/QingYunA/My-RSS&quot;&gt;RSS-github链接&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>RSS</category></item><item><title>LunarVim安装</title><link>https://yunqing.org/posts/lunarvim%E5%AE%89%E8%A3%85/</link><guid isPermaLink="true">https://yunqing.org/posts/lunarvim%E5%AE%89%E8%A3%85/</guid><description>LunarVim安装</description><pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;使用LunarVim已经有一段时间了，在过去的时间我使用了nvim，spacevim等一系列开箱即用的vim软件，综合体验下来，lunarvim使用丝滑，添加插件也极为方便。
但是LunarVim的安装着实有一些麻烦，因此写了本篇文章帮助大家安装。&lt;/p&gt;
&lt;h2&gt;LunarVim所需插件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Nvim v0.9.0+&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;git&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;make&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;pip&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;python&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;npm,node&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;cargo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;nerd font&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可选 lazygit
下面一步步进行安装&lt;/p&gt;
&lt;h2&gt;Nvim v0.9.0+&lt;/h2&gt;
&lt;p&gt;nvim在大多数的ubuntu 系统中，apt-get install 都无法获取到最新的nvim版本。因此这里采用github上官方推荐的方法直接安装。
下载AppImage&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim.appimage
chmod u+x nvim.appimage
./nvim.appimage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面的命令大概率会失败，&lt;strong&gt;如果失败，在运行完上面命令的基础上&lt;/strong&gt;，在运行下面的命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./nvim.appimage --appimage-extract
./squashfs-root/AppRun --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;软链接nvim,执行完下述代码后，就会出现经典的Nvim界面，此时Nvim已经安装好了。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo mv squashfs-root /
sudo ln -s /squashfs-root/AppRun /usr/bin/nvim
nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2023/10/25/1PzAyZLQs8teqrX.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;git&lt;/h2&gt;
&lt;p&gt;大多数ubuntu安装好后会自带，如果没有安装好用下面的代码安装&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;pip + python&lt;/h2&gt;
&lt;p&gt;pip基本与python 捆绑，因此通过安装anaconda可以同时安装好pip 和 python&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~
wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
bash Anaconda3-2023.09-0-Linux-x86_64.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://s2.loli.net/2023/10/25/fy5WD476Uvhkrnz.png&quot; alt=&quot;&quot; /&gt;
敲击回车
&lt;img src=&quot;https://s2.loli.net/2023/10/25/KjQqSP5LZnYOrGX.png&quot; alt=&quot;&quot; /&gt;
在该界面按两下 方向键下↓
询问你是否接受license terms 输入&lt;code&gt;yes&lt;/code&gt;
&lt;img src=&quot;https://s2.loli.net/2023/10/25/mTw2VXSJ9RypKYx.png&quot; alt=&quot;&quot; /&gt;
这里询问你是否更换Anaconda3的安装路径，如果不更改直接回车下一步即可安装完成。&lt;/p&gt;
&lt;h2&gt;npm + node&lt;/h2&gt;
&lt;p&gt;npm与node也是绑定安装，这里我选择最省事的nvm安装方法&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装好后，通过&lt;code&gt;nvm ls-remote&lt;/code&gt;可以安装的版本，选择一个最新的。这里我选的是18.18版本&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvm install v18.18.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行好后npm+node就安装完毕了。&lt;/p&gt;
&lt;h2&gt;cargo&lt;/h2&gt;
&lt;p&gt;cargo 可以通过该自动化脚本直接安装&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl https://sh.rustup.rs -sSf | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Nerd font&lt;/h2&gt;
&lt;p&gt;Nerd Font是lunarvim中各种图标能否正常显示的关键
如果你是Windows用户，可以直接去&lt;a href=&quot;https://www.nerdfonts.com/font-downloads&quot;&gt;Nerd Font&lt;/a&gt;官网下载需要的Nerd font字体并安装。建议选择&lt;code&gt;FiraCode&lt;/code&gt;。安装好后通过windows terminal ssh连接服务器，在设置中将字体改为想使用的Nerd Font
&lt;img src=&quot;https://s2.loli.net/2023/10/25/baEMcTGzYk2VyLI.png&quot; alt=&quot;&quot; /&gt;
如果你是Ubuntu用户，参考LunarVim给出的&lt;a href=&quot;https://github.com/ronniedroid/getnf&quot;&gt;建议安装方法&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;lazygit&lt;/h2&gt;
&lt;p&gt;安装好lazygit后可以在lunarvim终端，通过快捷键&amp;lt;space&amp;gt;&amp;lt;g&amp;gt;&amp;lt;g&amp;gt;快速打开lazygit。
如果你不知道什么是lazygit，请参考作者的&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;github链接&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;安装lazygit 注意 只适用于ubuntu系统
LAZYGIT_VERSION=$(curl -s &quot;https://api.github.com/repos/jesseduffield/lazygit/releases/latest&quot; | grep -Po &apos;&quot;tag_name&quot;: &quot;v\K[^&quot;]*&apos;)
curl -Lo lazygit.tar.gz &quot;https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz&quot;
tar xf lazygit.tar.gz lazygit
sudo install lazygit /usr/local/bin
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;正式安装Lunarvim&lt;/h2&gt;
&lt;p&gt;直接使用官方提供的安装方法&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LV_BRANCH=&apos;release-1.3/neovim-0.9&apos; bash &amp;lt;(curl -s https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.3/neovim-0.9/utils/installer/install.sh)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;中途遇到询问，全部输入&lt;code&gt;yes&lt;/code&gt;即可&lt;/p&gt;
&lt;p&gt;好了！到目前为止你已经安装好了lunarvim，可以使用它了。
如果不能直接在bash中通过&lt;code&gt;lvim&lt;/code&gt;命令启动lunarvim，那么应该是你的没有配置好环境变量，参考以下我的配置(在安装好lvim后会有提示)。
注意将&lt;code&gt;user&lt;/code&gt;改为你的实际用户名。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export PATH=&quot;/home/user/.local/bin/:$PATH&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同时为了避免输入lvim太麻烦，可以在bashrc或者zshrc中加入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias vim=lvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将vim映射到lvim。记得&lt;code&gt;source&lt;/code&gt;更新&lt;/p&gt;
&lt;h2&gt;我的配置文件&lt;/h2&gt;
&lt;p&gt;由于&lt;code&gt;Lunarvim&lt;/code&gt;已经将开箱即用做到了极致，因此我的个人配置更改不多，主要是将ESCAPE设置为了&lt;code&gt;jj&lt;/code&gt;，增加了一些常用的插件。
有兴趣的朋友可以fork尝试~
https://github.com/QingYunA/lvim-conifg&lt;/p&gt;
</content:encoded><category>LunarVim</category><category>安装</category></item><item><title>Nvim中配置Ruff Formatter（Python）</title><link>https://yunqing.org/posts/nvim%E4%B8%AD%E9%85%8D%E7%BD%AEruff-formatterpython/</link><guid isPermaLink="true">https://yunqing.org/posts/nvim%E4%B8%AD%E9%85%8D%E7%BD%AEruff-formatterpython/</guid><description>Nvim中配置Ruff Formatter（Python）</description><pubDate>Mon, 22 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Nvim中配置Ruff Formatter（Python）&lt;/h1&gt;
&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;笔者使用的是&lt;code&gt;Lazyvim&lt;/code&gt; ，其使用&lt;code&gt;Mason&lt;/code&gt;来管理Formatter。笔者遇到的问题主要是在Python文件中，不希望对代码宽度小于125的代码进行分行的格式化（也就是一行代码拆成多行，避免过长）。&lt;/p&gt;
&lt;p&gt;如果在每个项目里都新建一个&lt;code&gt;pyproject.toml&lt;/code&gt;又有点太蠢了，想要弄一个全局配置。&lt;/p&gt;
&lt;h2&gt;全局配置Ruff Formatter&lt;/h2&gt;
&lt;p&gt;在&lt;code&gt;~/.config/&lt;/code&gt;文件夹下新建文件夹&lt;code&gt;ruff&lt;/code&gt;，然后在&lt;code&gt;ruff&lt;/code&gt;文件夹在新建文件&lt;code&gt;pyproject.toml&lt;/code&gt;，在文件中输入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[tool.ruff]
line-length = 125
# 其他配置也可以放在这里
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存后，你的ruff已经正常工作了。&lt;/p&gt;
</content:encoded><category>Nvim</category><category>Ruff</category><category>Formatter</category><category>Python</category></item><item><title>扩散模型学习</title><link>https://yunqing.org/posts/%E6%89%A9%E6%95%A3%E6%A8%A1%E5%9E%8B%E5%AD%A6%E4%B9%A0/</link><guid isPermaLink="true">https://yunqing.org/posts/%E6%89%A9%E6%95%A3%E6%A8%A1%E5%9E%8B%E5%AD%A6%E4%B9%A0/</guid><description>扩散模型学习</description><pubDate>Mon, 22 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;扩散模型总结&lt;/h1&gt;
&lt;h2&gt;结构&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一个固定的前面加噪过程&lt;/li&gt;
&lt;li&gt;一个用来学习&lt;strong&gt;怎么去噪&lt;/strong&gt;的Unet&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;加噪过程&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;固定&lt;/strong&gt;是理解加噪的核心！&lt;/p&gt;
&lt;p&gt;加噪是一个固定的过程，给定一张图片，加噪一次和加噪100次，得到的结果是一样的（在参数固定的情况下）。&lt;/p&gt;
&lt;h4&gt;如何获取噪声？&lt;/h4&gt;
&lt;p&gt;首先引入分布的概念，我们假设真实图片的分布为$q(\mathbf{x}_0)$，$x_0$是一张从$q(\mathbf{x}_0)$采样得到的一张真实图片。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;可以将分布理解成一个班级，有50个人，采样出来的$x_0$就是一个同学&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;加噪过程是一步步进行的，把每一步记为$t$，总共需要加噪$T$次。&lt;/p&gt;
&lt;p&gt;我们通过Gaussian distribution来得到噪声，此处需要知道高斯分布由两个参数决定分别是，mean（均值）和variance(方差)，记为$\mu$和$\sigma^2$。
一个图片在第$t$步加噪来源于一个均值为$\mu_t=\sqrt{1-\beta_t}\mathbf{x_0}$，方差为$\sigma_t^2=\beta_t$的高斯分布, 可以等价表示为: 每次从一个标准正太分布中采样一个$\epsilon$，即$\epsilon \sim \mathcal {N}(0, I)$&lt;/p&gt;
&lt;h4&gt;第t步的加噪图像$\mathbf{X}_t$&lt;/h4&gt;
&lt;p&gt;加噪第t步的图像表示为 $\mathbf{x}&lt;em&gt;t=\sqrt{1-\beta_t}\mathbf{x}&lt;/em&gt;{t-1}+\sqrt{\beta_t}\epsilon$&lt;/p&gt;
&lt;p&gt;注意，此处的$\beta_t$不是常亮，会随着t的变化而变化，但是遵循($\beta_1&amp;lt;\beta_2&amp;lt;\beta_3&amp;lt;\cdots&amp;lt;\beta_T&amp;lt;1$), 可以是线性，二项式，cos等等方式。&lt;/p&gt;
&lt;p&gt;最终的加噪图像$\mathbf{X_T}$应该是纯噪声(pure noise)。&lt;/p&gt;
&lt;h3&gt;去噪过程&lt;/h3&gt;
&lt;p&gt;去噪过程就是把上面的加噪结果$\mathbf{X_T}$, 一步步的变回原来的图片$\mathbf{x_0}$。&lt;/p&gt;
&lt;p&gt;学习这个去噪过程有什么作用呢？
&lt;strong&gt;在得到一个新的加噪图片后，可以通过去噪生成全新的图片，让网络拥有了自己生成的能力。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我们记这个去噪过程为$p(x_{t-1}|x_t)$，但是这个分布是无法直接计算得到的，因此我们选用一个神经网络去拟合这个过程。也就是$p_{\theta}(x_{t-1}|x_t)$，其中$\theta$代表神经网络的参数&lt;/p&gt;
&lt;h3&gt;如何拟合去噪过程？&lt;/h3&gt;
&lt;p&gt;在这里我们假设去噪过程也是满足高斯分布的，也就是说神经网络需要学习的是前面提到的两个参数$\mu_t$和$\sigma_t^2$。（DDPM固定了方差，只学习均值，在后续的论文有改进）&lt;/p&gt;
&lt;h4&gt;定义目标函数&lt;/h4&gt;
&lt;p&gt;为了驱使神经网络在去噪过程中学习到均值，作者将加噪过程$q$与去噪过程$p_\theta$ 视为一个VAE(variational auto-encoder), 此处如果不知道VAE可以略过，只需要知道最后的Loss函数如何计算。（因为后续还涉及到KL散度，ELBO证据下限等一系列概率论知识，好奇的可以挨个探索。）&lt;/p&gt;
&lt;p&gt;这部分我暂时没看懂&lt;/p&gt;
&lt;p&gt;经过一系列条件后，可以得到一个&quot;nice property&quot;
$$
q(\mathbf{x_t}|\mathbf{x_0})=\mathcal{N}(\mathbf{x_t};\sqrt{\bar{\alpha_t}},(1-\bar{\alpha_t})\mathbf{I})
$$
其中，$\alpha_{t}=1-\beta_t$，$\bar{\alpha_t}=\prod_{s=1}^t\alpha_s$。
这个性质意味着&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;可以从高斯分布中采样噪声，然后通过合适的缩放，使得$\mathbf{x_0}$直接变为$\mathbf{x_t}$，其中$\bar{\alpha_t}$可以由已知的$\beta_t$计算得到。&lt;/li&gt;
&lt;li&gt;可以将预测均值的网络转换成预测噪声的网络。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最终的目标函数定义如下：
$$|\epsilon-\epsilon_\theta(\mathbf{x}&lt;em&gt;t,t)|^2=|\epsilon-\epsilon&lt;/em&gt;\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{(1-\bar{\alpha}_t)}\epsilon,t)|^2$$&lt;/p&gt;
&lt;h3&gt;总结&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;从真实世界中存在的数据分布$q(\mathbf{x_0})$随机采样了图片$\mathbf{x_0}$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从1到$\mathbf{T}$之间均匀的采样出噪声t&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从高斯分布中采样出噪声$\epsilon \sim \mathcal{N}(0, I)$，并用噪声污染采样到的图片$\mathbf{x_0}$，得到$\mathbf{x_t}=\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{(1-\bar{\alpha}_t)}\epsilon$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;神经网络基于被污染的图片$\mathbf{x_t}$，预测出噪声$\epsilon_\theta(\mathbf{x}_t,t)$&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><category>扩散模型</category><category>学习</category></item><item><title>Latex常用符号</title><link>https://yunqing.org/posts/latex%E5%B8%B8%E7%94%A8%E7%AC%A6%E5%8F%B7/</link><guid isPermaLink="true">https://yunqing.org/posts/latex%E5%B8%B8%E7%94%A8%E7%AC%A6%E5%8F%B7/</guid><description>Latex常用符号</description><pubDate>Thu, 03 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;pa&apos;r&lt;img src=&quot;https://cdn.nlark.com/yuque/0/2022/png/25825898/1667053306362-05f3a5d3-4f44-4a45-a23c-95f4159e2dfc.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.nlark.com/yuque/0/2022/png/25825898/1667053315181-03140747-f90d-4ba0-b1c2-853056fb4020.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.nlark.com/yuque/0/2022/png/25825898/1667053325142-8926f61e-8d39-4581-8a9a-90073eb570cc.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.nlark.com/yuque/0/2022/png/25825898/1667053331169-df57dc70-230e-42c0-8af2-37c0f780a4e4.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.nlark.com/yuque/0/2022/png/25825898/1667053336281-da5e0ca6-2805-42ef-aea3-9009b50bf3bc.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content:encoded><category>LaTeX</category><category>符号</category></item><item><title>Ubuntu常用命令</title><link>https://yunqing.org/posts/ubuntu%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</link><guid isPermaLink="true">https://yunqing.org/posts/ubuntu%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</guid><description>Ubuntu常用命令</description><pubDate>Tue, 11 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;网络训练命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 训练
torchrun --nproc_per_node 1 --master_port 12364 train.py --gpus 1 -o ./logs/test-unet/ --conf_path ./conf/conf.yml

# 预测
torchrun --nproc_per_node 1 --master_port 12365 predict.py --gpus 0 -o ./results/unet_still_work/ --conf_path ./conf/unet.yml  -k ./logs/unet_still_work/
tar xvf work.tar # 解压tar文件
tar -cvf FileName.tar DirName # 将DirName和其下所有文件（夹）打包
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;ubuntu 系统命令&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;tar xvf work.tar # 解压tar文件
tar -cvf FileName.tar DirName # 将DirName和其下所有文件（夹）打包


watch -n 2 --color gpustat --c  #监视GPU
sudo chmod 0750 /home/username  #设置其他用户无法访问
ubuntu-drivers devices  查看可用驱动
uname -a  查看系统信息
uncompyle6 -o DataManage.py .\DataManage.pyc #反编译pyc -&amp;gt; py
lspci -vnn | grep VGA 查看系统型号
df -h #查看硬盘容量
chomd -R 700 dir # 使得该路径仅用户自己可访问


curl &apos;http://202.204.48.66&apos; --data &quot;DDDDD=41824276&amp;amp;upass=08173039&amp;amp;0MKKey=&quot;
unset http_proxy
unset https_proxy
x-www-browser http://some-url.org

sudo /usr/local/sunlogin/bin/sunloginclient

#删除一天内的
sudo find /tmp -type f -atime +1 -delete 
# 删除 pip 缓存的包
pip cache purge

#查看硬盘情况
df -h
#查找路径下前50大的文件
sudo du -hd 1 /home/user/ | sort -hr | head -50

#服务器传输指令
sudo scp -r -P 10091 /data/cc/TOF_private/resample/label+/ cyq@frp.visual3d.cn:/external_disk/cc_data/

# 清理 gpu 僵尸进程，该指令会杀死所有进程
fuser -v /dev/nvidia2 | awk &apos;{print $0}&apos; |  xargs kill -9
其中 nvidia2 代表杀死序号 2 的nvidia 卡(一般顺序是 卡 0，卡 1，卡 2....)

# 安装一个程序缺失的包
pip install pipreqs
pipreqs ./ # 会生成一个 requirments txt

# 让一个文件可读可写可执行
chmod 777 xxx.file 
4 （read） 2 （write） 1 (execute)

# 修改文件所有者
chown cc:cc cyq.txt
# 找到frp进程与后台运行frp
ps -aux|grep frp| grep -v grep

# clash for windwos使用
路径 ./config/clash4linux
# 运行
./clash_linux
# 设置终端走代理
export http_proxy=&quot;http://127.0.0.1:10809&quot;
export https_proxy=&quot;http://127.0.0.1:10808&quot;
# git代理
git config --global http.proxy &apos;http://127.0.0.1:10809&apos;
git config --global https.proxy &apos;http://127.0.0.1:10808&apos;

# 取消代理
unset http_proxy
unset https_proxy

# git取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

删除none的镜像，要先删除镜像中的容器。要删除镜像中的容器，必须先停止容器。
docker images
$ docker stop $(docker ps -a | grep &quot;Exited&quot; | awk &apos;{print $1 }&apos;) //停止容器
$ docker rm $(docker ps -a | grep &quot;Exited&quot; | awk &apos;{print $1 }&apos;) //删除容器
$ docker rmi $(docker images | grep &quot;none&quot; | awk &apos;{print $3}&apos;) //删除镜像

#指定程序可见gpu
CUDA_VISIBLE_DEVICES=0,1,2,3 python xxx.py
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;
</content:encoded><category>Ubuntu</category><category>命令</category></item></channel></rss>