TVM 目标描述与代码生成模块 `tvm.target` 完全指南:Target 字符串、TargetKind 与设备检测
编译器深度学习模型优化【免费下载链接】tvmOpen deep learning compiler stack for cpu, gpu and specialized accelerators项目地址https://gitcode.com/gh_mirrors/tvm7/tvm点击查看免费下载导读tvm.target是 TVM 中描述为谁生成代码的核心 Python 模块编译一个模型到 CPU、GPU 或专用加速器之前必须先用它构造一个目标Target对象把目标架构、交叉编译三元组、CPU 特性、外部库等编译期信息封装起来。本篇文章以 docs/reference/api/python/target.rst 所挂载的tvm.target模块为主体完整讲解 Target 字符串语法与全部选项、Target/TargetKind的构造与能力、常用设备辅助构造函数、Target 上下文管理、标签注册、设备自动检测与 GenericFunc 目标分派并结合 python/tvm/target 下的源码与 tests/python/target 中的测试用例给出可复现的实战示例。读完本文你将能够为任意目标设备写出正确、可维护的 TVM Target 配置并理解其底层如何映射到代码生成后端。tvm.target模块是什么tvm.target是 TVM Python 前端中的Target description and codgen module负责目标的描述与代码生成入口。它并非一个简单的字符串常量而是一组与 C 运行时通过 FFI 绑定的对象与工具函数核心包括Target目标设备信息对象可由目标字符串、配置字典或标签创建TargetKind编译目标的种类如llvm、cuda、opencl每种 Kind 维护一份可用选项表VirtualDevice编译期描述数据存放在哪、代码如何编译的表示GenericFunc可按当前目标进行特化分派的通用函数机制一系列便捷构造函数cuda()、rocm()、mali()、arm_cpu()、hexagon()、riscv_cpu()、stm32()、vta()等目标标签tag注册与列表、从物理设备自动检测目标的工具函数。模块的导出与组织方式见 python/tvm/target/init.py它从target.py导出Target、create、TargetKind及各类设备构造函数从virtual_device.py导出VirtualDevice从compilation_config.py导出make_compilation_config从tag.py导出list_tags从generic_func.py导出GenericFunc与三个装饰器并整体引入datatype与codegen子模块。Target 字符串语法与完整选项列表模块的模块级 docstring见 python/tvm/target/init.py给出了 TVM 目标字符串的权威格式target_kind [-optionvalue]...即以目标种类开头后面跟零个或多个以空格分隔的-选项值键值对。TVM 用同一个字符串同时表达后端种类与该后端的详细配置。选项一览表选项含义与取值-devicedevice name设备名称例如mali、arm_cpu、intel_graphics、adreno。-mtripletarget triple目标三元组用于交叉编译例如arm64-linux-android、aarch64-linux-gnu。-mcpucpuname指定当前架构下具体芯片默认根据目标三元组推断并自动检测当前架构例如cortex-a72、cortex-m4。-mattra1,a2,-a3,...覆盖或控制目标具体特性如是否启用 SIMD 运算默认特性集由当前 CPU 决定例如neon、avx512f、-hvx。-mabiabi按指定 ABI 生成代码例如lp64dRISC-V 64 位双精度浮点 ABI、ilp32。-system-lib构建 TVM 系统库模块。系统库是一个全局模块包含程序启动时自我注册的函数可通过tvm.runtime.system_lib获取适用于dlopen等动态加载 API 被禁止的环境只要结果代码被程序链接系统库即可用。需要注意-mattr中的表示启用该特性-表示禁用多个特性用逗号分隔。-mcpu、-mtriple、-mabi等选项最终会传递给 LLVM 后端参与代码生成决策。字典形式配置除了字符串Target构造函数还接受配置字典或 JSON 字符串。字典形式下各字段与字符串选项一一对应详见 python/tvm/target/target.py 的 docstring字典字段类型说明kindstr必填使用的代码生成路径例如llvm或cuda。keysList[str]可选可被分派到的一组策略键。例如使用kindopencl时可设keys[mali, opencl, gpu]。devicestr可选对应实际运行设备的单个键会被追加到keys之后。libsList[str]可选使用的外部库集合例如[cblas, mkl]。system-libbool可选为 True 时构建包含自我注册函数的模块用于禁止dlopen等动态加载的环境。mcpustr可选实际运行的 CPU仅作注解。modelstr可选说明工作负载来源模型的注解。runtimestr可选说明工作负载使用哪个运行时的注解。mtriplestr可选描述目标的 LLVM 三元组例如arm64-linux-android。mattrList[str]可选编译所用的 LLVM 特性例如[avx512f, mmx]。mfloat-abistr可选LLVM 设置取hard或soft表示使用硬件还是软件浮点运算。mabistr可选LLVM 设置按指定 ABI 生成代码例如lp64d。hostUnion[str, Dict]可选目标宿主机host的描述可以递归地采用与 target 相同的形式。此外Target构造函数还支持host位置参数第二个参数其取值形式与 target 相同用于同时指定目标设备 运行该设备驱动的宿主机。字符串与字典的等价示例import tvm # 字符串形式 t1 tvm.target.Target(cuda -archsm_80 -libscublas,cudnn) # 字典形式等价 t2 tvm.target.Target({ kind: cuda, arch: sm_80, libs: [cublas, cudnn], }) # 同时指定 host t3 tvm.target.Target(cuda, hostllvm -mtriplex86_64-linux-gnu)tests/python/target/test_target_target.py中的test_target_string_parse与test_target_string_with_spaces分别验证了cuda -modelunknown -libscublas,cudnn这类字符串解析以及含空格的 target 往返序列化str(target)后再次构造的正确性。TargetKind目标种类与其选项注册表TargetKind是编译目标的种类由tvm._ffi.register_object注册为 TVM Object见 python/tvm/target/target.py。它有两个静态/实例方法TargetKind.options返回当前 kind 可用选项名到类型的字典TargetKind.options_from_name(kind_name)按名称字符串获取某 kind 的选项字典。C 侧在 src/target/target_kind.cc 通过TVM_REGISTER_TARGET_KIND注册了全部内置种类每个种类关联一个 DLPack 设备类型常量种类设备类型说明llvmkDLCPULLVM 通用 CPU 后端最常用ckDLCPU纯 C 代码生成microTVM 等场景cudakDLCUDANVIDIA CUDA 后端nvptxkDLCUDAPTX 汇编后端rocmkDLROCMAMD ROCm 后端openclkDLOpenCLOpenCL 后端metalkDLMetalApple Metal 后端vulkankDLVulkanVulkan 后端webgpukDLWebGPUWebGPU 后端sdaccelkDLOpenCLXilinx SDAccelaocl/aocl_sw_emukDLAOCLIntel FPGA OpenCLhexagonkDLHexagonQualcomm Hexagon DSPstackvmkDLCPU虚拟机栈后端ext_devkDLExtDev外部设备如 VTAhybridkDLCPU混合执行后端compositekDLCPU复合目标testkDLCPU测试用目标Target.list_kinds()会返回当前 TVM 构建中所有可用种类名称的列表tests/python/target/test_target_target.py中的test_target_dispatch等用例会遍历它逐一构造 Target 来验证所有种类都能被正确解析。Target 对象构造、属性与规范化工具三种构造方式按 python/tvm/target/target.pyTarget(target, hostNone)可以从三类输入构造原始目标字符串如cuda、llvm -mtripleaarch64-linux-gnu配置字典如上文的字典字段表目标标签预注册或自定义的标签名见下文目标标签小节。构造时会先经过convert把 str/dict 转成 TVM 内部Map/String表示再由_ffi_api.Target构造底层对象传入非法类型会抛出ValueError(target has to be a string or dictionary.)。若host非空则用Target(target)与Target(host)两个子对象一起构造。常用属性Target提供了一系列属性用于查询目标特性见 python/tvm/target/target.pyarchCUDA 架构字符串如sm_80取自attrs[arch]max_num_threads/max_block_size_x/max_block_size_y/thread_warp_size/max_shared_memory_per_block线程与共享内存限制max_function_args最大函数参数个数vtcm_capacityHexagon VTCM 容量字节0 表示无限制device_name设备名model设备型号默认unknownmcpu/mattrCPU 型号与特性列表libs外部库列表supports_integer_dot_product是否支持整数点积。对 CUDA当sm_version 61时返回 True即 Pascal 之后支持dp4a等指令supports_cooperative_matrix是否支持协作矩阵cooperative matrixl2_cache_size_bytesL2 缓存大小featuresTargetFeatures对象可用target.features.name查询 LLVM 特性支持情况见tests/python/target/test_llvm_features_info.py的test_target_features。这些属性在调度schedule与代码生成时被用来决定线程束大小、共享内存预算、向量宽度等关键参数。规范化canonicalization静态方法Target还提供一组静态方法把各种目标类对象统一成规范形式是编译入口的公共基础设施Target.canon_target(target)把None、既有Target、字符串如cuda -archsm_80或字典如{kind: cuda, arch: sm_80}统一转成TargetTarget.canon_target_and_host(target, target_hostNone)同时规范目标与宿主机若target_host非空会警告其即将弃用并建议改用tvm.target.Target(target, hosttarget_host)Target.canon_multi_target(multi_targets)把一个目标类对象、目标列表/Array 或设备类型到目标的字典遗留的异构目标表示键被忽略转成Target数组Target.canon_multi_target_and_host(target, target_hostNone)多目标 host 的规范化Target.canon_target_map_and_host(target_map, target_hostNone)把目标 → IRModule映射的键规范化并把 host 固化到每个键中Target.target_or_current(target)若传入None则取当前上下文目标Target.current()仍为空则抛ValueError。另外Target.from_device(device)会从物理设备反查出对应 Target见设备自动检测小节。序列化与宿主设置Target.export()导出目标的 JSON 字符串表示Target.with_host(hostNone)返回带指定宿主机的新 Target 对象Target.current(allow_noneTrue)返回当前上下文中的目标配合with使用allow_noneFalse时未设置会抛异常。设备便捷构造函数从辅助函数到完整 Targettvm.target提供了一系列语义化构造函数比手写 Target 字符串更不易出错。这些函数都通过_merge_opts合并用户附加选项后构造Targettvm.target.create()已标记弃用请直接使用Target构造器见 python/tvm/target/target.py。GPU 相关函数生成的 Target说明cuda(modelunknown, archNone, optionsNone)cuda -model... -arch...未指定arch时会警告Try specifying cuda arch by adding archsm_xx to your target.因为架构直接影响 kernel 生成质量rocm(modelunknown, optionsNone)rocm -model...AMD ROCm 目标mali(modelunknown, optionsNone)opencl -devicemali -model...ARM Mali GPU 目标底层走 OpenCLintel_graphics(modelunknown, optionsNone)opencl -deviceintel_graphics -model... -thread_warp_size16Intel 核显OpenCL 后端且线程束大小固定 16bifrost(modelunknown, optionsNone)opencl -devicebifrost -model...Mali Bifrost 架构 GPUadreno(modelunknown, optionsNone)opencl -deviceadreno -model...Qualcomm Adreno GPUCUDA 的arch参数例如sm_61对应 GTX 1080 Ti 等 Pascal 卡cuda()函数在 python/tvm/target/target.py 中实现tests/python/target/test_target_target.py的test_target_string_parse验证了cuda -modelunknown -libscublas,cudnn的解析。CPU 相关arm_cpu(modelunknown, optionsNone)内置了常见开发板/手机型号到完整选项的映射表python/tvm/target/target.py型号展开的选项pixel2-modelsnapdragon835 -mtriplearm64-linux-android -mattrneonmate10/mate10pro/p20/p20pro-modelkirin970 -mtriplearm64-linux-android -mattrneonrasp3b-modelbcm2837 -mtriplearmv7l-linux-gnueabihf -mattrneonrasp4b-modelbcm2711 -mtriplearmv8l-linux-gnueabihf -mattrneon -mcpucortex-a72rasp4b64-modelbcm2711 -mtripleaarch64-linux-gnu -mattrneon -mcpucortex-a72rk3399/ultra96/thunderx对应-mtripleaarch64-linux-gnu及各自-mcpupynq-modelpynq -mtriplearmv7a-linux-eabi -mattrneonbeagleai-modelbeagleai -mtriplearmv7a-linux-gnueabihf -mattrneon,vfp4,thumb2 -mcpucortex-a15stm32mp1-modelstm32mp1 -mtriplearmv7a-linux-gnueabihf -mattrneon,vfp4,thumb2 -mcpucortex-a7最终统一生成llvm -keysarm_cpu,cpu -devicearm_cpu ...形式的目标。rasp(options)已弃用应改调arm_cpu(rasp3b)。riscv_cpu(modelsifive-u54, optionsNone)内置 SiFive 系列配置python/tvm/target/target.pysifive-e31riscv32-unknown-linux-gnu-mabiilp32、sifive-e76同上、sifive-u54riscv64-unknown-linux-gnu-mabilp64d默认、sifive-u74同上。这些 ABI 与 GCC 的-marchrv64gc -mabilp64d惯例对应。stm32(seriesunknown, optionsNone)面向 STM32 全系列 MCUpython/tvm/target/target.pySTM32_SUPPORTED_SERIES覆盖高性能H7xx/F7xx/F4xx/F2xx、主流G0xx/F0xx/F1xx/G4xx/F3xx与低功耗U5xx/L5xx/L4xx/L1xx/L0xx系列映射到c -keysarm_cpu,cpu -devicearm_cpu -mcpucortex-mX形式的 C 代码生成目标。专用设备hexagon(cpu_verv68, **kwargs)Qualcomm Hexagon DSP 目标python/tvm/target/target.py合法 CPU 版本为v65/v66/v67/v67t/v68/v69/v71/v73/v75。关键字参数包括hvxHVX 向量字节数默认 1280 禁用 HVX 代码生成合法值[0, 64, 128]、llvm_options、use_qfloat默认 v68 及以上为 True即启用 HVX QFloat 指令、use_ieee_fp默认 False、num_cores默认 4meta scheduler 需要、vtcm_capacity默认按版本取 0.25MB~8MB。例如生成的 LLVM 目标串形如-mtriplehexagon -mcpuhexagonv68 -mattrhvxv68,hvx-length128bv68 还会默认附加-force-hvx-float以支持自动向量化。注意HVX 浮点支持需要 LLVM 14。micro(modelunknown, optionsNone)microTVM 目标MICRO_SUPPORTED_MODELS覆盖atsamd51、esp32、imxrt10xx、mps2_an521、mps3_an547、nrf52840、nrf5340dk、rp2040、sam3x8e、stm32f746xx、stm32h7xx、stm32l4r5zi、stm32u5xx、zynq_mp_r5等板卡生成c -mcpu... -model...形式目标未知型号直接抛ValueError。vta(modelunknown, optionsNone)VTA 加速器生成ext_dev -devicevta -keysvta,cpu -model...。这些构造函数在 python/tvm/target/init.py 中被集中导出是日常使用最频繁的入口。Target 上下文管理with与Target.current()Target实现了上下文管理器协议python/tvm/target/target.pywith tvm.target.Target(cuda): print(tvm.target.Target.current()) # 进入作用域后即为 cuda 目标进入with块时调用_ffi_api.TargetEnterScope退出时调用TargetExitScope。这一机制让 Relay/Relax 编译、GenericFunc 分派、算子策略选择等在当前目标上下文中自动读取目标信息。tests/python/target/test_target_target.py的test_target_dispatch与test_target_temp_strategy验证了作用域内切换目标时行为一致且可嵌套回退。在编译接口中Target.target_or_current(target)则是显式传入优先否则取当前上下文的便捷入口。设备自动检测从物理设备到 TargetTarget.from_device(device)调用 python/tvm/target/detect_target.py 中的detect_target_from_device把运行时的物理设备对象反查为 Target。支持的设备类型为[cuda, metal, rocm, vulkan, opencl, cpu]SUPPORT_DEVICE字典python/tvm/target/detect_target.py。各设备的检测策略CUDA_detect_cuda读取设备的max_shared_memory_per_block、max_threads_per_block、warp_size并把compute_version如8.0转换为arch: sm_80Metalmax_shared_memory_per_block固定 32768其余从设备读取ROCmmtriple: amdgcn-amd-amdhsa-hcc其余从设备读取OpenCL从设备读取三个容量字段Vulkan通过device_api.vulkan.get_target_property查询supports_float16、supports_int8、supports_int16、supports_int64、supports_8bit_buffer、supports_16bit_buffer、supports_storage_buffer_storage_class等能力并写入 Target 属性CPU通过tvm.codegen.llvm.GetDefaultTargetTriple与tvm.codegen.llvm.GetHostCPUName获取宿主机的默认三元组与 CPU 名。若设备类型不支持自动检测或设备不存在驱动未装、TVM 未编译对应驱动会分别抛出带明确提示的ValueError。import tvm # 假设本机有可用的 CUDA 设备 # target tvm.target.Target.from_device(tvm.device(cuda, 0)) # 或在已持有 device 对象时直接反查目标标签Target Tag复用预定义目标标签机制让用户用简短名称引用预定义目标python/tvm/target/tag.pyimport tvm from tvm.target.tag import register_tag, list_tags # 注册自定义标签 register_tag(nvidia/gtx1080ti, config{ kind: cuda, arch: sm_61, }) # 查看全部标签 tags list_tags() # 返回 {名称: Target} target tvm.target.Target(nvidia/gtx1080ti)register_tag(name, config, overrideFalse)把名称映射到配置字典overrideFalse时重复注册同名标签会抛异常。模块加载时已预注册nvidia/gtx1080ticuda sm_61并在加载期调用list_tags()校验所有标签的正确性。C 侧实现见 src/target/tag.cc 的target.TargetTagAddTag与target.TargetTagListTags标签注册表刻意维护在 C 侧以支持纯 C 使用场景Python API 仅用于快速原型。list_tags()在 runtime-only 构建下返回None。GenericFunc按目标分派的通用函数GenericFunc是 TVM 的目标感知函数机制同一个函数名可根据当前目标上下文分派到不同实现python/tvm/target/generic_func.py。tvm.target.generic_func装饰器import tvm tvm.target.generic_func def my_func(a): return a 1 my_func.register(cuda) def my_func_cuda(a): return a 2 print(my_func(2)) # 3默认实现 with tvm.target.cuda(): print(my_func(2)) # 4分派到 cuda 特化其分派逻辑为取Target.current()若为None则调用默认函数否则按target.keys的顺序在分派字典中查找匹配键命中即调用特化实现未命中回退默认实现。register(key, funcNone, overrideFalse)支持传入字符串或字符串列表作为分派键overrideFalse时重复注册抛ValueError。装饰后的函数还暴露get_packed_func()返回当前目标下的分派函数。tvm.target.override_native_generic_func用于覆盖 C 侧已注册的 GenericFunc 默认实现tvm.target.override_native_generic_func(my_func) def my_func(a): return a 1 my_func.register(cuda) def my_func_cuda(a): return a 2C 侧通过generic_func.cc的注册表保存全局 GenericFuncPython 侧get_native_generic_func(name)获取不存在则新建然后set_default(fdefault, allow_overrideTrue)覆盖默认实现register(key, func, overrideTrue)注册分派特化。注意调用 generic_func 时不支持关键字参数会抛RuntimeError。这一机制是tvm.target中算子/内建函数按设备特化的关键基础设施例如tir内建函数在不同后端上有不同实现时会通过 GenericFunc 注册到cuda、opencl、vulkan等键下。关联对象VirtualDevice 与 CompilationConfigVirtualDevicepython/tvm/target/virtual_device.py是编译期的数据放置 编译方式表示from tvm.target import VirtualDevice import tvm # device 为空时使用无约束设备device type 与 id 均为 -1 vd VirtualDevice(devicetvm.device(cuda, 0), targetNone, memory_scopeglobal) print(vd.device_type)它由VirtualDevice_ForDeviceTargetAndMemoryScope构造描述数据在运行时存放在哪个设备、用哪个 target 编译其计算、使用什么内存作用域memory_scope如global、shared。这在异构编译与内存规划场景中用于把算子与设备/存储绑定。make_compilation_config(ctxt, target, target_hostNone)python/tvm/target/compilation_config.py则通过Target.canon_multi_target_and_host规范化目标后构造CompilationConfig主要用于单元测试模拟标准编译接口的表示约定。综合实战为真实模型配置目标并编译下面组合前述知识演示一个完整的 Relay 编译流程以tests/python/target/test_target_target.py的用例风格为参考import tvm from tvm import relay # 1. 构造目标CUDA 指定架构 外部库 target tvm.target.Target(cuda -archsm_80 -libscublas,cudnn) print(target.kind.name) # cuda print(target.arch) # sm_80 print(target.libs) # [cublas, cudnn] # 2. 用便捷函数构造 ARM 交叉编译目标 arm_target tvm.target.arm_cpu(rasp4b) print(arm_target) # llvm -keysarm_cpu,cpu -devicearm_cpu -modelbcm2711 ... # 3. 编译时使用 Target显式传入省略时可用 with 上下文 mod, params relay.testing.synthetic.get_workload() with tvm.transform.PassContext(opt_level3): lib relay.build(mod, targettarget, paramsparams) # 4. 从物理设备自动反查目标需设备可用 # detected tvm.target.Target.from_device(tvm.device(cuda, 0)) # 5. 运行时按目标分派 generic func with tvm.target.Target(cuda): lib.export_library(model.so)要点回顾始终显式指定关键选项CUDA 务必给archsm_xx否则会收到警告且生成的 kernel 可能不是最优交叉编译三件套-mtriple、-mcpu、-mattr决定生成代码的指令集-mabi/-mfloat-abi决定 ABI 兼容性优先用便捷构造函数arm_cpu(rasp4b)、riscv_cpu(sifive-u54)、stm32(stm32F4xx)等自带经过验证的默认配置比手写字符串更可靠host 与 target 分离异构场景用Target(target, host...)明确谁在算、谁在管。测试与验证线索本模块的行为在 tests/python/target 下有系统性覆盖可作为进一步研究入口test_target_target.py字符串解析、含空格目标往返、LLVM-cl-opt与-jit选项、list_kinds()、目标分派与临时策略、create弃用警告等test_llvm_features_info.pytarget.features查询 LLVM 特性支持含-mcpudummy这类非法 CPU 的错误路径test_arm_target.pyARM 目标在with tvm.target.Target(arm_target)上下文中的行为test_target_parser_mprofile.pyCortex-M 系列-mcpucortex-m55/m7/m3的解析与-mattrnomve等特性覆盖。结语tvm.target是 TVM 编译栈的目标总入口从target_kind [-optionvalue]...的字符串语法、Target/TargetKind对象与属性到覆盖 CUDA/ROCm/OpenCL/ARM/RISC-V/Hexagon/STM32/microTVM 的便捷构造函数再到上下文管理、标签复用、设备自动检测与 GenericFunc 目标分派它把为谁生成代码这一编译问题完整地封装为可组合、可验证的 Python API。掌握本文所述的字符串与字典两种配置方式、常用选项语义及规范化工具你就能在 TVM 中为任何目标设备写出正确且高效的编译配置。赞分享编译器深度学习模型优化【免费下载链接】tvmOpen deep learning compiler stack for cpu, gpu and specialized accelerators项目地址https://gitcode.com/gh_mirrors/tvm7/tvm点击查看免费下载相关推荐TVM Target API 完全指南tvm.target 与 Target Tag 的构造、配置与源码解析TVM Target API 完全指南tvm.target 与 Target Tag 的构造、配置与源码解析 导读 在 Apache TVMOpen Mac模型编译深度学习推理引擎TVM 设备与目标交互机制深度解析DeviceAPI、Target 与代码生成器TVM 设备与目标交互机制深度解析DeviceAPI、Target 与代码生成器 导读 本文以 TVM 运行时架构文档 docs/arch/device_t编译器深度学习模型优化TVM Device/Target 交互机制全解析DeviceAPI、Target 与代码生成器实现指南TVM Device/Target 交互机制全解析DeviceAPI、Target 与代码生成器实现指南 导读 本文以 TVM 官方架构文档 docs/arc模型编译深度学习推理引擎创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Windows电脑玩转LDAC:用Alternative A2DP Driver解锁蓝牙耳机高音质

Windows电脑玩转LDAC:用Alternative A2DP Driver解锁蓝牙耳机高音质

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 9:00:10 阅读更多 →
企业AI转型:从工具学习到产业应用型人才成长路径

企业AI转型:从工具学习到产业应用型人才成长路径

2026年,企业家真正要解决的,已经不是“要不要学AI”,而是“如何把AI真正用进公司”。许多老板学了半年AI,公司还是没有任何变化。这背后的原因在于,企业缺乏将AI技术与实际业务场景相结合的能力。数据揭示问题一项来自…

2026/9/24 9:00:10 阅读更多 →
all-in-rag 菜谱数据实战:空气炸锅甜辣烤全翅的完整做法与 RAG 知识库接入解析

all-in-rag 菜谱数据实战:空气炸锅甜辣烤全翅的完整做法与 RAG 知识库接入解析

教程人工智能大模型RAG 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/ 项目地址: https://gitcode.com/datawhalechina/all-in-ra…

2026/9/24 9:00:10 阅读更多 →

最新新闻

Claude Code命令速查大全:TaoToken统一Key接入CLI斜杠命令与快捷键配置

Claude Code命令速查大全:TaoToken统一Key接入CLI斜杠命令与快捷键配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 13:16:43 阅读更多 →
为什么AI算力集群这么烧钱?Flex:ai解决大模型与小模型混部场景的GPU浪费难题

为什么AI算力集群这么烧钱?Flex:ai解决大模型与小模型混部场景的GPU浪费难题

为什么AI算力集群这么烧钱?Flex:ai解决大模型与小模型混部场景的GPU浪费难题 【免费下载链接】flexai Flex:ai是一个面向AI容器场景的开源项目,其核心能力包含两大部分,分别是XPU虚拟化和多级智能调度。其中XPU虚拟化分为本地XPU虚拟化和跨节…

2026/9/25 13:16:43 阅读更多 →
@voltagent/mcp-server 全解析:用 Model Context Protocol 暴露 VoltAgent Agent、工作流与工具

@voltagent/mcp-server 全解析:用 Model Context Protocol 暴露 VoltAgent Agent、工作流与工具

人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆 【免费下载链接】voltagent AI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework 项目地址: https://gitcode.com/gh_mirrors/vo/voltagent 点击查看 免费下载 导…

2026/9/25 13:16:43 阅读更多 →
养殖龙虾(OpenClaw)必配的虾粮与工具:TaoToken 统一 Key 接入 Gateway 配置清单

养殖龙虾(OpenClaw)必配的虾粮与工具:TaoToken 统一 Key 接入 Gateway 配置清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 13:16:43 阅读更多 →
Tekton Pipeline Cluster Resolver 实战指南:解析集群内 Task、Pipeline 与 StepAction 并理解其缓存与安全边界

Tekton Pipeline Cluster Resolver 实战指南:解析集群内 Task、Pipeline 与 StepAction 并理解其缓存与安全边界

云原生CI/CDDevOps后端 【免费下载链接】pipeline A cloud-native Pipeline resource. 项目地址: https://gitcode.com/gh_mirrors/pipelin/pipeline 点击查看 免费下载 本文聚焦 Tekton Pipeline(pipelin/pipeline 仓库)的 Cluster Resolve…

2026/9/25 13:16:42 阅读更多 →
PaddleSeg PanopticSeg 全景分割工具箱快速上手:预训练模型推理、训练与评估实战指南

PaddleSeg PanopticSeg 全景分割工具箱快速上手:预训练模型推理、训练与评估实战指南

人工智能计算机视觉预训练 【免费下载链接】PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting,…

2026/9/25 13:15:42 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →