<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on 111qqz's blog</title><link>https://111qqz.com/en/post/</link><description>Recent content in Posts on 111qqz's blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2015-2026 111qqz</copyright><lastBuildDate>Sun, 17 Dec 2023 18:22:24 +0800</lastBuildDate><atom:link href="https://111qqz.com/en/post/index.xml" rel="self" type="application/rss+xml"/><item><title>caffe 源码阅读笔记</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-06-30-caffe-source-code-analysis/</link><pubDate>Tue, 30 Jun 2020 19:47:02 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-06-30-caffe-source-code-analysis/</guid><description>&lt;p&gt;caffe做部署是YYDS!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/01/caffe-source-code-analysis-part1/" target="_blank" rel="noreferrer"&gt;blob&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/01/caffe-source-code-analysis-part2/" target="_blank" rel="noreferrer"&gt;layer&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/01/caffe-source-code-analysis-part3/" target="_blank" rel="noreferrer"&gt;net&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part4/" target="_blank" rel="noreferrer"&gt;激活函数&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part5/" target="_blank" rel="noreferrer"&gt;卷积&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part6/" target="_blank" rel="noreferrer"&gt;reshape&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part7/" target="_blank" rel="noreferrer"&gt;slice&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/04/caffe-source-code-analysis-part8/" target="_blank" rel="noreferrer"&gt;loss function&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/05/caffe-source-code-analysis-part9/" target="_blank" rel="noreferrer"&gt;reduce&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/05/caffe-source-code-analysis-part10/" target="_blank" rel="noreferrer"&gt;eltwise&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://111qqz.github.io/2020/05/caffe-source-code-analysis-part11/" target="_blank" rel="noreferrer"&gt;argmax&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>[施工中] cupy与torch的导入顺序不同对计算结果的影响</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/2023-12-17-cupy-torch-import-order-impact/</link><pubDate>Sun, 17 Dec 2023 18:22:24 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/2023-12-17-cupy-torch-import-order-impact/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;公司内部的基于torch的toolbox发现某个版本之后,结果发生了偏移. 通过一系列排查,发现当导入cupy和torch的顺序不同时，计算结果会有所差异。
也就是说,如下两段代码会导致模型训练等环节的计算得到不同的结果.&lt;/p&gt;</description></item><item><title>Build Onnxruntime With Bazel</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/2023-01-16-build-onnxruntime-with-bazel/</link><pubDate>Mon, 16 Jan 2023 16:28:22 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/2023-01-16-build-onnxruntime-with-bazel/</guid><description>&lt;h1 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;需要使用bazel build &lt;a href="https://github.com/microsoft/onnxruntime" target="_blank" rel="noreferrer"&gt;onnxruntime&lt;/a&gt;&lt;/p&gt;</description></item><item><title>【施工中】gitlab ci docker executor指定用户执行</title><link>https://111qqz.com/en/post/%E5%B7%A5%E5%85%B7/2022-12-10-specify-user-to-run-docker-executor-in-gitlab-ci/</link><pubDate>Sat, 10 Dec 2022 18:04:41 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E5%85%B7/2022-12-10-specify-user-to-run-docker-executor-in-gitlab-ci/</guid><description>&lt;h1 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;需要在gitlab &lt;a href="https://docs.gitlab.com/ee/ci/pipelines/" target="_blank" rel="noreferrer"&gt;pipelines&lt;/a&gt;中跑一堆测试
其中某些测试需要与rancher交互，在训练集群上执行一个训练任务&lt;/p&gt;</description></item><item><title>[施工中]caffe 源码学习笔记(11) softmax</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2022-08-06-caffe-source-code-analysis_part12/</link><pubDate>Sat, 06 Aug 2022 12:26:03 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2022-08-06-caffe-source-code-analysis_part12/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;2022年惊讶的发现，当时竟然没有写关于softmax的笔记，因此来补充一下。&lt;/p&gt;</description></item><item><title>浅谈 Cpp Value Categories</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-04-12-cpp-value-caregories/</link><pubDate>Tue, 12 Apr 2022 21:39:31 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-04-12-cpp-value-caregories/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;每一个cpp expression都有一个type 和 value category 属性
前者大家都比较了解，但是后者却常常被忽视&lt;/p&gt;</description></item><item><title>redis学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2022-04-08-redis-notes/</link><pubDate>Fri, 08 Apr 2022 10:53:16 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2022-04-08-redis-notes/</guid><description>&lt;p&gt;最近在做一个智能算力的项目，其中需要用到redis维护某个全局的时间窗口&lt;/p&gt;</description></item><item><title>[施工中] levelDB 代码阅读笔记 06 iterator</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-26-reading-leveldb-code-06/</link><pubDate>Sat, 26 Mar 2022 16:48:54 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-26-reading-leveldb-code-06/</guid><description>&lt;h2 class="relative group"&gt;接口
 &lt;div id="接口" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8e%a5%e5%8f%a3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;一个ABC，后面会继承这个类做各种实现&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 05 arena</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-20-reading-leveldb-code-05/</link><pubDate>Sun, 20 Mar 2022 17:23:18 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-20-reading-leveldb-code-05/</guid><description>&lt;p&gt;arena时levelDB中的内存池实现&lt;/p&gt;

&lt;h2 class="relative group"&gt;接口
 &lt;div id="接口" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8e%a5%e5%8f%a3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;没有太多好说的，都非常直观。 补了些注释&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 04 filter</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-12-reading-leveldb-code-04/</link><pubDate>Sun, 13 Mar 2022 07:55:17 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-12-reading-leveldb-code-04/</guid><description>&lt;h2 class="relative group"&gt;FilterPolicy接口
 &lt;div id="filterpolicy接口" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#filterpolicy%e6%8e%a5%e5%8f%a3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LEVELDB_EXPORT&lt;/span&gt; &lt;span class="n"&gt;FilterPolicy&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;FilterPolicy&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Return the name of this policy. Note that if the filter encoding
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// changes in an incompatible way, the name returned by this method
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// must be changed. Otherwise, old incompatible filters may be
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// passed to methods of this type.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// keys[0,n-1] contains a list of keys (potentially with duplicates)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// that are ordered according to the user supplied comparator.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Append a filter that summarizes keys[0,n-1] to *dst.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Warning: do not change the initial contents of *dst. Instead,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// append the newly constructed filter to *dst.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;CreateFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Slice&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// &amp;#34;filter&amp;#34; contains the data appended by a preceding call to
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// CreateFilter() on this class. This method must return true if
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// the key was in the list of keys passed to CreateFilter().
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// This method may return true or false if the key was not on the
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// list, but it should aim to return false with a high probability.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;KeyMayMatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Slice&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Slice&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;其中CreateFilter的含义是从n个key生成一个 std::string. 生成的std::string可以包含n个key的信息(类似于生成了一个全集) 从而后续判断某个key是否在其中。&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 03 cache</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-06-reading-leveldb-code-03/</link><pubDate>Sun, 06 Mar 2022 17:20:59 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-06-reading-leveldb-code-03/</guid><description>&lt;h2 class="relative group"&gt;Cache接口
 &lt;div id="cache接口" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cache%e6%8e%a5%e5%8f%a3" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;没有太多好说的，可以注意这里用了void*来表示任意类型数据。 在c++17之后可以考虑用std::any代替，参考 &lt;a href="https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-any-notes/" &gt;std::any 笔记&lt;/a&gt;&lt;/p&gt;</description></item><item><title>std::shared_ptr 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-shared-ptr-notes/</link><pubDate>Sat, 05 Mar 2022 16:33:25 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-shared-ptr-notes/</guid><description>&lt;h2 class="relative group"&gt;概述
 &lt;div id="概述" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%a6%82%e8%bf%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;std::shared_ptr是智能指针的一种，在modern c++中被广泛使用（&lt;del&gt;甚至滥用&lt;/del&gt;)&lt;/p&gt;</description></item><item><title>[c++17] std::any 笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-any-notes/</link><pubDate>Sat, 05 Mar 2022 16:02:36 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-any-notes/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;一种很常见的背景是，需要表示未知类型的数据。 比如可能是用户提供的数据，比如是一个Cache的实现， value想支持任意类型的数据&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 02 comparator</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-01-reading-leveldb-code-02/</link><pubDate>Tue, 01 Mar 2022 20:01:50 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-03-01-reading-leveldb-code-02/</guid><description>&lt;p&gt;levelDB是一个有序的KV存储，因此key的顺序是十分关键的
levelDB提供用户自己定义key顺序的能力&lt;/p&gt;</description></item><item><title>levelDB 代码阅读笔记 01 db.h</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-02-26-reading-leveldb-code-01/</link><pubDate>Sat, 26 Feb 2022 19:10:30 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/leveldb/2022-02-26-reading-leveldb-code-01/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在做一个智能算力相关的项目，类似&lt;a href="https://tech.meituan.com/2021/06/17/waimai-ai-advertisement.html" target="_blank" rel="noreferrer"&gt;美团外卖广告智能算力的探索与实践&lt;/a&gt;
其中实现控制系统需要与数据库交互。 虽然最后技术选型并没有使用到levelDB,但是想趁机把代码读了吧。&lt;/p&gt;</description></item><item><title>2022 TO DO list</title><link>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2022-02-26-2022-to-do-list/</link><pubDate>Sat, 26 Feb 2022 18:12:20 +0800</pubDate><guid>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2022-02-26-2022-to-do-list/</guid><description>&lt;p&gt;竟然一下子就2022年了，时间过得真快。 还是简单列一下TODO list吧。&lt;/p&gt;</description></item><item><title>博客除草</title><link>https://111qqz.com/en/post/%E5%B7%A5%E5%85%B7/2021-02-02-better-blog/</link><pubDate>Wed, 02 Feb 2022 19:56:49 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E5%85%B7/2021-02-02-better-blog/</guid><description>&lt;p&gt;博客要长草了。。趁着过年时间多，打理一下。。&lt;/p&gt;

&lt;h2 class="relative group"&gt;添加google analytics
 &lt;div id="添加google-analytics" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%b7%bb%e5%8a%a0google-analytics" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;hugo本身已经集成了这个功能
要点是集成的是旧版本的universal analytics (对应的是UA-ID)
而目前google主推得其实是新版本google analytics 4(对应的是GA4-ID)&lt;/p&gt;</description></item><item><title>ska::flat_hash_map 源码分析</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2021-08-21-ska-flat-hash-map-notes/</link><pubDate>Sat, 21 Aug 2021 17:43:02 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2021-08-21-ska-flat-hash-map-notes/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在调研各种hashmap..
发现ska::flat hash map性能优秀。。于是来看看代码。。
发现最大的特点是,ska::flat_hash_map使用了带probe count上限的robin hood hashing&lt;/p&gt;</description></item><item><title>一次avx2在gcc上core dump的排查经历</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2021-07-22-debugging-avx2-on-gcc4/</link><pubDate>Thu, 22 Jul 2021 20:01:50 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/2021-07-22-debugging-avx2-on-gcc4/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;起因是同事在实现int4的功能，结果流水线有一条死活过不了(gcc版本为4.8.5),一直core dump
经过初步排查，找出了如下最小可以复现的代码:&lt;/p&gt;</description></item><item><title>[施工完成] CSAPP shell lab</title><link>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2021-06-26-csapp-shelllab/</link><pubDate>Sat, 26 Jun 2021 18:18:52 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2021-06-26-csapp-shelllab/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;动手实现一个简单的Lab，主要依赖于课本第八章的内容
感觉主要是05比较难。。发现执行的顺序不太对。。原因是SIGCHLD里面waitpid参数没写对。。
后面的就相对简单了
累计大概花了10个小时的样子&lt;/p&gt;</description></item><item><title>(CSE 599W)Reverse Mode Autodiff</title><link>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/2021-04-05-reverse-mode-autodiff/</link><pubDate>Mon, 05 Apr 2021 14:44:25 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/2021-04-05-reverse-mode-autodiff/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;怎么算微分。。通常有三种方法。&lt;/p&gt;</description></item><item><title>[施工完成] CSAPP Malloc lab</title><link>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2021-03-14-csapp-malloclab/</link><pubDate>Sun, 14 Mar 2021 16:05:42 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2021-03-14-csapp-malloclab/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;动手实现一个memory allocator,体会core到爆炸的乐趣(不是&lt;/p&gt;</description></item><item><title>【推荐系统】Toward the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F/2021-01-23-toward-the-next-generation-of-recommendersystems/</link><pubDate>Sat, 23 Jan 2021 17:42:15 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F/2021-01-23-toward-the-next-generation-of-recommendersystems/</guid><description>&lt;p&gt;迫于生计，从今天开始学习推荐系统相关的内容，今天先来读一篇推荐系统领域的综述 &lt;a href="https://ieeexplore.ieee.org/document/1423975" target="_blank" rel="noreferrer"&gt;Toward the next generation of recommender systems: a survey of the state-of-the-art and possible extensions&lt;/a&gt;&lt;/p&gt;</description></item><item><title>使用github actions来部署 github pages</title><link>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2021-01-23-using-github-actions-to-deploy-github-pages/</link><pubDate>Sat, 23 Jan 2021 17:08:00 +0800</pubDate><guid>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2021-01-23-using-github-actions-to-deploy-github-pages/</guid><description>&lt;p&gt;目前我的博客是部署在github pages上，源码是一个repo,渲染出来的静态页面是一个repo. 更新的时候是把后者作为前者的submodule.
感觉这种方式有些落后了，简直和某司内部的平台有的一比。因此尝试采用了下github actions，来自动化这个部署的流程。&lt;/p&gt;</description></item><item><title>2020年终总结</title><link>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2021-01-03-my-2020/</link><pubDate>Sun, 03 Jan 2021 16:54:57 +0800</pubDate><guid>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2021-01-03-my-2020/</guid><description>&lt;p&gt;本来不知道写什么所以不打算写了，不过后来觉得可以把今年做的一些重大的决定写出来，把当时的分析和想法记录下来。这样若干年后再回看，就能找到，是哪些明智或愚蠢的决定，对人生产生了巨大的影响。&lt;/p&gt;</description></item><item><title>[施工完成] CSAPP Cachelab</title><link>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2020-12-26-csapp-cachelab/</link><pubDate>Sat, 26 Dec 2020 16:40:42 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2020-12-26-csapp-cachelab/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;CSAPP:3e 的配套实验 &lt;a href="http://csapp.cs.cmu.edu/3e/README-cachelab" target="_blank" rel="noreferrer"&gt;地址&lt;/a&gt;
分成了两个部分，第一部分是模拟一下cache的miss,hit,evict的规则。第二部分是优化一个矩阵的转置，使得miss尽可能少。&lt;/p&gt;</description></item><item><title>【施工中】torch2trt　学习笔记</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/2020-09-18-torch2trt-notes/</link><pubDate>Fri, 18 Sep 2020 11:02:50 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/2020-09-18-torch2trt-notes/</guid><description>&lt;h2 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;偶然发现了 &lt;a href="https://github.com/NVIDIA-AI-IOT/torch2trt" target="_blank" rel="noreferrer"&gt;torch2trt&lt;/a&gt; 的模型转换方案，思路是直接将pytorch op映射到TensorRT的python api. 在pytorch进行每个op　forward的时候，tensorrt也相应往network上添加op.
这里会先涉及torch2trt的使用，后面会补充这个转换工具的代码学习&lt;/p&gt;</description></item><item><title>Jetson Nano踩坑记录</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/2020-09-08-play-with-jetson-nano/</link><pubDate>Tue, 08 Sep 2020 14:41:34 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/2020-09-08-play-with-jetson-nano/</guid><description>&lt;h2 class="relative group"&gt;写在前面
 &lt;div id="写在前面" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%99%e5%9c%a8%e5%89%8d%e9%9d%a2" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;主要是需要在jetson nano做模型转换，来记录下踩的坑
目前有两条路径，一条是我们现有的转换路径，也就是pytorch-&amp;gt;onnx(-&amp;gt;caffe)-&amp;gt;trt的路径
在这条路径上踩了比较多的坑，最终暂时放弃，最直接的原因是&lt;strong&gt;cudnn8.0升级接口发生改动，编译caffe遇到较多问题&lt;/strong&gt;
这里其实仍然采用了两条平行的路径，一条是直接在nano上构建环境，另外一种是基于docker(包括构建交叉编译环境用于加快编译速度)&lt;/p&gt;</description></item><item><title>k8s nodes is forbidden user cannot list resource nodes in api group at the cluster scope</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%AE%B9%E5%99%A8/2020-05-07-install-k8s-nodes-forbidden-error/</link><pubDate>Thu, 07 May 2020 16:01:52 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%AE%B9%E5%99%A8/2020-05-07-install-k8s-nodes-forbidden-error/</guid><description>&lt;p&gt;继续将k8s用于模型转换和部署的自动化流程&amp;hellip;然后发现之前安装k8s的文档不work了．．
时间是2020年5月7日，当前最新的k8s版本是　v1.18.2&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(11) argmax layer</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-05-06-caffe-source-code-analysis_part11/</link><pubDate>Wed, 06 May 2020 21:26:03 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-05-06-caffe-source-code-analysis_part11/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;似乎没什么背景,继续看caffe代码&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(10) eltwise layer</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-05-03-caffe-source-code-analysis_part10/</link><pubDate>Sun, 03 May 2020 17:53:22 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-05-03-caffe-source-code-analysis_part10/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;这个layer和reduce layer有一些相似,就干脆一起看了.
作用是输入至少两个blob,然后对每个blob中的元素所一些运算,最后得到一个blob.&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(9) reduce layer</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-05-03-caffe-source-code-analysis_part9/</link><pubDate>Sun, 03 May 2020 15:16:53 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-05-03-caffe-source-code-analysis_part9/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;其实没什么背景,继续啃caffe代码而已2333&lt;/p&gt;</description></item><item><title>Focal Loss for Dense Object Detection(RetinaNet) 学习笔记</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/2020-05-02-retinanet-notes/</link><pubDate>Sat, 02 May 2020 18:50:06 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/2020-05-02-retinanet-notes/</guid><description>&lt;p&gt;先写个简略版的笔记..看之后的情况要不要读得更精细一点..&lt;/p&gt;

&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;two stage的检测比one stage的检测效果好,原因是啥?&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(8) loss function</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-18-caffe-source-code-analysis_part8/</link><pubDate>Sat, 18 Apr 2020 18:33:29 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-18-caffe-source-code-analysis_part8/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;虽然不太care 训练的过程，&lt;del&gt;但是由于容易看懂的layer都看得差不多了&lt;/del&gt; 所以打算看一下这些loss function.&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(7) slice layer</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-13-caffe-source-code-analysis_part7/</link><pubDate>Mon, 13 Apr 2020 21:22:54 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-13-caffe-source-code-analysis_part7/</guid><description>&lt;h2 class="relative group"&gt;背景　
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;ocr组那边有个shuffle net 的网络,里面有个pytorch op叫chunk,转成的onnx对应的op是 &lt;a href="https://github.com/onnx/onnx/blob/master/docs/Operators.md#Split" target="_blank" rel="noreferrer"&gt;split&lt;/a&gt;&lt;/p&gt;</description></item><item><title>thinkpad t430 manjaro系统安装nvidia驱动</title><link>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2020-04-11-install-nvidia-driver-on-thinkpad-t430-manjaro-system/</link><pubDate>Sun, 12 Apr 2020 07:10:14 +0800</pubDate><guid>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2020-04-11-install-nvidia-driver-on-thinkpad-t430-manjaro-system/</guid><description>&lt;p&gt;前几天装驱动把笔记本搞崩溃了..重新装了kde桌面环境的manjaro&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(6) reshape layer</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-09-caffe-source-code-analysis_part6/</link><pubDate>Thu, 09 Apr 2020 21:03:06 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-09-caffe-source-code-analysis_part6/</guid><description>&lt;h2 class="relative group"&gt;背景　
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;最近在魔改 tensorRT 的caffe parser
之前caffe模型转到trt模型时，有一个修改是需要将reshape　layer的param末尾补1,比较繁琐，于是看了下caffe的reshape layer的实现．&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(5) 卷积</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-08-caffe-source-code-analysis_part5/</link><pubDate>Wed, 08 Apr 2020 20:29:37 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-08-caffe-source-code-analysis_part5/</guid><description>&lt;h2 class="relative group"&gt;caffe中卷积运算的实现
 &lt;div id="caffe中卷积运算的实现" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#caffe%e4%b8%ad%e5%8d%b7%e7%a7%af%e8%bf%90%e7%ae%97%e7%9a%84%e5%ae%9e%e7%8e%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;暴力实现的卷积大概是这样子的&lt;/p&gt;</description></item><item><title>tensorrt INT8 量化debug记录（cuda error 700）</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2020-04-08-cuda-error-700-when-using-tensorrt-calibration/</link><pubDate>Wed, 08 Apr 2020 14:58:16 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2020-04-08-cuda-error-700-when-using-tensorrt-calibration/</guid><description>&lt;p&gt;背景是要把某个caffe model,转换成tensorrt的INT8 模型。 然后遇到如下报错:&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(4) 激活函数</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-07-caffe-source-code-analysis_part4/</link><pubDate>Tue, 07 Apr 2020 23:21:40 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-04-07-caffe-source-code-analysis_part4/</guid><description>&lt;p&gt;在看过caffe代码的三个核心部分,blob,layer,net之后，陷入了不知道以什么顺序继续看的困境。&lt;/p&gt;</description></item><item><title>Faster Rcnn 目标检测算法</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/2020-04-05-faster-rcnn/</link><pubDate>Sun, 05 Apr 2020 20:38:28 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/2020-04-05-faster-rcnn/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;2019年对了好几次faster rcnn，第一次是赛事之窗项目和北京的同事，对齐sdk和训练的实现。
第二次是被tensorRT4和tensorRT5之间默认参数不一致的问题坑了一下。
第三次是被caffe proto中roi align 的默认参数坑了。&lt;/p&gt;</description></item><item><title>resnet 学习笔记</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/2020-04-05-resnet-notes/</link><pubDate>Sun, 05 Apr 2020 16:49:44 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/2020-04-05-resnet-notes/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;基于Conv的方法在某年的ImageNet比赛上又重新被人想起之后，大家发现网络堆叠得越深，似乎在cv的各个任务上表现的越好。&lt;/p&gt;</description></item><item><title>tensorRT 模型兼容性说明</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2020-03-24-tensorrt-model-compatibility-notes/</link><pubDate>Tue, 24 Mar 2020 12:26:01 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2020-03-24-tensorrt-model-compatibility-notes/</guid><description>&lt;h2 class="relative group"&gt;名词说明
 &lt;div id="名词说明" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%90%8d%e8%af%8d%e8%af%b4%e6%98%8e" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CUDA. 一般来说指的是CUDA SDK. 目前经常使用的是CUDA 8.0和CUDA 10.1两个版本. 8.0和10.1都是SDK的版本号.&lt;/li&gt;
&lt;li&gt;CUDNN. The NVIDIA CUDA® Deep Neural Network library (cuDNN). 是一个可以为神经网络提供GPU加速的库&lt;/li&gt;
&lt;li&gt;compute capability. 是GPU的固有参数,可以理解为GPU的版本.越新的显卡该数值往往越高.&lt;/li&gt;
&lt;li&gt;tensorRT.NVIDIA TensorRT™ is an SDK for high-performance deep learning inference. 是一个深度学习推理库,旨在提供高性能的推理速度.&lt;/li&gt;
&lt;li&gt;plan file,也称为 engine plan. 是生成的tensorRT 模型文件.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;兼容性说明
 &lt;div id="兼容性说明" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%bc%e5%ae%b9%e6%80%a7%e8%af%b4%e6%98%8e" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Engine plan 的兼容性依赖于GPU的compute capability 和 TensorRT 版本, 不依赖于CUDA和CUDNN版本.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>【施工完成】CSAPP archlab</title><link>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2020-02-26-csapp-archlab/</link><pubDate>Wed, 26 Feb 2020 22:54:33 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2020-02-26-csapp-archlab/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;CSAPP:3e第四章配套的实验。 第四章是讲处理器架构的，章节的重点是实现一个六阶段流水线。&lt;/p&gt;</description></item><item><title>2020 to do List</title><link>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2020-02-21-2020-to-do-list/</link><pubDate>Fri, 21 Feb 2020 20:12:51 +0800</pubDate><guid>https://111qqz.com/en/post/%E7%94%9F%E6%B4%BB/2020-02-21-2020-to-do-list/</guid><description>&lt;p&gt;就..终于再次出现了to do list. 原因是之前一直不知道如何置顶文章&amp;hellip;.&lt;/p&gt;</description></item><item><title>【施工完成】CSAPP attacklab</title><link>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2020-02-15-csapp-attacklab/</link><pubDate>Sat, 15 Feb 2020 23:24:23 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2020-02-15-csapp-attacklab/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;CSAPP 处理器那章快看完了，猛然发现竟然还有个attacklab.. 之前以为每一章只有一个lab&lt;/p&gt;</description></item><item><title>【施工完成】CSAPP bomb lab</title><link>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2020-02-01-csapp-bomb-lab/</link><pubDate>Sat, 01 Feb 2020 19:36:23 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%85%AC%E5%BC%80%E8%AF%BE/csapp/2020-02-01-csapp-bomb-lab/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;疫情肆虐,在家百无聊赖,于是开始拆炸弹.
炸弹分为6个阶段,每个阶段必须输入一个特定的字符串,否则炸弹就会爆炸.
提供给我们的是一个.c文件和一个linux可执行文件bomb&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(3) Net</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-01-12-caffe-source-code-analysis_part3/</link><pubDate>Sun, 12 Jan 2020 19:18:15 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-01-12-caffe-source-code-analysis_part3/</guid><description>&lt;h2 class="relative group"&gt;Net 基本介绍
 &lt;div id="net-基本介绍" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#net-%e5%9f%ba%e6%9c%ac%e4%bb%8b%e7%bb%8d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;网络通过组成和自微分共同定义一个函数及其梯度。&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(2) Layer</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-01-11-caffe-source-code-analysis_part2/</link><pubDate>Sat, 11 Jan 2020 17:47:05 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-01-11-caffe-source-code-analysis_part2/</guid><description>&lt;h2 class="relative group"&gt;layer 整体介绍
 &lt;div id="layer-整体介绍" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#layer-%e6%95%b4%e4%bd%93%e4%bb%8b%e7%bb%8d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;layer是模型计算的基本单元
类似于pytorch或者其他深度学习框架的op
layer中的数据流向为,输入若干个blob，称之为&amp;quot;bottom blob&amp;quot;,然后经过layer的计算，输出若干个blob,称之为&amp;quot;top blob&amp;quot;&lt;/p&gt;</description></item><item><title>caffe 源码学习笔记(1) Blob</title><link>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-01-10-caffe-source-code-analysis-part1/</link><pubDate>Fri, 10 Jan 2020 11:24:23 +0800</pubDate><guid>https://111qqz.com/en/post/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/caffe-notes/2020-01-10-caffe-source-code-analysis-part1/</guid><description>&lt;p&gt;迫于生计，开始看caffe代码。
会侧重于分析inference部分。&lt;/p&gt;</description></item></channel></rss>