<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[骑者，且赶路]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/QSTARTmachine</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; QSTARTmachine]]></copyright><item><title><![CDATA[记录一次复杂的 ONNX 到 TensorRT 动态 Shape 转换排错过程]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/156763472</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/156763472</guid><author>QSTARTmachine</author><pubDate>Fri, 09 Jan 2026 14:43:57 +0800</pubDate><description><![CDATA[其中 then_branch 输出的是固定 size 的 tensor，但 else_branch 输出的是 dynamic size 的 tensor。可能可行的办法是预设一个较大的 max_len，然后在两个 branch 的输出都进行 padding，再使用 mask 控制参与计算的部分，但这种方案无疑过于复杂。因此，这次尝试暂时告一段落。替换后的结构图如下。TensorRT 可以处理动态形状，但有一个前提：所有用来决定张量形状的计算，必须只依赖于输入的【形状】，而不能依赖于输入的【内容/值】。]]></description><category></category></item><item><title><![CDATA[Centos安装TensorRT指南]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/155563117</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/155563117</guid><author>QSTARTmachine</author><pubDate>Thu, 04 Dec 2025 11:21:31 +0800</pubDate><description><![CDATA[至此，您应该已经在 CentOS 8 系统上成功安装了 TensorRT 的 C++ 和 Python 环境。通过遵循本指南的排错步骤，可以解决大部分安装过程中的依赖和路径问题。：表示 TensorRT 的 Python 绑定包尚未安装，或者安装到了系统路径，而你当前使用的是虚拟环境。最后，我们需要为 Python 环境安装 TensorRT 绑定，以便在 Python 代码中调用它。包，将 TensorRT 的软件源添加到您的系统中。的二进制工具包没有被安装，或者其路径未在系统的。]]></description><category></category></item><item><title><![CDATA[slice共享底层引起的“量子纠缠”]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/149688596</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/149688596</guid><author>QSTARTmachine</author><pubDate>Sun, 27 Jul 2025 12:47:20 +0800</pubDate><description><![CDATA[本文描述了一个在处理语音大语言模型输入时遇到的诡异问题：两个不同对象之间出现&quot;量子纠缠&quot;现象，即修改对象A导致对象B也被改变。问题出在合并切片时直接引用了原始数据，导致底层数组共享。作者通过分析发现，当content添加元素时意外修改了fixMask的内容，从而触发了一致性检查的panic。最终解决方案是通过append([]int(nil), x...)的方式创建新切片，避免共享底层数组。文章详细记录了问题的发现、分析和解决过程，展示了slice底层共享可能带来的潜在问题及解决方法。]]></description><category></category></item><item><title><![CDATA[Triton Inference Server 框架实践]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/146424801</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/146424801</guid><author>QSTARTmachine</author><pubDate>Fri, 21 Mar 2025 16:57:31 +0800</pubDate><description><![CDATA[该模块是embedding模块，用于将文本表示成浮点数向量，输入为List[str]，输出为。服务部署了两种模型，通过输入字段决定使用哪个模型推理。目前线上版本使用 FastAPI 封装，提供 HTTP 接口服务。由于时间紧迫，且服务协议不能改变，还需要对模型输出进行后处理，而我对torch转onnx模型不够熟练，因此先直接使用，后续再研究如何转tensorrt或onnx进行模型加速。TritonServer 非常适合用于提升线上服务质量，其。]]></description><category></category></item><item><title><![CDATA[go项目中比较好的实践方案]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/143976488</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/143976488</guid><author>QSTARTmachine</author><pubDate>Fri, 22 Nov 2024 16:08:16 +0800</pubDate><description><![CDATA[工作两年来，我并未遇到太大的挑战，也没有特别值得夸耀的项目。尽管如此，在日常的杂项工作中，我积累了不少心得，许多实践方法也在思考中逐渐得到优化。因此，我在这里记录下这些心得。]]></description><category></category></item><item><title><![CDATA[解决fcntl偶发的加锁失败问题]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140819097</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140819097</guid><author>QSTARTmachine</author><pubDate>Sat, 03 Aug 2024 09:15:00 +0800</pubDate><description><![CDATA[在使用fcntl加锁时，必须考虑获取句柄的时间顺序是否会产生非预期的结果，虽然fcntl能够建立后续操作的保护区间，但是获取句柄的时间顺序是无法保证的，因此使用fcntl加锁的句柄一定不能是操作目标，而应该引入额外的文件。]]></description><category></category></item><item><title><![CDATA[如何使用cgo封装推理模型]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140856751</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140856751</guid><author>QSTARTmachine</author><pubDate>Fri, 02 Aug 2024 08:00:00 +0800</pubDate><description><![CDATA[当调用C语言函数时，Go语言会将当前协程的栈空间和调用栈保存起来，并创建一个新的C语言栈空间和调用栈。Go 是强类型语言，所以 cgo 中传递的参数类型必须与声明的类型完全一致，而且传递前必须用”C” 中的转化函数转换成对应的 C 类型，不能直接传入 Go 中类型的变量。在 Go 语言中方法是依附于类型存在的，不同 Go 包中引入的虚拟的 C 包的类型却是不同的（等类似的虚拟 C 包的类型，其它的 Go 包是无法直接使用这些类型的，除非这个 Go 包同时也提供了。类型，在外部是无法直接获取这个类型的。]]></description><category></category></item><item><title><![CDATA[带有omitempty json tag的结构体序列化]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140723146</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140723146</guid><author>QSTARTmachine</author><pubDate>Fri, 26 Jul 2024 19:19:56 +0800</pubDate><description><![CDATA[json tag的，因此我们在序列化结构体时，如果某个字段的值是零值，则会导致序列化后的字符串不存在这个字段，而这个时候如果下游服务对反序列化要求比较严格，则会出现字段缺失的问题。不知道大家在使用go实现rpc服务的时候有没有这样的困惑，因为pb文件生成的桩代码中，是自动附带。可以看到符合预期，所有的字段都序列化出来了。为空时，序列化后的字符串不会含有字段。json tag，导致当。]]></description><category></category></item><item><title><![CDATA[fastapi 如何控制并发——其三]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140711952</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140711952</guid><author>QSTARTmachine</author><pubDate>Fri, 26 Jul 2024 11:53:25 +0800</pubDate><description><![CDATA[随后我们改用多进程的方式去测试，在客户端并发数为4，服务端进程数为8的情况下，平均耗时也有347ms，并且成功率只有22%，这里的347s存在水分，很多失败的请求只有1～2ms，存在摊还的情况。那可能真的是在并发数上来的情况下确实是耗时增大了，我们猜测是并发多了后，CPU成为了瓶颈，我们在使用多进程方案时，观察CPU利用率，发现确实已经占满了。上面我们使用的是多线程编程，正如我们之前所说的，对于计算密集型服务，python的多进程就是个笑话，这是由于。因此我们有必要测试在多核机器上，多线程方案的表现。]]></description><category></category></item><item><title><![CDATA[fastapi 如何控制并发——其二]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140500363</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/140500363</guid><author>QSTARTmachine</author><pubDate>Wed, 17 Jul 2024 17:11:11 +0800</pubDate><description><![CDATA[是基于 ASGI 协议的服务框架，因此在接收请求时，不必等待worker 空闲，默认worker能够异步处理多个请求。我们通过非阻塞的方式获取线程锁，然后判断是否能够拿到锁，如果不能则立刻返回503错误。而且如果模型可以支持异步流式，我们甚至可以控制worker的并发度。gunicorn` 是用于处理同步请求的，使用的是 WSGI 标准，例如 Flask，Django等，两种协议之间差异参考。，后续我又接到了模型服务化的需求，简单搭个demo服务支持业务验证和对比实验，后续我觉得使用。]]></description><category></category></item><item><title><![CDATA[fastapi 如何控制并发——其一]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/139246422</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/139246422</guid><author>QSTARTmachine</author><pubDate>Mon, 27 May 2024 19:57:30 +0800</pubDate><description><![CDATA[先说结论，单独靠这里的业务场景是：单机只启动一个进程，也就是，同时只能只处理一个请求，其他的请求全部拒绝，而不进行排队。我们使用了fastapi。]]></description><category></category></item><item><title><![CDATA[更符合gopher的条件变量]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/135577634</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/135577634</guid><author>QSTARTmachine</author><pubDate>Mon, 15 Jan 2024 07:30:00 +0800</pubDate><description><![CDATA[在 go 中我们不必仿照 c++ 使用基于互斥量实现的条件变量，我们可以选择更加符合 go 哲学的方式，即通过通信来共享内存，尤其是在实现广播操作时。]]></description><category></category></item><item><title><![CDATA[Context源码分析——链路控制篇]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/132545493</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/132545493</guid><author>QSTARTmachine</author><pubDate>Mon, 28 Aug 2023 19:18:57 +0800</pubDate><description><![CDATA[本文将对Golang中的context.go源码进行深入剖析，从实际项目应用到整体设计和源码细节，力求让读者对于Context有更加清晰全面的认识。]]></description><category></category></item><item><title><![CDATA[golang的HTTP流式客户端实现方法与对比]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/131993746</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/131993746</guid><author>QSTARTmachine</author><pubDate>Sat, 29 Jul 2023 13:05:44 +0800</pubDate><description><![CDATA[介绍了几种Go的HTTP流式客户端的实现方式以及优缺点对比]]></description><category></category></item><item><title><![CDATA[看似合理的io.Reader 接口]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/131729923</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/131729923</guid><author>QSTARTmachine</author><pubDate>Fri, 14 Jul 2023 18:54:42 +0800</pubDate><description><![CDATA[中初始化长度的 512 相关，后面使用 171 个相同的汉字组成的字符串，作为输入，字节总长度为 513。的字节切片，相当于实现流式的效果。的长度只有 2 ，因此一个 3 字节的汉字被截断成乱码了。的实现并不长，并且会在一开始初始化一个长度为 512 的字节切片。方法是符合预期的，但是，当我使用非流式的方法，也就是。并且返回的长度为 512，从日志可以看出来，至此，我们就解决了这个看似合理的。在项目中，需要实现了一个流式的。来存储被截断的字符，并且在。个字节，这么看来，确实是。，并将被截断的剩余字节放入。]]></description><category></category></item><item><title><![CDATA[服务压测的心路历程——解决数据竞争与空闲连接问题]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/131342930</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/131342930</guid><author>QSTARTmachine</author><pubDate>Thu, 22 Jun 2023 18:00:45 +0800</pubDate><description><![CDATA[记录一次服务压测过程中解决数据竞争和连接数过多的心路历程。]]></description><category></category></item><item><title><![CDATA[流式输出场景下的字符串替换——一次颇具挑战性的需求]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/131272491</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/131272491</guid><author>QSTARTmachine</author><pubDate>Sun, 18 Jun 2023 17:48:24 +0800</pubDate><description><![CDATA[在这篇文章里，分析了流式输出场景下字符串替换的难题。分享了基于字符维护和字符串维护的两种巧妙方法，经过对比和分析，揭示了各自的优缺点。同时，考虑到多字节字符截断问题，我们引入了另一个缓冲队列以增强解决方案的实用性。]]></description><category></category></item><item><title><![CDATA[一次模块优化——基于Go chan的流水线模式]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/129337328</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/129337328</guid><author>QSTARTmachine</author><pubDate>Sat, 04 Mar 2023 18:01:11 +0800</pubDate><description><![CDATA[一次模块优化——基于Go chan的流水线模式]]></description><category></category></item><item><title><![CDATA[练习时长半年的Git命令小结]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/129220580</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/129220580</guid><author>QSTARTmachine</author><pubDate>Sat, 25 Feb 2023 21:12:13 +0800</pubDate><description><![CDATA[就两方面来简单说一下常用的Git命令吧，一是正常的开发流程（不出意外）、二是错误处理（出了意外怎么办）。]]></description><category></category></item><item><title><![CDATA[接口与结构体指针之间的转换引发的一次思考]]></title><link>https://blog.youkuaiyun.com/QSTARTmachine/article/details/129212482</link><guid>https://blog.youkuaiyun.com/QSTARTmachine/article/details/129212482</guid><author>QSTARTmachine</author><pubDate>Sat, 25 Feb 2023 10:54:49 +0800</pubDate><description><![CDATA[接口与结构体指针之间的转换引发的一次思考]]></description><category></category></item></channel></rss>