尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

CPU环境下的神经符号AI部署实践:从模型推理到符号系统集成

CPU环境下的神经符号AI部署实践:从模型推理到符号系统集成 在实际 AI 和系统开发领域我们经常面临一个选择是使用 GPU 来加速计算还是依赖 CPU 来完成推理任务。随着模型轻量化、边缘计算和特定优化技术的发展CPU 在 AI 推理尤其是神经符号 AI 这类结合了神经网络与符号逻辑的混合智能任务中正扮演着越来越重要的角色。神经符号 AI 旨在融合神经网络的感知能力与符号系统的推理能力其计算模式往往并非纯粹的密集矩阵运算而是包含了大量的逻辑判断、规则匹配和符号操作这使得 CPU 的多核通用计算能力有时比 GPU 的并行计算能力更具优势。本文旨在为开发者提供一个从零开始的实践指南探讨如何在 CPU 环境下高效部署和运行一个典型的神经符号 AI 模型。我们将以一个小型知识推理任务为例使用 Python 和 PyTorch 框架结合一个简单的符号推理引擎构建一个混合系统。读者将学习到如何准备 CPU 环境、优化模型推理、处理 CPU 特有的性能瓶颈并最终验证整个系统的运行效果。无论你是希望在没有 GPU 的服务器上部署 AI 服务还是想深入理解 CPU 在混合智能计算中的潜力这篇文章都将提供一条清晰的实践路径。1. 理解神经符号 AI 与 CPU 计算的优势神经符号 AI 不是单一的技术而是一种架构思想。它试图解决传统深度学习模型“黑箱”、缺乏可解释性、难以进行逻辑推理和知识更新的问题。典型的神经符号系统可能包含一个神经网络模块用于处理图像、文本等非结构化数据感知以及一个符号推理模块用于基于规则或知识库进行逻辑推导认知。这两个模块需要紧密协作频繁交换数据。1.1 为什么 CPU 在神经符号 AI 中可能更合适GPU 的核心优势在于其数千个计算核心擅长处理高度并行、计算密集型的任务如大型矩阵乘法卷积、全连接层。然而这种优势是有场景限制的计算模式不匹配符号推理、逻辑规则遍历、图搜索等操作通常是串行或分支密集型的并行度不高。GPU 的 SIMT单指令多线程架构在处理大量条件分支时效率会急剧下降。数据交换开销在神经-符号混合系统中数据需要在神经网络的张量格式和符号系统的结构化格式如列表、字典、图节点之间频繁转换。这些操作在 CPU 上执行往往更高效如果频繁在 GPU 和 CPU 之间传输数据PCIe 带宽会成为瓶颈。内存访问模式符号操作经常涉及对复杂数据结构如知识图谱的随机访问这对 GPU 的显存带宽和延迟是不友好的。CPU 的大容量缓存和更灵活的内存控制器更适合此类任务。部署成本与普适性CPU 是几乎所有计算设备的标配。在边缘设备、物联网终端或没有高端 GPU 的服务器上基于 CPU 的解决方案是唯一可行的选择。因此一个设计良好的神经符号 AI 系统其符号推理部分通常在 CPU 上运行而神经网络部分则根据模型大小和实时性要求可以选择在 CPU 或 GPU 上运行。对于轻量级模型或经过优化的模型全程在 CPU 上运行以简化架构是完全可行的。1.2 核心概念感知、符号化与推理为了构建我们的示例需要明确几个关键概念感知模块通常是一个神经网络如 CNN、Transformer负责从原始数据如图片、句子中提取特征或生成初步的符号表示。例如一个图像分类网络输出“猫”、“狗”等标签。符号化将感知模块的输出转化为符号推理引擎可以理解的离散符号。例如将神经网络输出的概率向量通过阈值判断转化为Is(animal, cat)这样的谓词逻辑。符号推理引擎基于一组预定义的规则If...Then...或一个知识库对输入的符号进行逻辑推导得出新的结论或执行动作。例如规则If Is(animal, cat) Then MakeSound(meow)。CPU 优化推理指使用量化、算子融合、多线程并行、利用 CPU 特定指令集如 AVX-512等技术使神经网络模型在 CPU 上也能达到可接受的推理速度。2. 环境准备与项目初始化我们的目标是构建一个简单的视觉问答VQA系统原型系统看到一张图片包含猫和沙发能回答“猫在沙发上吗”这类问题。神经网络负责识别物体符号系统负责理解空间关系并回答问题。2.1 开发环境与工具链选择我们选择 Python 作为主要语言因为它拥有最丰富的 AI 和逻辑编程库生态。操作系统Ubuntu 20.04/22.04 LTS 或 Windows 10/11 with WSL2。Linux 环境在服务器部署和性能调优上更常见。Python 版本3.8 或 3.9这是多数 AI 框架的稳定支持版本。核心库PyTorch用于构建和运行神经网络。选择 CPU 版本。TorchVision提供预训练的视觉模型和数据集工具。OpenCV或PIL用于图像预处理。SymPy或自定义逻辑类作为轻量级符号推理引擎的演示。对于复杂项目可考虑pyDatalog或kanren。NumPy数值计算基础。2.2 创建项目并安装依赖首先创建一个干净的项目目录并使用venv或conda管理环境。# 创建项目目录 mkdir neuro_symbolic_cpu_demo cd neuro_symbolic_cpu_demo # 创建虚拟环境 (Linux/macOS) python3 -m venv venv source venv/bin/activate # 创建虚拟环境 (Windows) # python -m venv venv # venv\Scripts\activate # 安装核心依赖 # 注意使用PyTorch官方命令获取适合你系统和Python版本的CPU版本 # 以下以Linux和Python 3.9为例 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu pip install opencv-python pillow numpy sympy # 创建必要的项目文件 touch main.py neural_module.py symbolic_module.py utils.py requirements.txt将依赖项写入requirements.txt以便复现环境torch2.0.1 torchvision0.15.2 opencv-python4.8.1 Pillow10.0.0 numpy1.24.3 sympy1.122.3 验证 CPU 和 PyTorch 环境创建一个简单的验证脚本check_env.pyimport torch import sys print(fPython version: {sys.version}) print(fPyTorch version: {torch.__version__}) print(fCUDA available: {torch.cuda.is_available()}) # 应为 False print(fCPU device: {torch.device(cpu)}) print(fNumber of CPU threads: {torch.get_num_threads()}) # 设置CPU并行线程数通常设置为物理核心数 torch.set_num_threads(4) print(fSet CPU threads to: {torch.get_num_threads()})运行它确认输出中 CUDA 不可用并且 PyTorch 正确识别了 CPU。这确保了后续所有计算都发生在 CPU 上。3. 实现神经感知模块感知模块使用一个轻量级的预训练图像分类模型如 MobileNetV2来识别图片中的物体。我们不会训练新模型而是专注于如何高效地使用和集成它。3.1 构建图像识别类在neural_module.py中我们创建一个类来封装模型加载、图像预处理和推理。import torch import torchvision.transforms as transforms from torchvision import models import cv2 from PIL import Image class NeuralPerception: def __init__(self, model_namemobilenet_v2, top_k3): 初始化神经感知模块。 Args: model_name: 使用的预训练模型名称。 top_k: 返回置信度最高的前K个类别。 self.device torch.device(cpu) self.top_k top_k # 加载预训练模型并设置为评估模式 if model_name mobilenet_v2: self.model models.mobilenet_v2(weightsmodels.MobileNet_V2_Weights.IMAGENET1K_V1) else: raise ValueError(fModel {model_name} not supported.) self.model.to(self.device) self.model.eval() # 关闭dropout和batch norm的training模式 # 定义与模型训练时相同的图像预处理流程 self.preprocess transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean[0.485, 0.456, 0.406], std[0.485, 0.224, 0.225]), ]) # 加载ImageNet类别标签 # 这里使用TorchVision自带的标签实际项目中可能需要自定义 self.labels models.MobileNet_V2_Weights.IMAGENET1K_V1.meta[categories] def predict(self, image_path): 对输入图片进行预测。 Args: image_path: 图片文件路径。 Returns: list: 包含(top_k类别, 置信度)的列表。 # 读取和预处理图像 image Image.open(image_path).convert(RGB) input_tensor self.preprocess(image) # 增加一个batch维度: (C, H, W) - (1, C, H, W) input_batch input_tensor.unsqueeze(0).to(self.device) # 禁用梯度计算加速推理 with torch.no_grad(): output self.model(input_batch) # 应用softmax获取概率 probabilities torch.nn.functional.softmax(output[0], dim0) # 获取top_k结果 top_probs, top_indices torch.topk(probabilities, self.top_k) results [] for i in range(self.top_k): label self.labels[top_indices[i].item()] prob top_probs[i].item() results.append((label, prob)) return results def predict_to_symbols(self, image_path, confidence_threshold0.5): 将预测结果转化为符号。 例如将 tabby cat 转化为 cat并过滤低置信度结果。 Args: image_path: 图片文件路径。 confidence_threshold: 置信度阈值。 Returns: list: 符号列表如 [cat, sofa]。 raw_results self.predict(image_path) symbols [] # 一个简单的映射和过滤规则 category_map { tabby: cat, tiger cat: cat, Egyptian cat: cat, sofa: sofa, desk: desk, chair: chair, # 可根据需要扩展 } for label, prob in raw_results: if prob confidence_threshold: continue # 查找映射如果找不到则使用原始标签的第一个词粗略方法 base_label None for key, value in category_map.items(): if key in label: base_label value break if not base_label: base_label label.split(,)[0].split( )[0].lower() if base_label not in symbols: # 去重 symbols.append(base_label) return symbols关键解释model.eval()至关重要。它将模型设置为推理模式关闭了 Dropout 和 BatchNorm 层的训练时行为保证输出确定性。torch.no_grad()在推理时禁用自动梯度计算能显著减少内存消耗并提升速度。to(self.device)即使设备是 CPU显式地将张量移动到设备上也是一个好习惯保证代码一致性。符号化predict_to_symbols方法展示了如何将神经网络输出的连续概率值如“0.8 概率是 tabby cat”转化为离散符号cat。这里使用了简单的关键词映射和阈值过滤。在实际复杂系统中这可能是一个更精细的分类器或实体链接过程。3.2 CPU 推理性能的初步考量在 CPU 上运行 MobileNetV2 这样的模型是可行的但速度可能不如 GPU。我们可以通过以下方式初步优化设置线程数PyTorch 可以利用多核 CPU。在程序初始化时调用torch.set_num_threads()来设置。批处理即使一次只处理一张图保持代码支持批处理unsqueeze(0)为未来优化留有余地。模型量化对于部署可以考虑使用 PyTorch 的动态量化或静态量化来减小模型大小、提升 CPU 推理速度。这属于进阶优化。4. 实现符号推理模块符号模块接收来自神经模块的符号列表如[cat, sofa]并基于一个简单的知识库或规则集进行推理。我们用一个简单的基于逻辑的类来模拟。4.1 构建基于规则的知识库在symbolic_module.py中我们实现一个简单的推理引擎。class SymbolicReasoner: def __init__(self): # 定义一个简单的知识库规则列表 # 每条规则是一个字典包含条件conditions和结论conclusion self.rules [ { conditions: [(object, cat), (object, sofa), (relation, on, cat, sofa)], conclusion: (answer, yes, The cat is on the sofa.) }, { conditions: [(object, cat), (object, floor)], conclusion: (answer, no, The cat is not on the sofa, it might be on the floor.) }, # 可以添加更多规则例如关于狗、椅子等 ] # 定义空间关系检测的启发式规则在实际系统中这可能由另一个神经网络或几何分析得出 # 这里我们假设有一个虚拟的“空间关系提取器”它根据一些简单逻辑判断。 self.spatial_heuristics { (cat, sofa): on, # 假设我们的图片中猫在沙发上 (cat, floor): near, } def extract_relations(self, objects): 根据对象列表和启发式规则提取对象间的关系。 这是一个高度简化的示例。 Args: objects: 符号列表如 [cat, sofa]。 Returns: list: 关系三元组列表如 [(relation, on, cat, sofa)]。 relations [] for i, obj1 in enumerate(objects): for j, obj2 in enumerate(objects): if i j: continue key (obj1, obj2) reverse_key (obj2, obj1) if key in self.spatial_heuristics: rel self.spatial_heuristics[key] relations.append((relation, rel, obj1, obj2)) elif reverse_key in self.spatial_heuristics: rel self.spatial_heuristics[reverse_key] relations.append((relation, rel, obj2, obj1)) return relations def reason(self, objects, query): 基于检测到的对象和查询进行推理。 Args: objects: 神经模块识别出的对象符号列表。 query: 查询字符串如 Is the cat on the sofa?。 Returns: dict: 推理结果包含答案和解释。 # 1. 提取对象间关系模拟 relations self.extract_relations(objects) # 构建当前场景的事实集合 facts [] for obj in objects: facts.append((object, obj)) facts.extend(relations) # 2. 解析查询简化版仅处理特定模式 # 实际应用可能需要自然语言理解(NLU)模块 query_lower query.lower() target_objects [] target_relation None if cat in query_lower and sofa in query_lower and on in query_lower: target_objects [cat, sofa] target_relation on query_fact (relation, target_relation, cat, sofa) else: return {answer: unknown, explanation: Query not understood.} # 3. 在知识库中匹配规则 for rule in self.rules: # 检查规则的所有条件是否都被当前事实满足 conditions_met all(cond in facts for cond in rule[conditions]) if conditions_met: # 检查规则的结论是否与查询相关 conclusion_type, answer, explanation rule[conclusion] if conclusion_type answer and query_fact in rule[conditions]: return {answer: answer, explanation: explanation} # 4. 如果没有规则匹配返回默认答案 return {answer: no, explanation: Cannot determine the relationship based on known rules.}关键解释规则表示这里用conditions和conclusion的列表来表示简单的产生式规则。更复杂的系统可能使用一阶逻辑或描述逻辑。关系提取extract_relations函数是一个占位符。在真实的视觉推理中空间关系如 on, near, left_of可能需要一个专门的神经网络关系检测网络或基于目标检测框的几何计算来获得。为了简化我们使用了一个硬编码的字典。推理循环reason方法模拟了前向链式推理收集事实识别出的对象和关系然后遍历规则库寻找所有条件都被满足的规则并触发其结论。CPU 友好性符号推理的循环和列表查找操作在 CPU 上执行非常高效。如果规则库很大可以考虑使用更高效的数据结构如索引或专门的推理机如 Prolog 引擎。5. 集成系统与运行验证现在我们将神经模块和符号模块集成起来创建一个完整的流水线并验证其功能。5.1 创建主程序在main.py中编写集成代码。import argparse from neural_module import NeuralPerception from symbolic_module import SymbolicReasoner import time def main(image_path, query): print( Neuro-Symbolic AI System on CPU ) print(fImage: {image_path}) print(fQuery: {query}) # 初始化模块 print(\n1. Initializing modules...) neural_engine NeuralPerception(top_k5) symbolic_engine SymbolicReasoner() # 步骤1神经感知 print(\n2. Running neural perception (Object Detection)...) start_time time.time() detected_objects neural_engine.predict_to_symbols(image_path, confidence_threshold0.2) neural_time time.time() - start_time print(f Detected objects: {detected_objects}) print(f Neural inference time: {neural_time:.3f} seconds) if not detected_objects: print( Warning: No objects detected with sufficient confidence.) return # 步骤2符号推理 print(\n3. Running symbolic reasoning...) start_time time.time() result symbolic_engine.reason(detected_objects, query) symbolic_time time.time() - start_time print(f Symbolic reasoning time: {symbolic_time:.3f} seconds) # 输出最终结果 print(\n4. Final Answer:) print(f Answer: {result[answer]}) print(f Explanation: {result[explanation]}) print(f\nTotal processing time: {neural_time symbolic_time:.3f} seconds) print(*50) if __name__ __main__: parser argparse.ArgumentParser(descriptionRun a neuro-symbolic VQA demo on CPU.) parser.add_argument(--image, typestr, requiredTrue, helpPath to the input image.) parser.add_argument(--query, typestr, defaultIs the cat on the sofa?, helpQuery about the image. Default: Is the cat on the sofa?) args parser.parse_args() main(args.image, args.query)5.2 准备测试数据并运行你需要准备一张包含猫和沙发的图片例如cat_on_sofa.jpg。可以从开源数据集中找或者用简单的画图工具制作一张。运行程序python main.py --image ./cat_on_sofa.jpg --query Is the cat on the sofa?预期输出 Neuro-Symbolic AI System on CPU Image: ./cat_on_sofa.jpg Query: Is the cat on the sofa? 1. Initializing modules... 2. Running neural perception (Object Detection)... Detected objects: [cat, sofa] Neural inference time: 0.356 seconds 3. Running symbolic reasoning... Symbolic reasoning time: 0.0001 seconds 4. Final Answer: Answer: yes Explanation: The cat is on the sofa. Total processing time: 0.356 seconds 5.3 结果分析与验证神经感知部分耗时主要在模型的前向传播。MobileNetV2 在 CPU 上处理一张图片大约需要几百毫秒对于实时性要求不高的场景是可接受的。符号推理部分耗时几乎可以忽略不计体现了 CPU 执行逻辑判断的高效性。系统集成流程清晰数据从神经网络张量到符号系统列表/字符串的转换发生在 CPU 内存中没有额外的数据传输开销。验证要点功能正确性系统能否对不同的图片和查询给出符合规则的答案可以测试“猫在地板上”的图片。鲁棒性当神经网络识别失败如置信度过低或识别出未知物体时符号系统如何处理性能基线记录下 CPU 推理的基准时间作为后续优化的对比依据。6. CPU 环境下的性能优化与问题排查在 CPU 上部署 AI 系统性能是关键考量。以下是一些针对性的优化策略和常见问题排查方法。6.1 神经网络推理优化对于 PyTorch 模型在 CPU 上的推理可以尝试以下优化通常能带来数倍的性能提升使用 TorchScript 或 ONNX RuntimeTorchScript将 PyTorch 模型转换为静态图表示可以优化掉 Python 解释器的开销。# 在初始化后对模型进行脚本化 scripted_model torch.jit.script(neural_engine.model) # 保存和加载脚本化模型 scripted_model.save(mobilenet_v2_scripted.pt) loaded_model torch.jit.load(mobilenet_v2_scripted.pt) loaded_model.eval()ONNX Runtime将模型导出为 ONNX 格式并使用 ONNX Runtime 进行推理它针对 CPU 做了大量优化。pip install onnx onnxruntimeimport torch.onnx # ... 加载模型 ... dummy_input torch.randn(1, 3, 224, 224) torch.onnx.export(model, dummy_input, model.onnx, opset_version11) # 使用 ONNX Runtime 推理 import onnxruntime as ort session ort.InferenceSession(model.onnx) inputs {session.get_inputs()[0].name: input_batch.numpy()} outputs session.run(None, inputs)模型量化动态量化最简单对模型权重进行量化推理时动态量化激活值。model models.mobilenet_v2(weightsmodels.MobileNet_V2_Weights.IMAGENET1K_V1) model.eval() # 动态量化 quantized_model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 )静态量化需要校准数据精度损失更小性能提升更明显。注意量化可能会轻微降低精度需要评估。调整 CPU 并行度import torch # 设置 intra-op 并行线程数单个操作内部并行 torch.set_num_threads(4) # 设置 inter-op 并行线程数多个操作间并行适用于多核服务器 # torch.set_num_interop_threads(2) # 通常不需要手动设置最佳线程数需要根据 CPU 核心数和任务类型进行测试。6.2 符号推理优化当规则库变得非常庞大时例如上万条规则线性匹配会变慢。建立索引为规则的条件建立倒排索引可以快速定位到与当前事实相关的规则子集。使用高效推理引擎对于工业级应用可以考虑集成像Datalog、Prolog通过pySwip或专用规则引擎如Drools的 Python 绑定它们内置了高效的推理算法如 RETE 算法。6.3 常见问题与排查清单在 CPU 环境中运行此类系统可能会遇到以下典型问题问题现象可能原因检查与排查步骤解决方案推理速度极慢5秒/图1. 模型未设置为eval()模式。2. 未使用torch.no_grad()。3. CPU 线程数设置不当或资源被占用。4. 图像预处理在循环中重复创建transforms。1. 检查代码中是否有model.eval()。2. 检查推理代码是否在with torch.no_grad():块内。3. 使用top或htop查看 CPU 使用率检查torch.get_num_threads()。4. 检查预处理是否在__init__中只定义一次。1. 确保调用model.eval()。2. 确保推理代码在无梯度上下文中。3. 合理设置torch.set_num_threads()并确保没有其他进程耗尽 CPU。4. 将预处理管道定义为类属性避免重复初始化。内存占用持续增长1. 在推理循环中累积了张量或中间变量。2. 模型或数据未及时释放。1. 检查循环内是否有不必要的全局变量引用。2. 使用内存 profiling 工具如memory_profiler。1. 确保循环内的中间变量作用域仅限于循环内部。2. 对于批量处理及时将结果移出 GPU如果用了GPU或转换为 Python 原生类型。在 CPU 上关注 Python 对象引用。识别结果不稳定或错误1. 图像预处理与模型训练时不一致。2. 置信度阈值设置不合理。3. 符号映射规则有误。1. 对比官方模型示例的预处理代码。2. 打印出raw_results查看所有类别的置信度。3. 检查category_map的映射逻辑。1. 严格复制模型权重来源提供的预处理参数均值、标准差、尺寸。2. 调整confidence_threshold并可能对特定类别设置不同阈值。3. 完善和测试符号映射逻辑可能需要更精细的 NLP 方法。多线程并行无效1. PyTorch 版本或编译问题。2. 操作本身是单线程的如某些 Python 原生操作。3. 全局解释器锁GIL限制。1. 使用torch.__config__.parallel_info()查看并行信息。2. 使用性能分析工具如cProfile、py-spy查看热点。1. 确保安装的是支持 MKL 或 OpenBLAS 的 PyTorch 版本。2. 对于符号推理部分如果计算密集考虑使用multiprocessing模块绕过 GIL或将关键部分用 Cython/Numba 重写。系统无法回答预期问题1. 神经模块未识别出关键物体。2. 符号规则库不完整或条件太严格。3. 关系提取模块失效。1. 检查detected_objects列表是否包含查询所需物体。2. 打印出facts列表看是否包含了推理所需的所有事实。3. 检查spatial_heuristics字典是否包含了测试图片的关系。1. 尝试更强大的检测模型如 YOLO或调整阈值。2. 扩充规则库并考虑使用更灵活的匹配如模糊匹配。3. 实现或集成一个真正的视觉关系检测模块。7. 生产环境部署建议与扩展方向将原型系统推向生产环境需要考虑更多工程因素。7.1 部署架构考量服务化将神经模块和符号模块封装为独立的微服务如使用 FastAPI 或 Flask 提供 HTTP API。神经模块作为计算密集型服务符号模块作为逻辑服务。这样可以独立扩缩容。异步处理对于非实时任务可以使用消息队列如 RabbitMQ、Redis Streams进行解耦实现请求的缓冲和异步推理。模型管理使用专门的模型管理工具如 MLflow、TorchServe来管理不同版本的模型支持热更新和 A/B 测试。配置外置将模型路径、规则库、阈值等配置项从代码中分离使用配置文件或配置中心管理。7.2 监控与日志性能监控记录每个请求的神经推理时间、符号推理时间、总耗时。设置告警阈值。业务监控记录识别出的主要物体、触发的主要规则、最终答案分布。这有助于发现模型漂移或规则缺陷。结构化日志使用 JSON 格式记录日志便于后续用 ELK 或 Loki 进行聚合分析。关键日志点包括模型加载、推理开始/结束、规则匹配结果、异常捕获。7.3 扩展方向更强大的感知模块替换为目标检测模型如 YOLO、Faster R-CNN不仅能识别物体还能给出位置Bounding Box为空间关系推理提供几何基础。真正的视觉关系检测使用如 Visual Genome 数据集训练的模型直接预测subject, predicate, object三元组替代硬编码的spatial_heuristics。复杂的符号推理集成专业的知识图谱如 Neo4j和推理机处理更复杂的逻辑查询、继承关系和不确定性推理。端到端学习探索真正的神经符号架构其中符号推理过程的部分或全部也是可微的能够与神经网络一起进行端到端训练如 DeepProbLog、Neural Theorem Prover。边缘部署进一步优化模型如使用 TensorFlow Lite、PyTorch Mobile将其部署到手机、嵌入式设备等边缘 CPU 上实现低延迟、离线运行的神经符号应用。CPU 在神经符号 AI 的崛起并非要取代 GPU 在训练和大规模神经网络推理中的地位而是在混合智能计算中找到了其不可替代的定位。通过将适合并行计算的神经网络部分与适合串行逻辑处理的符号部分合理拆分与协同并在 CPU 平台上进行针对性优化我们能够在更广泛、更经济的硬件上部署智能系统。从本文的简单示例出发开发者可以逐步深入构建出能够理解复杂场景、进行可解释推理的下一代 AI 应用。
返回列表