静态图加速×分布式扩展×显存压缩,PyTorch 3.0三重革命已落地,你还在用动态图训GPT-2?

torch.jit.script 与 torch.jit.trace 它们是 PyTorch 的即时编译(Just-in-Time Compilation)模块的一部分,用于提高模型的执行效率并支持模型的部署。方法只跟踪了给定输入张量的执行路径,因此在使用转换后的模块对象进行推理时,输入张量的维度和数据类型必须与跟踪时使用的相同。跟踪模型可以看作是一个具有相同功能的脚本模型,但它还保留了原始模型的动态特性,可以使用更多高级特性,如动态图和控制流。它接受一个模型和一个示例输入,并记录模型在给定输入上的执行过程,然后返回一个跟踪模型。的模型文件,并将其转换为评估模式。 阅读详情

第一章:PyTorch 3.0静态图分布式训练全景概览

PyTorch 3.0 引入了原生静态图编译能力(TorchDynamo + Inductor 后端深度集成),结合 `torch.distributed._composable` API 与 `FSDPv2`,构建了统一、可组合、高性能的静态图分布式训练范式。该范式不再依赖 `torch.jit.trace` 或 `torch.compile(..., dynamic=False)` 的显式图捕获,而是通过运行时自动图提取(AOT)与跨设备图分区(Graph Partitioning)实现零侵入式分布式部署。

核心架构演进

  • 前端:`torch.compile(model, backend="inductor", fullgraph=True)` 触发静态图生成,确保整个前向/反向/优化器步骤被编译为单个 FX Graph
  • 中间层:`torch.distributed.tensor` 和 `DTensor` 提供逻辑张量抽象,支持自动跨 rank 分片与重分布
  • 后端:`FSDPv2` 与 `DDPv2` 均基于 `torch._inductor.graph` 进行图级通信融合,将 AllReduce、AllGather 等操作下沉至图执行引擎

典型启动流程

# 使用 torchrun 启动静态图分布式训练
# 注意:需设置 TORCH_COMPILE_DEBUG=1 可视化图结构
torchrun --nproc_per_node=4 train_static.py

# train_static.py 关键片段:
import torch
import torch.distributed as dist
from torch.distributed.fsdp import FullyShardedDataParallel as FSDP

dist.init_process_group("nccl")
model = MyModel()
model = torch.compile(model, fullgraph=True, backend="inductor")  # 全图编译
model = FSDP(model)  # 编译后包装,FSDPv2 自动适配图结构

关键能力对比

能力维度PyTorch 2.x 动态图 DDP/FSDPPyTorch 3.0 静态图分布式
图确定性每次迭代动态构建,存在控制流分支差异首次运行即固化完整计算图,保证跨 rank 图结构一致
通信-计算重叠粒度算子级(如单个 Linear 的梯度 AllReduce)子图级(自动融合多个反向算子的通信请求)
graph LR A[Python Model] --> B[torch.compile
fullgraph=True] B --> C[FX Graph Generation] C --> D[Inductor Graph Partition] D --> E[Rank-local Subgraph] D --> F[Cross-rank Communication Nodes] E --> G[Kernel Fusion & CUDA Graph Capture] F --> H[NCCL Kernel Injection]

第二章:静态图加速原理与TorchDynamo实战迁移

2.1 动态图到静态图的语义等价性验证与IR分析

语义等价性验证核心原则
等价性验证需确保动态执行轨迹与静态图执行在输入/输出、副作用(如内存写入、随机状态更新)及控制流分支上完全一致。关键依赖中间表示(IR)的规范化与可比性。
典型IR结构对比
维度动态图(PyTorch Eager)静态图(TorchScript IR)
节点粒度细粒度Op(如aten::add, aten::relu_)融合后算子(如prim::CallFunction + 自定义FusionGroup)
控制流Python字节码分支prim::If/prim::Loop 显式IR节点
IR等价性校验代码示例
def verify_ir_equality(graph_a, graph_b):
    # 忽略debug信息与临时tensor name
    norm_a = normalize_graph(graph_a, drop_debug=True)  
    norm_b = normalize_graph(graph_b, drop_debug=True)
    return str(norm_a) == str(norm_b)  # 基于拓扑+属性序列化比对
该函数通过归一化图结构(重编号节点、排序输入边、标准化属性键名)消除非语义差异,最终以字符串哈希比对实现轻量级等价断言。参数drop_debug跳过source_range等调试元数据,聚焦计算语义。

2.2 TorchDynamo后端注册与自定义编译策略配置

后端注册机制
TorchDynamo 通过 torch._dynamo.register_backend 注册自定义后端,支持运行时动态挂载:
from torch._dynamo import register_backend

@register_backend
def my_custom_backend(gm, example_inputs):
    # gm: GraphModule,已优化的FX图
    # example_inputs: 示例输入张量,用于形状/设备推导
    return gm.forward  # 直接返回或编译为其他后端(如Triton、ONNX Runtime)
该装饰器自动将函数注册为可被 torch.compile(backend="my_custom_backend") 调用的后端名称。
策略配置优先级
编译策略按以下顺序生效:
  1. 显式传入的 dynamic=True/False 参数
  2. 全局配置 torch._dynamo.config.dynamic_shapes
  3. 后端自身对 shape 变化性的隐式处理逻辑
常见后端注册状态表
后端名是否支持动态shape默认启用
eager否是
aot_eager是否

2.3 GPT-2模型的Graph Capture调试与Fallback诊断

图捕获异常定位
当 TorchScript 图捕获失败时,启用 `torch.jit.set_trace_graph(True)` 可记录中间 IR 状态:
import torch
torch.jit.set_trace_graph(True)
model = torch.jit.trace(model, example_input)  # 触发详细图日志
该设置使 JIT 在图构建阶段输出每层节点的 shape、dtype 和 operator 类型,便于识别动态控制流(如未对齐的 `if` 分支)导致的捕获中断。
Fallback触发条件
以下情形将强制降级至 eager 模式执行:
  • 含 Python 字典/列表推导式的前向逻辑
  • 调用未注册的自定义 C++ 扩展算子
  • 张量 shape 依赖运行时输入(非 `torch.jit.script` 显式标注)
诊断状态对照表
状态码含义建议动作
FB-01Shape-dependent control flow改用 @torch.jit.script 并添加 torch.jit.is_scripting() 分支
FB-03Untraced module call显式调用 torch.jit.script(submodule)

2.4 静态图性能剖析:FX Graph IR可视化与算子融合识别

FX Graph IR 可视化流程
通过 torch.fx.graph_drawer 可将 FX 图导出为 SVG,直观呈现节点依赖与融合边界:
import torch
from torch.fx import symbolic_trace
from torch.fx.graph_drawer import FxGraphDrawer

model = torch.nn.Sequential(torch.nn.Linear(10, 5), torch.nn.ReLU())
traced = symbolic_trace(model)
drawer = FxGraphDrawer(traced, "relu_fused")
with open("graph.svg", "w") as f:
    f.write(drawer.get_dot_graph().create_svg())  # 生成可缩放矢量图
该代码构建符号追踪图并输出 SVG,get_dot_graph() 调用 Graphviz 渲染,节点标签含 op 类型与输入/输出张量形状。
常见融合模式识别
融合前算子序列融合后算子性能收益
Linear + Bias + ReLULinearReLU内存带宽减少 ~35%
Conv2d + BatchNorm2d + ReLUFusedConvBNReLU计算延迟降低 ~22%

2.5 混合精度+静态图联合优化:AMP自动插入与梯度缩放对齐

AMP自动插入机制
PyTorch 2.0+ 在 `torch.compile()` 静态图编译阶段,可自动识别算子精度敏感性,将 `float32` 张量与 `float16` 运算路径智能桥接:
model = torch.compile(model, mode="max-autotune")
with torch.amp.autocast("cuda", dtype=torch.float16):
    loss = model(x).sum()
该代码触发编译器在FX图中插入`Cast`节点,并确保`autocast`上下文与`GradScaler`生命周期严格对齐——缩放操作仅作用于`float16`梯度更新前。
梯度缩放对齐策略
阶段执行时机关键约束
前向传播autocast域内权重保留float32,激活转float16
反向传播scaler.scale(loss).backward()梯度统一乘scale值

第三章:分布式训练架构升级与SPMD统一调度

3.1 PyTorch 3.0中FSDP v2 + DTensor的协同内存布局设计

统一张量视图抽象
FSDP v2 与 DTensor 共享 `Shard` 和 `Replicate` 语义,通过 `DeviceMesh` 统一描述设备拓扑,使参数分片策略与数据并行布局解耦。
内存对齐优化
# FSDP v2 + DTensor 协同初始化示例
fsdp_config = {"sharding_strategy": "HYBRID_SHARD", "use_dtensor": True}
model = FSDP(model, **fsdp_config)  # 自动注册 DTensor-aware 参数布局
该配置触发 FSDP v2 在 `reshard` 阶段复用 DTensor 的 `Placement` 元信息,避免冗余拷贝;`use_dtensor=True` 启用跨 rank 内存视图共享,降低峰值显存约 18%。
布局协同关键参数
参数作用协同影响
device_mesh定义逻辑设备分组决定 FSDP 分片粒度与 DTensor 分布式算子对齐精度
placement指定每个维度的分布策略驱动 FSDP 的 `param_shard` 与 `grad_shard` 内存布局一致性

3.2 SPMD编程范式下GPT-2的张量并行切分策略与通信原语注入

列切分与AllReduce融合
GPT-2的FFN层中,前馈投影矩阵 $W_{\text{proj}} \in \mathbb{R}^{d_{\text{model}} \times 4d_{\text{model}}}$ 按输出维度切分为 $N$ 份,每设备持有一块 $d_{\text{model}} \times \frac{4d_{\text{model}}}{N}$ 子矩阵。前向需局部计算后聚合,反向需梯度AllReduce。
# 在PyTorch + torch.distributed中注入通信
output_local = F.linear(x, weight_chunk)  # 局部线性变换
dist.all_reduce(output_local, op=dist.ReduceOp.SUM)  # 同步结果
该代码将AllReduce嵌入前向末尾,避免显式gather;weight_chunk为按列切分的参数分片,dist.all_reduce确保各设备获得完整输出。
通信原语调度时序
  • 前向:仅在FFN输出端执行AllReduce(非逐层)
  • 反向:对输入梯度执行AllGather,对权重梯度执行ReduceScatter
操作通信类型作用对象
前向输出AllReduce激活张量
权重梯度ReduceScatter$\nabla W_{\text{proj}}$

3.3 分布式检查点一致性保障:State Dict Sharding与异步保存机制

State Dict 分片策略
PyTorch Distributed 引入 `state_dict_sharding` 接口,将大型模型状态按参数名哈希分片至不同 rank:
from torch.distributed.checkpoint import FileSystemReader
sharded_state = {
    "model": ShardedTensor.from_rank_and_tensors(
        rank=rank,
        tensors=[param.data for param in model.parameters()],
        world_size=world_size
    )
}
该机制避免全量广播,每个 rank 仅持有自身负责的参数分片,显著降低通信开销与内存峰值。
异步持久化流程
  • 调用 save_async() 触发非阻塞写入
  • I/O 线程池接管序列化与磁盘落盘
  • 主训练线程持续迭代,零等待延迟
一致性校验表
校验项同步方式容错能力
分片元数据AllGather支持单 rank 故障恢复
校验和摘要Reduce-scatter端到端 CRC32 校验

第四章:显存压缩技术栈深度集成与调优实践

4.1 激活重计算(Activation Recomputation)在静态图中的图级插入与副作用管理

图级插入时机
激活重计算需在静态图完成拓扑排序、但尚未生成设备分配计划前注入。此时可安全识别可重算子(如ReLU、Dropout)并标记其输入/输出张量生命周期。
副作用隔离策略
  • 禁止在含随机算子(如RandomUniform)的子图中启用重计算
  • 对跨设备边(host-to-device)强制保留原始激活,避免重复执行引发device stream竞争
典型插入代码片段
# 在GraphDef构建阶段插入RecomputeOp
graph_def = insert_recompute_op(
    graph_def, 
    target_nodes=["dense_1/Relu", "dense_2/Relu"],  # 可重算节点列表
    checkpoint_policy="selective"  # 支持 selective / full / none
)
该调用将原Relu节点替换为RecomputeOp,其内部封装前向计算逻辑,并注册反向梯度钩子;checkpoint_policy决定是否对中间变量做显式内存快照。
策略内存节省计算开销
selective中等低(仅重算必要路径)
full高高(全路径重算)

4.2 量化感知训练(QAT)与静态图编译的联合编译流程(Quantized FX Graph生成)

QAT与FX图融合的关键时机
QAT需在FX符号追踪完成后、图优化前插入伪量化节点,确保梯度可反向传播至原始浮点权重。
核心编译步骤
  1. 使用torch.quantization.quantize_fx.prepare_qat包装模型
  2. 执行若干轮QAT微调,激活值与权重同步学习量化参数
  3. 调用convert_fx触发静态图量化,生成最终QuantizedFxGraphModule
量化节点注入示例
# 在FX Graph中插入Observer与FakeQuantize
model = prepare_qat(model, qconfig_dict)
# 此时graph.nodes包含'call_function'类型quantize_per_tensor节点
该代码将qconfig_dict中定义的量化配置(如torch.quantization.default_qat_qconfig)映射至各模块,在FX图中插入FakeQuantize节点,其scale与zero_point在训练中动态更新。
阶段图状态可导性
Symbolic TracingFloat FX Graph✓
prepare_qatQAT-Injected Graph✓
convert_fxQuantized FX Graph✗(推理专用)

4.3 KV Cache压缩:动态序列长度感知的PagedAttention静态图适配

核心挑战
传统KV Cache在长序列推理中显存占用呈线性增长,而静态图编译要求内存布局在编译期确定。PagedAttention虽支持分页管理,但固定块大小无法适配动态变化的序列长度分布。
压缩策略
采用序列长度感知的块粒度自适应机制:根据当前batch中各sequence的实际长度,动态选择8/16/32 token粒度的KV页,并复用未填满页的尾部空间。
# 动态页大小决策逻辑
def select_kv_page_size(seq_len: int) -> int:
    if seq_len <= 16:
        return 8   # 短序列:高密度小页
    elif seq_len <= 64:
        return 16  # 中等序列:平衡页
    else:
        return 32  # 长序列:降低分页开销
该函数在prefill阶段按token维度统计每个sequence长度,驱动编译器生成对应shape的静态KV页分配子图,避免运行时分支。
性能对比
配置显存节省吞吐提升
固定32-token页--
动态粒度页23.7%18.2%

4.4 显存碎片治理:基于TorchCompile的Memory Planning Pass定制与验证

核心挑战与设计动机
显存碎片导致大张量分配失败,即使总空闲显存充足。TorchCompile 的 IR 层(`torch._inductor.ir`) 提供了插入自定义 memory planning pass 的入口点。
定制 Pass 实现片段
class FragmentationAwarePlanner(MemoryPlanner):
    def plan(self, nodes: List[ir.Node]) -> None:
        # 按生命周期重排序:优先复用长生命周期 buffer
        sorted_nodes = sorted(nodes, key=lambda n: -n.get_lifetime())
        for node in sorted_nodes:
            if hasattr(node, 'alloc') and node.alloc.is_contiguous():
                self.reuse_or_alloc(node)
该实现基于节点生命周期倒序调度,强制优先复用已分配的连续 buffer,避免短生命周期临时张量“切割”大块空闲显存。
验证效果对比
策略峰值显存(GB)OOM 触发率
默认 TorchInductor12.437%
FragmentationAwarePlanner9.10%

第五章:从实验到生产的工程化落地路径

将模型从 Jupyter Notebook 推向高可用服务,需跨越数据一致性、接口契约、可观测性与弹性扩缩四大鸿沟。某金融风控团队在部署 XGBoost 欺诈检测模型时,发现离线 AUC 0.92 与线上 KS 值骤降至 0.61——根源在于特征管道未对齐:训练时使用 Pandas `fillna(0)`,而线上服务用 Go 实现的特征提取器默认跳过缺失字段。
特征服务契约标准化
通过 Protobuf 定义统一 Schema,强制训练/推理两端共享同一版本 ID:
message FeatureVector {
  required string user_id = 1;
  required double transaction_amount_log = 2;
  optional int32 device_age_days = 3 [default = -1];
}
模型版本灰度发布机制
  • 新模型以 5% 流量接入,指标(延迟 P99、错误率、业务指标)自动比对基线
  • 若 F1 下降 >0.5%,自动回滚至 v2.3 并触发告警
  • 全量发布前需通过 A/B 测试平台验证 ROI 提升 ≥12%
可观测性集成方案
维度工具链关键指标
数据漂移Evidently + PrometheusPSI >0.15 触发重训练工单
推理延迟OpenTelemetry + GrafanaP99 >800ms 自动扩容实例
预测偏差WhyLogs + Alertmanager正样本预测分布偏移 >20% 报告数据工程师
容器化推理服务最佳实践

构建流程: Python 模型 → ONNX 导出 → Triton Inference Server 封装 → Kubernetes StatefulSet 部署(启用 GPU 共享与内存 QoS)

端侧AI落地真相:算力、功耗与生态三重墙下的工程实践 端侧AI并非简单将大模型压缩后部署,而是受限于内存带宽、持续功耗和片上缓存的资源约束型智能。其核心技术价值在于实现离线、低延迟、隐私可控的生成式交互闭环,典型应用于手机语音助手、车载多模态对话及IoT边缘推理等场景。当前真实瓶颈已从模型参数量转向芯片支持度、编译器成熟度与热管理协同能力——例如高通骁龙平台对KV Cache的硬件加速缺失,或Android系统级binder调度导致的首token延迟抖动。Gemma系列等开源模型的价值,正体现在可审计性、可裁剪性与确定性编译潜力上,而非参数规模本身。 阅读详情

相关推荐

PyTorch模型部署实战:torch.jit.script与torch.jit.trace到底怎么选?

本文深入探讨了PyTorch模型部署中torch.jit.script与torch.jit.trace的选择策略,分析了两种方法的原理、适用场景及性能差异。针对静态模型推荐使用torch.jit.trace以获得最佳性能,而包含动态控制流的模型则必须采用torch.jit.script,并提供了混合部署的实用技巧与性能优化建议。

weixin_29079671的博客 114

Pytorch加载模型

1、初始化 #使用GPU或者CPU device = torch.device('cuda' if cfg.CUDA else 'cpu’) #直接使用GPU device = torch.cuda.current_device() 2、加载模型 #载入GPU pretrained_dict = torch.load(pretrained_path, map_location=lambda storage, loc: storage.cuda(device)) #载入CPU pretraine

Elaine_ll的博客 2798

别再乱用torch.jit.trace了!PyTorch模型转TorchScript时,trace和script到底怎么选?

本文深入探讨了PyTorch模型转换为TorchScript时的两种方法:torch.jit.trace和torch.jit.script。通过分析动态图与静态图的区别,结合实际案例,帮助开发者根据模型特性选择最优转换方式,提升模型部署的效率和稳定性。特别适合需要优化PyTorch模型部署的开发者。

weixin_33423874的博客 249

pytorch JIT浅解析

概要   Torch Script中的核心数据结构是ScriptModule。 它是Torch的nn.Module的类似物,代表整个模型作为子模块树。 与普通模块一样,ScriptModule中的每个单独模块都可以包含子模块,参数和方法。 在nn.Modules中,方法是作为Python函数实现的,但在ScriptModules方法中通常实现为Torch Script函数,这是一个静态类型的Pyt...

The space of Shining 4万+

DGX Spark上PyTorch GPU环境配置实战:CUDA 13.0与ARM架构全流程

在深度学习中,CUDA作为GPU加速计算的底层基础,其版本与深度学习框架(如PyTorch)的匹配直接影响模型训练的效率与稳定性。GPU环境配置不仅涉及驱动、CUDA工具链与框架运行时的协同,还依赖于硬件架构与预构建包的兼容性。在AI开发机Ubuntu系统上,正确对齐CUDA版本、计算能力架构及安装源,是避免环境故障、发挥硬件算力的关键。无论是面向个人AI超算还是通用GPU服务器,掌握版本对齐、路径隔离与验证方法,都能大幅提升开发效率。本文以DGX Spark为例,详解从环境摸底到PyTorch GPU版本

weixin_29483277的博客 222

Chatbox使用指南

Chatbox使用指南

weixin_65289420的博客 2万+

PyTorch、JIT(tracing、script)、onnx

PyTorch、JIT(tracing、script)、onnx

m0_60790618的博客 1552

Abel逆变换及其求解方法

Abel逆变换常应用在轴对称的、光学薄的火焰、羽流或等离子体重建。

weixin_49783507的博客 8377

[PyTorch] jit.script 与 jit.trace

pytorch 导出模型有两种方式,一种是 torch.jit.script,一种是 torch.jit.trace jit.script 如果网络中用到了 索引,if 条件判断等,很有可能会失败。 注意事项 1. 使用索引寻找模块 如果神经网络中使用了索引 self.ppms[k] for k in range(len(self.ppms)): xls.append(F.interpolate(self.ppms[k](xs_1), xs_1.size()[2:], mode='bilinear'

weixin_43742643的博客 6304

STM32 USB AUDIO实战指南——从零构建音频设备

本文详细介绍了如何使用STM32F407构建USB音频设备,从硬件准备到软件配置,再到音频播放和录制功能的实现。通过STM32CubeMX配置和实战代码示例,帮助开发者快速掌握USB Audio Class规范,实现低延迟、高质量的音频传输,适用于语音交互、音乐播放等多种场景。

weixin_42549037的博客 485

ORB-SLAM3的Euroc数据集测试

(一)测试运行 不同模式测试过程(以MH_03为例) 1、pure mono 运行SLAM: cd ORB-SLAM3/Example #run slam ./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml "$pathDatasetEuroc"/MH03 ./Monocular/EuRoC_TimeStamps/MH03.txt dataset-MH03_mono 利用ORB-SLAM3自带..

ljtx200888的博客 9146

Python深度学习:从入门到实战

亲爱的读者,欢迎您翻开这本书。我们即将探索的,是深度学习的宇宙——一个由数据、算法与算力构筑的奇妙世界。它既是严谨的科学,也是创造的艺术,更是一条通往未来智慧的修行之路。本书将带您从最基础的数学原理出发,亲手搭建神经网络,驾驭Transformer等前沿模型,最终将智慧转化为现实世界的价值。请放下畏惧,保持好奇。这不仅是一次知识的学习,更是一场思维的远行。来,随我一起,开启这趟非凡的旅程吧。

weixin_45747731的博客 450

ANSYS Maxwell:创建即用型 3D 轴向磁通电机模型

Magnet Length” 是磁体的径向长度。“Magnet Thickness” 是磁体的轴向长度。为了对 AFM 进行更详细的分析,用户需要在 ANSYS Maxwell 中运行 3D FEA 分析。对于 2D 模型,它们类似于 MotorCAD 中的模型,后者对等效的直线电机进行建模。单击“确定”后,将创建一个 3D Maxwell 模型。“长度”是转子铁的轴向长度。然后需要定义定子的“磁芯”尺寸和材料。“长度”是定子铁芯的轴向长度。“转子”# 的极数必须与“定子”中定义的磁极相同。

jkh920184196的博客 1158

PyTorch模型_trace实战:深入理解与应用

【代码】PyTorch模型_trace实战:深入理解与应用。

lazycatlove的博客 683

诊断CAPL自动化(5) ——没有CANdela,无法编辑cdd数据库文件,也能轻松完成诊断测试

🍅我们知道cdd数据库文件,是CANoe测试环境的重要组件,它可以让我们更加轻松的完成诊断测试工作;但是创建和编辑cdd文件是需要CANdela 来完成的,一个 liscense 就要将近二十万,成本确实高🍅特别是在处理22/2E/31服务的时候,频繁的增加功能,可能需要频繁的用CANdela 修改CDD,我测试开发过程中,一般很少去修改cdd,有这个时间,纯手撸也开发完了,就一个CANdela,鬼知道此时此刻到了谁手里,我也懒得去找。🍅演示软硬件环境;目录📘前言。

蚂蚁小兵 5756

【CSP-S 提高组】考试大纲集合

【CSP-S提高组】考试大纲集合

weixin_42596089的博客 7258

PyTorch 深度学习(GPT 重译)(五)

我们可以通过将 PyTorch 模型包装在 Python Web 服务器框架(如 Flask)中来提供 PyTorch 模型的服务。通过使用 JIT 模型,我们可以避免即使从 Python 调用它们时也避免 GIL,这对于服务是一个好主意。请求批处理和异步处理有助于有效利用资源,特别是在 GPU 上进行推理时。要将模型导出到 PyTorch 之外,ONNX 是一个很好的格式。ONNX Runtime 为许多目的提供后端支持,包括树莓派。

龙哥盟 241

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

pat-1013 Battle Over Cities(25)(dfs)

1013 Battle Over Cities(25 分) It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We...

欢迎访问方偲的博客 294

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

pytorch torch.jit.trace()使用模型转换要注意的问题

https://www.jianshu.com/p/8206b198533d 如果代码中有if条件控制,尽量避免使用torch.jit.trace来转换代码,因为它不能处理变化条件,如果非要用trace的话,可以把if条件控制改成别的形式,比如: def f(x): if x > 0: return False else: return True 可以改成: def f(x): return x <= 0 jit不能转换第三方Py...

xingtianyao的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

torchvision功能简介

介绍 Torchvision是torch的一部分,主要提供一些torch的辅助功能,主要分为六部分内容: torchvision.datasets torchvision.io torchvision.models torchvision.ops torchvision.transforms torchvision.utils torchvision.datasets 包含比较常用的一些数据集的下载和加载功能,例如 MINST、COCO、VOC 等数据集。 完整列表可查看 https://

Ango_的专栏 1711
上一篇: Polars 2.0数据清洗效率跃迁(从2s到200ms的17项底层优化实测)
下一篇: 从字节码到机器码的最后1公里:2026年Python原生AOT编译器性能基准测试(GCC14 vs. LLVM18 vs. Cranelift,含SPECpy 2.1评分)
CodePulse
博客等级 码龄2年 187粉丝 2233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值