PyTorch Geometric(PyG):基于PyTorch的图神经网络(GNN)开发框架

PyTorch Geometric(PyG):基于PyTorch的图神经网络(GNN)开发框架

一、PyG核心功能全景图

PyTorch Geometric(PyG)是基于PyTorch的图神经网络(GNN)开发框架,专为不规则结构数据(如图、网格、点云)设计,提供从数据加载、模型构建到训练优化的全流程工具链。其核心功能包括:

(一)多样化图算法支持

  • 经典GNN模型:实现GCN、GAT、GraphSAGE、GIN等主流图卷积算法,支持节点/图分类、链路预测等任务。
  • 几何深度学习:涵盖3D网格(Mesh)和点云(Point Cloud)处理工具,如torch_geometric.transforms中的点云增强算子。
  • 注意力机制:内置多头注意力层(GATConv)、全局注意力(GlobalAttention),支持自定义注意力逻辑。

(二)高效数据处理与批量操作

  • 统一数据结构:通过Data类表示单图(节点特征、边索引、全局属性),Batch类实现动态图批量拼接。
  • 智能数据加载:支持小批量(Mini-Batch)训练,内置DataLoaderNeighborSampler处理大规模图的邻域采样。
  • 多GPU与分布式支持:集成PyTorch分布式接口,支持数据并行和模型并行,配套DistributedDataLoader实现跨节点数据分发。

(三)全流程工具生态

  • 数据集与基准:内置Cora、OGB等30+公开数据集,支持自定义数据集加载(继承Dataset类)。
  • 模型解释与评估:通过torch_geometric.explain模块实现GNN归因分析(如节点/边重要性可视化),metrics模块提供准确率、ROC-AUC等评估指标。
  • 性能优化:支持TorchScript编译加速、CPU线程亲和性设置(torch_geometric.profile),以及内存高效聚合(Memory-Efficient Aggregations)技术。

二、核心模块与API详解

(一)数据处理模块:torch_geometric.data

类/函数功能描述
Data表示单图结构,包含x(节点特征)、edge_index(边索引)、y(标签)等属性
Batch将多个Data对象合并为批量输入,自动处理节点/边的索引偏移
DataLoader基于Batch的迭代器,支持自定义批量大小和数据打乱策略
InMemoryDataset内存型数据集基类,适用于小规模数据预处理后一次性加载
NeighborSampler大图邻域采样器,支持分层采样(如每层采样固定数量邻居)以降低内存消耗

代码示例:创建自定义图数据

from torch_geometric.data import Data# 节点特征(3个节点,每个节点2维特征)
x = torch.tensor([[0.0, 1.0], [2.0, 3.0], [4.0, 5.0]], dtype=torch.float)
# 边索引(COO格式,源节点->目标节点)
edge_index = torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtype=torch.long)
# 图标签(可选)
y = torch.tensor([7], dtype=torch.long)# 构建单图对象
data = Data(x=x, edge_index=edge_index, y=y)
print(data)  # 输出:Data(edge_index=[2, 4], x=[3, 2], y=[1])

(二)模型构建模块:torch_geometric.nn

1. 基础图卷积层
层类核心参数应用场景
GCNConvin_channels, out_channels(输入/输出维度)同构图节点分类
GATConvheads(注意力头数), concat(是否拼接多头输出)异质图或需要注意力机制的场景
GraphConvaggr(聚合函数,如"add", “mean”, “max”)通用图卷积
2. 高级组件
  • 池化层TopKPooling(基于节点重要性的Top-K池化)、GlobalAttentionPooling(全局注意力池化)。
  • 归一化层GraphNorm(图级归一化)、InstanceNorm(实例归一化)。
  • 注意力机制GATv2Conv(改进的注意力层,支持动态权重)、TransformerConv(图结构中的Transformer)。

代码示例:构建GCN模型

import torch
from torch_geometric.nn import GCNConv, global_mean_poolclass GCNModel(torch.nn.Module):def __init__(self, in_channels, hidden_channels, out_channels):super().__init__()self.conv1 = GCNConv(in_channels, hidden_channels)self.conv2 = GCNConv(hidden_channels, out_channels)def forward(self, x, edge_index, batch):# x: [N, in_channels], edge_index: [2, E], batch: [N](图划分标签)x = self.conv1(x, edge_index).relu()  # 第一层卷积+ReLU激活x = self.conv2(x, edge_index)         # 第二层卷积x = global_mean_pool(x, batch)        # 图级池化(全局平均池化)return x  # 输出维度: [batch_size, out_channels]

(三)数据集模块:torch_geometric.datasets

数据集类任务类型节点数边数说明
Cora节点分类2,7085,278经典论文引用网络
Planetoid节点分类~10k~15k包含Cora、Citeseer等
OGBN-Arxiv节点分类169k1.1MOGB大型基准数据集
QM9图回归~130k~1.6M分子性质预测

代码示例:加载Cora数据集

from torch_geometric.datasets import Planetoid# 加载Cora数据集(自动下载至./data/Planetoid目录)
dataset = Planetoid(root='./data/Cora', name='Cora')
data = dataset[0]  # 取第一个图(单图数据集,这里为整个Cora图)
print(f"节点数: {data.num_nodes}, 边数: {data.num_edges}")

三、实战案例:基于GCN的分子属性预测

(一)场景描述

任务:预测分子图的物理属性(如能级),使用QM9数据集(分子图回归任务)。

(二)代码实现步骤

  1. 数据加载与预处理
from torch_geometric.datasets import QM9
from torch_geometric.loader import DataLoader
from torch_geometric.transforms import NormalizeFeatures# 加载QM9数据集并标准化特征
dataset = QM9(root='./data/QM9', transform=NormalizeFeatures())
# 划分训练集/测试集(QM9默认按索引顺序排列,前11万为训练集)
train_dataset = dataset[:110000]
test_dataset = dataset[110000:]
# 创建数据加载器
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)
  1. 模型定义(GCN+全局池化)
import torch.nn.functional as F
from torch_geometric.nn import GCNConv, GlobalAttentionPoolingclass MolecularGCN(torch.nn.Module):def __init__(self, in_channels, hidden_channels, out_channels):super().__init__()self.conv1 = GCNConv(in_channels, hidden_channels)self.conv2 = GCNConv(hidden_channels, hidden_channels)self.pool = GlobalAttentionPooling(hidden_channels)  # 全局注意力池化self.lin = torch.nn.Linear(hidden_channels, out_channels)def forward(self, x, edge_index, batch):x = self.conv1(x, edge_index).relu()x = self.conv2(x, edge_index).relu()x = self.pool(x, batch)  # 池化后得到图级特征x = self.lin(x)           # 回归头return x.squeeze()        # 输出维度: [batch_size]
  1. 训练与评估(均方误差损失)
import torch.optim as optim
from torchmetrics.regression import MeanSquaredErrordevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = MolecularGCN(in_channels=9, hidden_channels=64, out_channels=1).to(device)
optimizer = optim.Adam(model.parameters(), lr=0.001)
mse_metric = MeanSquaredError().to(device)def train():model.train()total_loss = 0for data in train_loader:data = data.to(device)optimizer.zero_grad()out = model(data.x, data.edge_index, data.batch)loss = F.mse_loss(out, data.y[:, 0])  # 预测第一个属性(HOMO-LUMO能隙)loss.backward()optimizer.step()total_loss += loss.item() * data.num_graphsreturn total_loss / len(train_loader.dataset)def test(loader):model.eval()total_error = 0for data in loader:data = data.to(device)out = model(data.x, data.edge_index, data.batch)total_error += mse_metric(out, data.y[:, 0]).item() * data.num_graphsreturn total_error / len(loader.dataset)# 训练循环
for epoch in range(1, 201):loss = train()test_loss = test(test_loader)print(f"Epoch: {epoch:03d}, Train MSE: {loss:.4f}, Test MSE: {test_loss:.4f}")

四、扩展功能与最佳实践

(一)模型部署与加速

  • TorchScript编译:通过torch.jit.script(model)将GNN模型转换为可序列化的TorchScript格式,支持生产环境部署(如Python/C++推理)。
  • 多GPU训练:使用torch_geometric.loader.DataLoader配合torch.nn.parallel.DataParallelDistributedDataParallel实现数据并行训练。

(二)自定义消息传递层

继承torch_geometric.nn.MessagePassing类,实现messageaggregateupdate方法,例如自定义图注意力机制:

from torch_geometric.nn import MessagePassingclass CustomGAT(MessagePassing):def __init__(self, in_channels, out_channels):super().__init__(aggr='add')  # 聚合方式:求和self.lin = torch.nn.Linear(in_channels, out_channels)self.att = torch.nn.Parameter(torch.randn(out_channels, 1))def message(self, x_i, x_j):# x_i: [E, out_channels](源节点特征),x_j: [E, out_channels](目标节点特征)alpha = (x_i + x_j) @ self.att  # 计算注意力分数alpha = F.leaky_relu(alpha)return x_j * alpha.sigmoid()  # 带注意力权重的消息

五、生态与学习资源

  • 官方文档:PyG Documentation 提供模块API、速查表(Cheatsheets)和进阶指南。
  • 社区与案例:GitHub仓库(pyg-team/pytorch_geometric)包含大量示例(如知识图谱补全、3D点云分割)。
  • 论文复现:参考torch_geometric.nn中的算法实现(如GCN、GraphSAGE),结合torch_geometric.datasets的基准数据集复现经典论文。

五、高级模块与API全景:超越基础的图学习能力

(一)采样与规模化训练:torch_geometric.sampler

核心功能:处理超大规模图的内存优化
  • 分层邻域采样
    • NeighborSampler:支持多跳邻域采样(如每层采样固定数量邻居),生成子图用于批量训练,避免全图计算的内存爆炸。
    • AdaptiveSampler:根据节点重要性动态调整采样规模,提升关键节点的特征学习效率。
  • 负采样
    • NegativeSampler:为链路预测任务生成负样本,支持均匀采样、度数加权采样等策略。
  • 代码示例:分层采样器初始化
    from torch_geometric.sampler import NeighborSampler# 假设data为全图数据(edge_index为COO格式)
    sampler = NeighborSampler(data.edge_index, sizes=[25, 10],  # 两层采样,每层分别采样25和10个邻居batch_size=1024, shuffle=True
    )
    

(二)分布式训练:torch_geometric.distributed

核心能力:跨节点/跨GPU的大规模图训练
  • 数据并行与模型并行
    • DistributedDataLoader:支持将大图切分为子图,通过PyTorch分布式接口(如torch.distributed)实现多机多卡训练。
    • HeteroDataParallel:针对异构图的分布式训练,支持不同类型节点/边的并行计算。
  • 远程后端集成
    • 支持与DGL-Lightning、PyTorch Lightning结合,通过远程服务器(如AWS/GCP)扩展训练规模。
  • 代码示例:初始化分布式数据加载器
    import torch.distributed as dist
    from torch_geometric.distributed import DistributeDataParallel, DistributedDataLoader# 初始化分布式环境
    dist.init_process_group(backend='nccl')
    # 分布式数据加载器(假设dataset已划分为多个分区)
    loader = DistributedDataLoader(dataset, batch_size=64, num_workers=4, shuffle=True
    )
    

(三)模型解释与可解释性:torch_geometric.explain

核心工具:GNN归因分析与可视化
  • 归因方法
    • GNNExplainer:通过扰动节点/边特征,量化其对模型预测的贡献度,生成关键子图。
    • PGExplainer:基于路径的解释方法,适用于异构图或长距离依赖场景。
  • 可视化
    • 集成matplotlibnetworkx,支持将解释结果(如重要节点/边)渲染为交互式图。
  • 代码示例:解释GCN模型预测
    from torch_geometric.explain import GNNExplainer# 假设model为训练好的GCN模型,data为待解释的图数据
    explainer = GNNExplainer(model)
    explanation = explainer.explain_node(node=0, x=data.x, edge_index=data.edge_index)
    print(f"重要边数: {explanation.edge_mask.sum().item()}")
    

(四)性能优化与分析:torch_geometric.profile

核心功能:细粒度性能调优
  • CPU亲和性设置
    • set_cpu_affinity:为数据加载线程分配特定CPU核心,减少线程竞争,提升数据预处理速度。
  • 内存分析
    • MemoryTracker:跟踪模型训练中的内存占用,定位泄漏点(如未释放的中间变量)。
  • 代码示例:设置CPU亲和性
    from torch_geometric.profile import set_cpu_affinity# 将当前线程绑定到CPU核心0-3
    set_cpu_affinity(cores=[0, 1, 2, 3])
    

(五)异构图与多模态支持:torch_geometric.data.HeteroData

核心数据结构:处理复杂图结构
  • 异构图表示
    • HeteroData类支持不同类型的节点(如用户/商品)和边(如点击/购买),通过字典式接口访问属性:
    from torch_geometric.data import HeteroDatahetero_data = HeteroData()
    # 添加用户节点(类型为'user',特征维度128)
    hetero_data['user'].x = torch.randn(100, 128)
    # 添加商品节点(类型为'item',特征维度64)
    hetero_data['item'].x = torch.randn(500, 64)
    # 添加用户-商品交互边(类型为'click')
    hetero_data['user', 'click', 'item'].edge_index = torch.randint(0, 100, (2, 5000))
    
  • 异构图卷积层
    • HeteroConv支持为不同边类型分配独立的卷积层,例如:
    from torch_geometric.nn import HeteroConv, GCNConv, GATConvconv = HeteroConv({'click': GCNConv(128, 64),  # 用户→商品边使用GCN'follow': GATConv(128, 64, heads=4)  # 用户→用户边使用GAT
    }, aggr='sum')  # 聚合方式:求和
    

(六)实验管理与超参数搜索:torch_geometric.graphgym

核心工作流:自动化实验流水线
  • 配置驱动开发
    • 通过YAML配置文件定义模型架构、训练参数、数据预处理流程,例如:
    model:name: GCNin_channels: 1433hidden_channels: 64out_channels: 7
    train:epochs: 200lr: 0.01weight_decay: 5e-4
    
  • 超参数搜索
    • 集成Ray Tune、Optuna,支持网格搜索、贝叶斯优化等策略,自动运行多组实验并记录结果。
  • 可视化与日志
    • 内置Weights & Biases集成,实时绘制训练曲线、对比不同模型性能。

六、前沿技术模块:探索PyG的扩展生态

(一)自定义算子与CUDA加速:torch_geometric.utils

高级工具函数:
  • 稀疏矩阵操作
    • to_scipy_sparse_matrix:将PyG的edge_index转换为Scipy稀疏矩阵,便于与传统图算法(如PageRank)结合。
    • add_remaining_self_loops:为图添加自环边,支持指定概率或均匀添加。
  • CUDA优化
    • sort_edge_index:对edge_index进行排序和去重,提升GPU计算效率(尤其在使用CuPy等库时)。

(二)3D几何数据处理:torch_geometric.transforms

高级变换:
  • 点云增强
    • RandomTranslate:随机平移点云坐标,增强模型鲁棒性。
    • NormalizeScale:按质心和尺度归一化点云,消除位置与大小差异。
  • 网格处理
    • FaceToEdge:将网格的面(Face)转换为边(Edge),便于图卷积处理。
    • SubdivideMesh:细分网格表面,增加节点密度以提升特征学习精度。

(三)对比学习与图增广:torch_geometric.transforms

自监督学习支持:
  • 图级增广
    • RandomNodeDropout:随机删除节点(模拟遮挡)。
    • EdgePerturbation:随机添加/删除边(破坏图结构)。
  • 对比损失函数
    • 结合torch_geometric.nn.ContrastiveLoss,实现基于图结构的对比学习,例如:
    from torch_geometric.nn import ContrastiveLoss# 假设z1和z2为同一图的两个增广视图的特征
    loss_fn = ContrastiveLoss()
    loss = loss_fn(z1, z2)
    

七、工业级应用场景:高级功能的实战组合

(一)超大规模推荐系统(亿级节点)

  • 技术栈
    • HeteroData表示用户-商品-类别异构图。
    • NeighborSampler进行分层采样,配合DistributedDataLoader实现多机训练。
    • GATConv捕捉用户与商品的交互模式,GlobalAttentionPooling生成用户/商品嵌入。
  • 性能优化
    • 使用torch_geometric.profile优化CPU线程分配,TorchScript编译模型用于在线推理。

(二)分子生成与药物发现(生成式GNN)

  • 技术栈
    • torch_geometric.transforms进行分子图增广(如随机原子类型替换)。
    • HeteroConv处理异质原子(C/H/O)和化学键(单键/双键)。
    • 结合torch_geometric.explain分析关键官能团对属性的影响。

八、深度API索引:高级模块速查表

模块核心类/函数功能描述
torch_geometric.samplerNeighborSampler分层邻域采样,支持多跳子图生成
AdaptiveSampler动态重要性采样,优先保留关键节点
torch_geometric.distributedDistributeDataParallel分布式GNN训练,支持数据并行与模型并行
partition_graph将大图划分为多个子图,用于分布式存储
torch_geometric.explainGNNExplainer模型归因分析,生成关键子图和特征重要性
ExplainableGraphNet可解释图神经网络,内置注意力机制的可解释性支持
torch_geometric.profileMemoryTracker内存使用跟踪,定位训练中的内存泄漏
Benchmark性能基准测试,对比不同采样策略/模型架构的效率
torch_geometric.graphgymAutoConfig自动生成实验配置模板
run experiment执行多组超参数实验,支持分布式训练

五、总结:从基础到前沿的PyG技术演进

PyTorch Geometric的高级功能已从单纯的算法实现延伸至规模化训练可解释性异构数据处理自动化实验等工业级场景。通过深入理解samplerdistributedexplain等模块,开发者能够应对亿级节点图的训练挑战,同时满足模型可解释性和性能优化的需求。未来,随着PyG对生成式GNN、3D几何学习等前沿领域的持续投入,其将进一步成为连接学术研究与工业落地的桥梁。

延伸探索

  • 官方示例库:PyG Examples 包含异构图、分布式训练、3D点云等高级场景代码。
  • 技术论文:参考PyG官方文档中“Advanced Concepts”章节,了解分层采样、内存优化等技术的理论背景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/81630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亮相戛纳电影节、北京电影节的影星

​17日,由高圆圆、古天乐主演的《风林火山》剧组,在第78届戛纳影展上走红毯亮相,记者争相拍照,风光无限。 值得关注的是,导演麦浚龙以一身黑色晚礼服踏上红毯,微笑间显得踌躇滿志;古天乐则以白色…

Django框架的前端部分使用Ajax请求一

Ajax请求 目录 1.ajax请求使用 2.增加任务列表功能(只有查看和新增) 3.代码展示集合 这篇文章, 要开始讲关于ajax请求的内容了。这个和以前文章中写道的Vue框架里面的axios请求, 很相似。后端代码, 会有一些细节点, 跟前几节文章写的有些区别。 一、ajax请求使用 我们先…

IP地址代理公司:服务模式与行业应用探析

随着数据驱动型经济的快速发展和互联网应用的普及,IP地址代理服务逐渐成为支持多种网络业务的重要组成部分。近年来,提供代理IP服务的公司遍地开花,这一市场强调供给的技术深度和服务灵活性,而代理IP公司本身也逐步从单一的技术供…

C语言练手磨时间

167. 两数之和 II - 输入有序数组 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 <…

本地部署Firecrawl+Dify调用踩坑记录

最近自己研究Dify&#xff0c;使用到Firecrawl这个比较好用的工具。用Firecrawl官网的不知道为什么总是卡住得不到结果&#xff0c;于是我打算自己去本地部署一个。好家伙真给我人搞麻了&#xff0c;太多问题了。 我是在京东云上面租的一台服务器。 首先就是docker的安装&…

iOS SwiftUI的具体运用实例(SwiftUI库的运用)

最近接触到一个 SwiftUI的第三方框架&#xff0c;它非常的好用。以下是 具体运用实例&#xff0c;结合其核心功能与开发场景&#xff0c;分多个维度进行详细解析&#xff1a; 一、基础 UI 组件开发 登录界面 SwiftUI 的 VStack、TextField 和 Button 可快速构建用户登录表单。例…

【C++】模板上(泛型编程) —— 函数模板与类模板

文章目录 一、啥是泛型编程二、函数模板2.1、函数模板的概念2.2、函数模板的格式2.3、函数模板的原理2.4、函数模板的实例化2.4.1、隐式实例化&#xff1a;让编译器根据实参推演模板参数的实际类型2.4.2、显示实例化&#xff1a;在函数名后的<>中指定模板参数的实际类型 …

语音识别-2

目录 1.蓝牙优化 1.打开sco 2.外放时的蓝牙的不同版本适配 2.微软文本转语音优化 1.异步文本转语音 2.语音的个性化 上一篇关于语音识别, 虽然能用,但在系统适配,机器适配方面,速度,性能等还是有优化的地方.所以这篇是关于这些的. 1.蓝牙优化 A2DP:是一种单向的高品质音…

【springcloud学习(dalston.sr1)】服务消费者通过restTemplate来访问服务提供者(含源代码)(五)

该系列项目整体介绍及源代码请参照前面写的一篇文章​​​​​​【springcloud学习(dalston.sr1)】项目整体介绍&#xff08;含源代码&#xff09;&#xff08;一&#xff09; springcloud学习&#xff08;dalston.sr1&#xff09;系统文章汇总如下&#xff1a; 【springcloud…

小白学编程之——数据库如何性能优化

小白学编程之——数据库性能优化指南 数据库如同一个大型仓库&#xff0c;性能优化就是帮助仓库管理员&#xff08;数据库&#xff09;更高效地存取货物&#xff08;数据&#xff09;。本文将以通俗易懂的方式&#xff0c;带你避开常见误区&#xff0c;让数据库运行得更快更稳…

SQLMesh信号机制详解:如何精准控制模型评估时机

SQLMesh的信号机制为数据工程师提供了更精细的模型评估控制能力。本文深入解析信号机制的工作原理&#xff0c;通过简单和高级示例展示如何自定义信号&#xff0c;并提供实用的使用技巧和测试方法&#xff0c;帮助读者优化数据管道的调度效率。 一、为什么需要信号机制&#xf…

FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台,用的在线的ASR和TTS

FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台 0、一个fs的web配置界面预览1、安装unimrcp模块2、安装完成后&#xff0c;配置FreeSWITCH。2.1 有界面的配置2.1.1 mod_unimrcp模块配置2.1.2 mod_unimrcp客户端配置 2.2 无界面的配置 3、呼叫规则4、编写流程4…

【架构】RUP统一软件过程:企业级软件开发的全面指南

一、RUP概述 RUP(Rational Unified Process&#xff0c;统一软件过程)是由Rational Software公司(后被IBM收购)开发的一种迭代式软件开发过程框架。它结合了传统瀑布模型的系统性和敏捷方法的灵活性&#xff0c;为中大型软件项目提供了全面的开发方法论。 RUP不仅仅是一种过程…

DeepSeek赋能电商,智能客服机器人破解大型活动人力困境

1. DeepSeek 与电商客服结合的背景 1.1 电商行业客服需求特点 电商行业具有独特的客服需求特点&#xff0c;这些特点决定了智能客服机器人在该行业的必要性和重要性。 高并发性&#xff1a;电商平台的用户数量庞大&#xff0c;尤其是在促销活动期间&#xff0c;用户咨询量会…

面向具身智能的视觉-语言-动作模型(VLA)综述

具身智能被广泛认为是通用人工智能&#xff08;AGI&#xff09;的关键要素&#xff0c;因为它涉及控制具身智能体在物理世界中执行任务。在大语言模型和视觉语言模型成功的基础上&#xff0c;一种新的多模态模型——视觉语言动作模型&#xff08;VLA&#xff09;已经出现&#…

后端框架(1):Mybatis

什么是框架&#xff1f; 盖高楼&#xff0c;框架结构。 框架结构就是高楼的主体&#xff0c;基础功能。 把很多基础功能已经实现了(封装了)。 在基础语言之上&#xff0c;对各种基础功能进行封装&#xff0c;方便开发者&#xff0c;提高开发效率。 mybatis&#xff1a;对jd…

ubuntu20.04系统搭建k8s1.28集群-docker作为容器运行时

ubuntu系统搭建 ubuntu-22.04.5-desktop-amd64.iso映像文件--->实际却是20.4focal版本。 【安装过程没有特别指出的默认回车下一步】 【用户和密码设置】 【网络连接】 【在vmware上安装的话&#xff0c;网络配置如下】【在vm里配置选择nat或者桥接即可】 【国内源配置】&…

软件I2C

软件I2C 注意&#xff1a; SDA&#xff08;串行数据线&#xff09;和SCL&#xff08;串行时钟线&#xff09;都是双向I/O线&#xff0c;接口电路为开漏输出。需通过上拉电阻接电源VCC。 软件I2C说明 说明&#xff0c;有的单片机没有硬件I2C的功能&#xff0c;或者因为电路设计…

C++性能测试工具——Vtune的使用

一、Intel Vtune的安装 在前面初步认识了一下几个性能的测试工具&#xff0c;本篇重点介绍一下Intel VTune Profiler&#xff0c;VTune是一个强大的性能分析工具&#xff0c;它属于Intel oneAPI工具包中工具的一种。VTune的安装只介绍在Linux平台下的场景&#xff08;Windows安…

互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-6

互联网大厂Java求职面试&#xff1a;优惠券服务架构设计与AI增强实践-6 场景设定&#xff1a;技术总监张总坐在会议室里&#xff0c;郑薪苦带着自信的微笑走了进来。今天他们要围绕优惠券服务的架构设计及如何结合AI进行增强展开讨论。 第一轮面试&#xff1a;基础架构设计 …