深度学习里面有没有支持Multi-GPU-DDP模式的pytorch模型训练代码模版?

PyTorch Lightning多GPU训练指南:从单卡到ddp分布式实战(含代码示例) 本文详细介绍了PyTorch Lightning在多GPU训练中的实战应用,从基础配置到分布式优化策略。通过代码示例和性能分析,帮助开发者高效利用GPU资源,掌握DP、DDP等并行策略,并优化混合精度训练和分布式性能。特别适合深度学习工程师和研究人员提升模型训练效率。 阅读详情

一般pytorch需要用户自定义训练循环,可以说有1000个pytorch用户就有1000种训练代码风格。

从实用角度讲,一个优秀的训练循环应当具备以下特点。

代码简洁易懂 【模块化、易修改、short-enough】

支持常用功能 【进度条、评估指标、early-stopping】

经过反复斟酌测试,我精心设计了仿照keras风格的pytorch训练循环,完全满足以上条件。

该方案在知乎受到许多读者喜爱,目前为止获得了超过600个赞。

知乎完整回答链接:《深度学习里面,请问有写train函数的模板吗?》

https://www.zhihu.com/question/523869554/answer/2633479163

以上pytorch模型训练模版也是我开源的一个pytorch模型训练工具 torchkeras库的核心代码。

https://github.com/lyhue1991/torchkeras

铛铛铛铛,torchkeras加入新功能啦。

最近,通过引入HuggingFace的accelerate库的功能,torchkeras进一步支持了 多GPU的DDP模式和TPU设备上的模型训练。

这里给大家演示一下,非常强大和丝滑。

公众号算法美食屋后台回复关键词:训练模版,获取本文B站视频演示和notebook源代码。

aa4b5f4d331037e6acf45c011de2b45a.png

#从git安装最新的accelerate仓库
!pip install git+https://github.com/huggingface/accelerate

一,torchkeras源码解析

torchkeras的核心代码在 下面这个文件中。

https://github.com/lyhue1991/torchkeras/blob/master/torchkeras/kerasmodel.py

import sys,datetime
from tqdm import tqdm 
from copy import deepcopy
import numpy as np
import pandas as pd
import torch
from accelerate import Accelerator

def colorful(obj,color="red", display_type="plain"):
    color_dict = {"black":"30", "red":"31", "green":"32", "yellow":"33",
                    "blue":"34", "purple":"35","cyan":"36",  "white":"37"}
    display_type_dict = {"plain":"0","highlight":"1","underline":"4",
                "shine":"5","inverse":"7","invisible":"8"}
    s = str(obj)
    color_code = color_dict.get(color,"")
    display  = display_type_dict.get(display_type,"")
    out = '\033[{};{}m'.format(display,color_code)+s+'\033[0m'
    return out 

class StepRunner:
    def __init__(self, net, loss_fn, accelerator, stage = "train", metrics_dict = None, 
                 optimizer = None, lr_scheduler = None
                 ):
        self.net,self.loss_fn,self.metrics_dict,self.stage = net,loss_fn,metrics_dict,stage
        self.optimizer,self.lr_scheduler = optimizer,lr_scheduler
        self.accelerator = accelerator
    
    def __call__(self, batch):
        features,labels = batch 
        
        #loss
        preds = self.net(features)
        loss = self.loss_fn(preds,labels)

        #backward()
        if self.optimizer is not None and self.stage=="train":
            self.accelerator.backward(loss)
            self.optimizer.step()
            if self.lr_scheduler is not None:
                self.lr_scheduler.step()
            self.optimizer.zero_grad()
        all_preds = self.accelerator.gather(preds)
        all_labels = self.accelerator.gather(labels)
        all_loss = self.accelerator.gather(loss).sum()
            
        #metrics
        step_metrics = {self.stage+"_"+name:metric_fn(all_preds, all_labels).item() 
                        for name,metric_fn in self.metrics_dict.items()}
        
        return all_loss.item(),step_metrics

class EpochRunner:
    def __init__(self,steprunner):
        self.steprunner = steprunner
        self.stage = steprunner.stage
        self.steprunner.net.train() if self.stage=="train" else self.steprunner.net.eval()
        self.accelerator = self.steprunner.accelerator
        
    def __call__(self,dataloader):
        total_loss,step = 0,0
        loop = tqdm(enumerate(dataloader), 
                    total =len(dataloader),
                    file=sys.stdout,
                    disable=not self.accelerator.is_local_main_process,
                    ncols = 100
                   )
        
        for i, batch in loop: 
            if self.stage=="train":
                loss, step_metrics = self.steprunner(batch)
            else:
                with torch.no_grad():
                    loss, step_metrics = self.steprunner(batch)
                    
            step_log = dict({self.stage+"_loss":loss},**step_metrics)
            total_loss += loss
            step+=1
            
            if i!=len(dataloader)-1:
                loop.set_postfix(**step_log)
            else:
                epoch_loss = total_loss/step
                epoch_metrics = {self.stage+"_"+name:metric_fn.compute().item() 
                                 for name,metric_fn in self.steprunner.metrics_dict.items()}
                epoch_log = dict({self.stage+"_loss":epoch_loss},**epoch_metrics)
                loop.set_postfix(**epoch_log)
                for name,metric_fn in self.steprunner.metrics_dict.items():
                    metric_fn.reset()
        return epoch_log
    
class KerasModel(torch.nn.Module):
    def __init__(self,net,loss_fn,metrics_dict=None,optimizer=None,lr_scheduler = None):
        super().__init__()
        self.net,self.loss_fn = net, loss_fn
        self.metrics_dict = torch.nn.ModuleDict(metrics_dict) 
        self.optimizer = optimizer if optimizer is not None else torch.optim.Adam(
            self.net.parameters(), lr=1e-3)
        self.lr_scheduler = lr_scheduler

    def forward(self, x):
        return self.net.forward(x)

    def fit(self, train_data, val_data=None, epochs=10,ckpt_path='checkpoint.pt',
            patience=5, monitor="val_loss", mode="min", mixed_precision='no'):
        
        accelerator = Accelerator(mixed_precision=mixed_precision)
        device = str(accelerator.device)
        device_type = '🐌'  if 'cpu' in device else '⚡️'
        accelerator.print(colorful("<<<<<< "+device_type +" "+ device +" is used >>>>>>"))
    
        net,optimizer,lr_scheduler= accelerator.prepare(
            self.net,self.optimizer,self.lr_scheduler)
        train_dataloader,val_dataloader = accelerator.prepare(train_data,val_data)
        
        loss_fn = self.loss_fn
        if isinstance(loss_fn,torch.nn.Module):
            loss_fn.to(accelerator.device)
        metrics_dict = self.metrics_dict 
        metrics_dict.to(accelerator.device)
        
        history = {}
        
        for epoch in range(1, epochs+1):

            nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            accelerator.print("\n"+"=========="*8 + "%s"%nowtime)
            accelerator.print("Epoch {0} / {1}".format(epoch, epochs)+"\n")

            # 1,train -------------------------------------------------  
            train_step_runner = StepRunner(
                    net = net,
                    loss_fn = loss_fn,
                    accelerator = accelerator,
                    stage="train",
                    metrics_dict=deepcopy(metrics_dict),
                    optimizer = optimizer,
                    lr_scheduler = lr_scheduler
            )

            train_epoch_runner = EpochRunner(train_step_runner)
            train_metrics = train_epoch_runner(train_dataloader)
            for name, metric in train_metrics.items():
                history[name] = history.get(name, []) + [metric]

            # 2,validate -------------------------------------------------
            if val_dataloader:
                val_step_runner = StepRunner(
                    net = net,
                    loss_fn = loss_fn,
                    accelerator = accelerator,
                    stage="val",
                    metrics_dict= deepcopy(metrics_dict)
                )
                val_epoch_runner = EpochRunner(val_step_runner)
                with torch.no_grad():
                    val_metrics = val_epoch_runner(val_dataloader)

                val_metrics["epoch"] = epoch
                for name, metric in val_metrics.items():
                    history[name] = history.get(name, []) + [metric]

            # 3,early-stopping -------------------------------------------------
            accelerator.wait_for_everyone()
            arr_scores = history[monitor]
            best_score_idx = np.argmax(arr_scores) if mode=="max" else np.argmin(arr_scores)

            if best_score_idx==len(arr_scores)-1:
                unwrapped_net = accelerator.unwrap_model(net)
                accelerator.save(unwrapped_net.state_dict(),ckpt_path)
                accelerator.print(colorful("<<<<<< reach best {0} : {1} >>>>>>".format(monitor,
                     arr_scores[best_score_idx])))

            if len(arr_scores)-best_score_idx>patience:
                accelerator.print(colorful("<<<<<< {} without improvement in {} epoch, early stopping >>>>>>".format(
                    monitor,patience)))
                break 
                
        if accelerator.is_local_main_process:
            self.net.load_state_dict(torch.load(ckpt_path))
            dfhistory = pd.DataFrame(history)
            accelerator.print(dfhistory)
            return dfhistory 
    
    @torch.no_grad()
    def evaluate(self, val_data):
        accelerator = Accelerator()
        self.net = accelerator.prepare(self.net)
        val_data = accelerator.prepare(val_data)
        if isinstance(self.loss_fn,torch.nn.Module):
            self.loss_fn.to(accelerator.device)
        self.metrics_dict.to(accelerator.device)
        
        val_step_runner = StepRunner(net = self.net,stage="val",
                    loss_fn = self.loss_fn,metrics_dict=deepcopy(self.metrics_dict),
                    accelerator = accelerator)
        val_epoch_runner = EpochRunner(val_step_runner)
        val_metrics = val_epoch_runner(val_data)
        return val_metrics

以上该训练循环满足我所设想的全部特性。

模块化:自下而上分成 StepRunner, EpochRunner, 和KerasModel 三级,结构清晰明了。

易修改:如果输入和label形式有差异(例如,输入可能组装成字典,或者有多个输入),仅需更改StepRunner就可以了,后面无需改动,非常灵活。

short-enough: 全部训练代码不到200行。

支持进度条:通过tqdm引入。

支持评估指标:可以引入torchmetrics库中的指标,也可以自定义评估指标。

支持early-stopping:在fit时候指定 monitor、mode、patience即可。

一,使用 CPU/单GPU 训练你的pytorch模型

当系统存在GPU时,torchkeras 会自动使用GPU训练你的pytorch模型,否则会使用CPU训练模型。

在我们的范例中,单GPU训练的话,一个Epoch大约是18s。

!pip install -U torchkeras
import torch
from torch import nn 
import torchvision 
from torchvision import transforms
import torchmetrics 
from torchkeras import KerasModel 

### 1,准备数据

def create_dataloaders(batch_size=1024):
    transform = transforms.Compose([transforms.ToTensor()])

    ds_train = torchvision.datasets.MNIST(root="./mnist/",train=True,download=True,transform=transform)
    ds_val = torchvision.datasets.MNIST(root="./mnist/",train=False,download=True,transform=transform)

    dl_train =  torch.utils.data.DataLoader(ds_train, batch_size=batch_size, shuffle=True,
                                            num_workers=2,drop_last=True)
    dl_val =  torch.utils.data.DataLoader(ds_val, batch_size=batch_size, shuffle=False, 
                                          num_workers=2,drop_last=True)
    return dl_train,dl_val

dl_train,dl_val = create_dataloaders(batch_size=1024)

### 2,定义模型

def create_net():
    net = nn.Sequential()
    net.add_module("conv1",nn.Conv2d(in_channels=1,out_channels=512,kernel_size = 3))
    net.add_module("pool1",nn.MaxPool2d(kernel_size = 2,stride = 2)) 
    net.add_module("conv2",nn.Conv2d(in_channels=512,out_channels=256,kernel_size = 5))
    net.add_module("pool2",nn.MaxPool2d(kernel_size = 2,stride = 2))
    net.add_module("dropout",nn.Dropout2d(p = 0.1))
    net.add_module("adaptive_pool",nn.AdaptiveMaxPool2d((1,1)))
    net.add_module("flatten",nn.Flatten())
    net.add_module("linear1",nn.Linear(256,128))
    net.add_module("relu",nn.ReLU())
    net.add_module("linear2",nn.Linear(128,10))
    return net 

net = create_net() 


### 3,训练模型

loss_fn = nn.CrossEntropyLoss() 
metrics_dict = {'acc':torchmetrics.Accuracy(task='multiclass',num_classes=10)}

optimizer = torch.optim.AdamW(params=net.parameters(), lr=1e-4)
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(
    optimizer=optimizer,T_0=5)

model = KerasModel(net,loss_fn,metrics_dict,optimizer,lr_scheduler)
dfhistory = model.fit(train_data = dl_train,
    val_data = dl_val,
    epochs=5,
    ckpt_path='checkpoint.pt',
    patience=2,
    monitor='val_acc',
    mode='max',
    mixed_precision='no')

### 4,评估模型
model.net.load_state_dict(torch.load('checkpoint.pt'))
print(model.evaluate(dl_val))

二,使用多GPU DDP模式训练你的pytorch模型

Kaggle中右边settings 中的 ACCELERATOR选择 GPU T4x2。

1,设置config

import os
from accelerate.utils import write_basic_config
write_basic_config() # Write a config file
os._exit(0) # Restart the notebook to reload info from the latest config file
# %load /root/.cache/huggingface/accelerate/default_config.yaml
{
  "compute_environment": "LOCAL_MACHINE",
  "deepspeed_config": {},
  "distributed_type": "MULTI_GPU",
  "downcast_bf16": false,
  "fsdp_config": {},
  "machine_rank": 0,
  "main_process_ip": null,
  "main_process_port": null,
  "main_training_function": "main",
  "mixed_precision": "no",
  "num_machines": 1,
  "num_processes": 2,
  "use_cpu": false
}
# or answer some question to create a config
#!accelerate config

2,训练代码

在我们的范例中,双GPU使用DDP模式训练的话,一个Epoch大约是12s。

import torchvision 
from torchvision import transforms
from torch import nn 
import torch
import torchmetrics 
from accelerate import notebook_launcher
from torchkeras import KerasModel 

### 1,准备数据

def create_dataloaders(batch_size=1024):
    transform = transforms.Compose([transforms.ToTensor()])

    ds_train = torchvision.datasets.MNIST(root="./minist/",train=True,download=True,transform=transform)
    ds_val = torchvision.datasets.MNIST(root="./minist/",train=False,download=True,transform=transform)

    dl_train =  torch.utils.data.DataLoader(ds_train, batch_size=batch_size, shuffle=True,
                                            num_workers=2,drop_last=True)
    dl_val =  torch.utils.data.DataLoader(ds_val, batch_size=batch_size, shuffle=False, 
                                          num_workers=2,drop_last=True)
    return dl_train,dl_val

dl_train,dl_val = create_dataloaders(batch_size=1024)

### 2,定义模型

def create_net():
    net = nn.Sequential()
    net.add_module("conv1",nn.Conv2d(in_channels=1,out_channels=512,kernel_size = 3))
    net.add_module("pool1",nn.MaxPool2d(kernel_size = 2,stride = 2)) 
    net.add_module("conv2",nn.Conv2d(in_channels=512,out_channels=256,kernel_size = 5))
    net.add_module("pool2",nn.MaxPool2d(kernel_size = 2,stride = 2))
    net.add_module("dropout",nn.Dropout2d(p = 0.1))
    net.add_module("adaptive_pool",nn.AdaptiveMaxPool2d((1,1)))
    net.add_module("flatten",nn.Flatten())
    net.add_module("linear1",nn.Linear(256,128))
    net.add_module("relu",nn.ReLU())
    net.add_module("linear2",nn.Linear(128,10))
    return net 

net = create_net() 


### 3,训练模型

loss_fn = nn.CrossEntropyLoss() 
metrics_dict = {'acc':torchmetrics.Accuracy(task='multiclass',num_classes=10)}

optimizer = torch.optim.AdamW(params=net.parameters(), lr=1e-4)
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(
    optimizer=optimizer,T_0=5)

model = KerasModel(net,loss_fn,metrics_dict,optimizer,lr_scheduler)

ckpt_path = 'checkpoint.pt'
args = dict(train_data = dl_train,
        val_data = dl_val,
        epochs=5,
        ckpt_path= ckpt_path,
        patience=2,
        monitor='val_acc',
        mode='max',
        mixed_precision='no').values()

notebook_launcher(model.fit, args, num_processes=2)

### 4,评估模型
model.net.load_state_dict(torch.load('checkpoint.pt'))
print(model.evaluate(dl_val))
17/12

三,使用TPU加速你的pytorch模型

Kaggle中右边settings 中的 ACCELERATOR选择 TPU v3-8。

1,安装torch_xla

#安装torch_xla支持
!pip uninstall -y torch torch_xla 
!pip install torch==1.8.2+cpu -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html
!pip install cloud-tpu-client==0.10 https://storage.googleapis.com/tpu-pytorch/wheels/torch_xla-1.8-cp37-cp37m-linux_x86_64.whl
#从git安装最新的accelerate仓库
!pip install git+https://github.com/huggingface/accelerate
!pip install -U torchkeras 
!pip install -U torchmetrics
#检查是否成功安装 torch_xla 
import torch_xla

2,训练代码

torchmetrics库和TPU兼容性不太好,可以去掉metrics_dict进行训练。

import torch
from torch import nn 
import torchvision 
from torchvision import transforms
from accelerate import notebook_launcher

from torchkeras import KerasModel 

### 1,准备数据

def create_dataloaders(batch_size=1024):
    transform = transforms.Compose([transforms.ToTensor()])

    ds_train = torchvision.datasets.MNIST(root="./minist/",train=True,download=True,transform=transform)
    ds_val = torchvision.datasets.MNIST(root="./minist/",train=False,download=True,transform=transform)

    dl_train =  torch.utils.data.DataLoader(ds_train, batch_size=batch_size, shuffle=True,
                                            num_workers=2,drop_last=True)
    dl_val =  torch.utils.data.DataLoader(ds_val, batch_size=batch_size, shuffle=False, 
                                          num_workers=2,drop_last=True)
    return dl_train,dl_val

dl_train,dl_val = create_dataloaders(batch_size=1024)

### 2,定义模型

def create_net():
    net = nn.Sequential()
    net.add_module("conv1",nn.Conv2d(in_channels=1,out_channels=512,kernel_size = 3))
    net.add_module("pool1",nn.MaxPool2d(kernel_size = 2,stride = 2)) 
    net.add_module("conv2",nn.Conv2d(in_channels=512,out_channels=256,kernel_size = 5))
    net.add_module("pool2",nn.MaxPool2d(kernel_size = 2,stride = 2))
    net.add_module("dropout",nn.Dropout2d(p = 0.1))
    net.add_module("adaptive_pool",nn.AdaptiveMaxPool2d((1,1)))
    net.add_module("flatten",nn.Flatten())
    net.add_module("linear1",nn.Linear(256,128))
    net.add_module("relu",nn.ReLU())
    net.add_module("linear2",nn.Linear(128,10))
    return net 

net = create_net() 

### 3,训练模型

loss_fn = nn.CrossEntropyLoss() 

optimizer = torch.optim.AdamW(params=net.parameters(), lr=1e-4)
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(
    optimizer=optimizer,T_0=5)

model = KerasModel(net,loss_fn,None,optimizer,lr_scheduler)

from accelerate import notebook_launcher

ckpt_path = 'checkpoint.pt'
args = dict(train_data = dl_train,
        val_data = dl_val,
        epochs=5,
        ckpt_path= ckpt_path,
        patience=2,
        monitor='val_loss',
        mode='min',
        mixed_precision='no').values()

notebook_launcher(model.fit, args, num_processes=8)

d07969cf19aecf0b3af8f85bd255d86a.png

深度学习部署实战:PyTorch训练与TensorRT推理优化全解析 本文探讨了PyTorch与TensorRT的协同工作流程,展示了如何将PyTorch训练的深度学习模型高效部署到TensorRT推理引擎。PyTorch凭借动态计算图和丰富生态成为主流开发框架,而TensorRT通过图层融合、精度优化和内核调优显著提升推理性能。文章详细介绍了从PyTorch模型导出ONNX到TensorRT优化的完整流程,并提供了C++跨平台部署的工程实践方案。性能测试显示,TensorRT相比原生PyTorch推理可获得3-4倍加速,验证了该方案在生产环境中的显著优势。 阅读详情

相关推荐

YOLOv5训练加速实战:从单卡优化到多卡DDP部署全解析

在深度学习模型训练中,GPU资源的高效利用是提升训练速度的核心。其原理在于通过并行计算架构,将大规模矩阵运算分配到多个计算单元,从而显著缩短迭代时间。这一技术的核心价值在于能够将训练周期从天级缩短到小时级,极大提升了算法迭代和产品落地的效率。在目标检测、图像分类等计算机视觉任务中,训练加速技术已成为工程实践的标配。具体到YOLOv5框架,通过**混合精度训练(AMP)** 和**分布式数据并行(DDP)** 等关键技术,可以充分挖掘从单卡到多卡集群的硬件潜力。AMP利用Tensor Core进行FP16计算

weixin_34296641的博客 488

pytorch单精度、半精度、混合精度、单卡、多卡(DP / DDP)、FSDP、DeepSpeed模型训练

pytorch单精度、半精度、混合精度、单卡、多卡(DP / DDP)、FSDP、DeepSpeed(环境没搞起来)模型训练代码,并对比不同方法的训练速度以及GPU内存的使用

胖胖大海的博客 7009

Accelerate分布式训练实战:零修改迁移单卡PyTorch模型

分布式训练是深度学习工程化的核心能力,其本质是通过多设备协同提升模型训练效率与规模上限。原理上依赖数据并行、梯度同步与混合精度等关键技术,技术价值在于降低显存压力、加速收敛、支撑大模型落地。典型应用场景包括多卡GPU训练、跨机集群微调、生产环境CI/CD集成及Hugging Face生态适配。本文聚焦PyTorch原生分布式封装工具Accelerate,围绕‘零代码侵入’和‘自动设备管理’两大热词,详解如何不改训练循环即可实现单卡→多卡→多机的平滑演进,覆盖初始化配置、prepare机制、backward替

weixin_33910460的博客 630

LLM单机多卡训练

安装nvcc,如果不安装nvcc直接安装deepspeed会出错。在LLaMAfactory里写好训练脚本,相比单卡要多一行指令,安装 LLaMA-Factory。

xdg15294969271的博客 1117

PyTorch GPU环境配置全攻略:从驱动到多卡并行训练

在深度学习实践中,GPU加速是提升模型训练效率的核心技术。其原理在于利用GPU的并行计算架构,通过CUDA平台和cuDNN加速库,将计算密集型任务从CPU卸载到GPU上执行,从而大幅缩短训练时间。这项技术的价值在于,它使得复杂神经网络的训练从数周缩短到数天甚至数小时,成为人工智能落地的关键支撑。在应用场景上,无论是计算机视觉、自然语言处理还是科学计算,GPU加速都不可或缺。本文聚焦于PyTorch框架下的GPU环境配置,详细解析了NVIDIA驱动、CUDA工具包、cuDNN库与PyTorch版本之间的兼容性

weixin_34364071的博客 358

accelerate并行计算:训练环境和训练参数的配置字典

【代码】accelerate并行计算:训练环境和训练参数的配置字典。

ZhangJiqun&191cm&85kg 527

深度学习里面,请问有写train函数的模板吗?

知乎热门问题:深度学习里面,请问有写train函数的模板吗?以下是 知乎用户吃货本货 的回答。老师,这题我会。一般pytorch需要用户自定义训练循环,可以说有1000个pytorch用户就有1000种训练代码风格。从实用角度讲,一个优秀的训练循环应当具备以下特点。代码简洁易懂 【模块化、易修改、short-enough】支持常用功能 【进度条、评估指标、early-stopping】经过反复斟...

Python_Ai_Road的博客 986

手把手教你用运放和基准源,把±10V信号变成ADC能吃的0-4V(附完整计算过程)

本文详细介绍了如何利用OP07运放和REF5040基准源设计工业级信号调理电路,将±10V传感器信号转换为0-4V ADC可接受范围。通过七步流程,包括需求分析、元器件选型、电路设计、理论计算、PCB布局、实测验证与性能优化,帮助工程师解决信号不匹配问题,提升系统精度与稳定性。

weixin_28731223的博客 468

关于diffusion的accelerate的配置

【代码】关于diffusion的accelerate的配置。

vivi_cin的博客 496

机器人控制入门

机器人控制入门 对于工科领域来说,脱离实践的学习都是肤浅的,对于控制这种强调经验的技术更是如此。如果去问一个程序员怎么学习一块技术,他必然让你去多编程。机器人领域也是。如果想把基本功打扎实,那么实践更是必不可少了。 机器人控制有三个元素:控制器(算法),执行器(电机),传感器; 控制的本质就是将规划系统的指令作为输入信息,将传感器探测得到的状态信息和导航系统的定位

彼岸花 1万+

手把手教你理解ARM SoC中的PPU:电源管理IP的配置与实战避坑指南

本文深入解析ARM SoC中的PPU(Power Policy Unit)电源管理IP,提供详细的配置指南与实战避坑技巧。从PPU基础架构、寄存器配置到与PCSM的协同工作,全面介绍如何优化电源管理策略,解决常见配置误区,并分享高级调试与性能优化方法,助力工程师提升低功耗SoC设计效率。

weixin_28693447的博客 481

pytorch训练之数据并行技术

DDP比DP更快、更灵活。DDP所做的基本事情是将模型复制到多个gpu上,从它们收集梯度,平均梯度以更新模型,然后在所有K个进程上同步模型(数据并行)。

qq_35215756的博客 1267

Kali实战:LAMPSecurity CTF5靶场渗透全流程(附详细漏洞利用步骤)

本文详细解析了Kali Linux在LAMPSecurity CTF5靶场渗透中的全流程,包括靶场环境搭建、Web应用漏洞挖掘、横向移动与权限提升等关键步骤。通过实战案例演示了如何利用NanoCMS漏洞获取系统权限,并提供了详细的防御措施与加固建议,帮助安全人员提升渗透测试技能。

weixin_29230901的博客 212

PyTorch分布式训练入门:多GPU并行计算实践指南

深入掌握PyTorch分布式训练核心技能,从DDP原理到容器化部署,手把手实现高效多GPU并行计算。涵盖数据加载优化、NCCL通信、CUDA加速与远程开发方案,帮助开发者构建稳定可扩展的深度学习训练流程。

weixin_35906794的博客 966

在UI界面中播放视频_unity基础开发教程

之前我写过一篇在场景中播放视频的文章,但是在开发中有时候也会在UI的界面中播放视频,这期我们做一下在UI的界面中播放视频。操作步骤比较简单,到这里就完成了,如果有问题的话可以在评论区留言,下期见,拜拜!

为者常成,行者常至! 2014

接口电路设计的关键要点

接口电路设计是嵌入式硬件开发的核心环节,本文系统阐述了五大关键设计要点:1)电平匹配技术,详细分析了3.3V/5V系统互连方案及转换电路计算;2)阻抗匹配原理,包括高速信号反射机制及差分信号处理;3)滤波与去耦设计,提出多级电容配置和"先电容后过孔"布局原则;4)接地设计规范,重点说明模拟/数字地分离及高速信号回流路径;5)防护电路设计,涵盖防反接、过流保护及ESD防护方案。文章通过具体计算公式、器件选型指南和布局技巧,为接口电路设计提供了系统化的解决方案,并附有设计检查清单和典型问题分

weiyvyy的博客 454

PyTorch-CUDA-v2.9镜像支持多任务学习Multi-Task Learning

借助PyTorch-CUDA-v2.9容器镜像,开发者可快速搭建稳定、高性能的多任务学习训练环境。该镜像预集成CUDA、cuDNN与PyTorch 2.9,避免版本冲突,支持混合精度和分布式训练,显著提升开发效率与团队协作一致性。

weixin_42471823的博客 772

通信模组性能调优

本文介绍了高通平台通信模组性能调优的方法,主要包括硬件加速技术和CPU负载优化。针对CPU负载优化,提出了内核RPS/RFS功能启用、网卡队列调整、中断均衡、CPU性能模式设置等措施。同时建议关闭热管理并加强散热,调整TCP接收/发送缓存大小以解决TCP异常报文问题。这些优化手段可显著提高整机吞吐率测试中的网络性能表现。

四儿家的小祖宗的博客 1360

分布式训练实战:gh_mirrors/yo/yolo_research多GPU环境配置与性能优化

在计算机视觉领域,深度学习模型的训练往往需要大量的计算资源。gh_mirrors/yo/yolo_research作为一个基于YOLO系列(yolov5\yolov7\yolov8)的高级项目,集成了目标检测、姿态估计、分类和分割等多种功能,同时还包含了SwintransformV2和Attention系列等改进研究。为了加速模型训练过程,充分利用多GPU资源进行分布式训练是至关重要的。本文将详细

gitblog_00064的博客 408

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 566

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

YOLO11多GPU训练教程:提升效率的正确姿势

本文介绍了如何在星图GPU平台上自动化部署YOLO11镜像,实现多GPU并行训练目标检测模型。通过简单配置即可启用分布式训练,显著提升训练效率,适用于智能安防、自动驾驶等场景中的实时物体识别任务。

weixin_42471823的博客 710

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用Miniconda安装accelerate进行多GPU训练

通过Miniconda创建隔离环境,结合Hugging Face的accelerate库,实现无需修改代码的多GPU分布式训练。从环境配置到启动脚本,全程简化深度学习工程复杂度,支持混合精度、梯度累积和跨平台复现,显著提升开发效率与协作一致性。

weixin_33256096的博客 934

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

PyTorch-CUDA-v2.6镜像是否支持CLIP模型训练?图文匹配任务验证

通过实际图文匹配任务验证,PyTorch-CUDA-v2.6镜像不仅能运行CLIP模型,还能稳定支持混合精度、多卡并行等关键训练特性。结合Docker环境隔离与GPU资源透传,显著提升多模态模型开发效率,避免常见环境兼容性问题。

weixin_42124497的博客 965

双机双卡RDMA分布式训练yolov5(yolov5+pytorch+DDP+NCCL+RDMA全栈解析)

双机双卡RDMA分布式训练yolov5(yolov5+pytorch+DDP+NCCL+RDMA全栈解析)

Hello Mr.Z的博客 218

Yolov13分布式训练方案:多GPU并行实现256 batchsize训练

在目标检测模型训练过程中,随着模型复杂度提升(如YOLOv13引入的Hypergraph-based Adaptive Correlation Enhancement机制),单GPU训练面临显存瓶颈,难以支持大批次(batchsize)训练。本文将详细介绍如何通过多GPU并行技术,在YOLOv13中实现256 batchsize的高效训练,解决显存不足问题并提升训练速度。 ## 环境准备与依赖安...

gitblog_00585的博客 856

PyTorch 中 DistributedDataParallel 使用笔记

在pytorch中的多GPU训练一般有2种DataParallel和DistributedDataParallel,DataParallel是最简单的的单机多卡实现,但是它使用多线程模型,并不能够在多机多卡的环境下使用,所以本文将介绍DistributedDataParallel,DDP 基于使用多进程而不是使用多线程的DP,并且存在GIL争用问题,并且可以扩充到多机多卡的环境,所以它是分布式多GPU训练的首选。

人无远虑,必有近忧 1117
上一篇: 速度为单GPU1.6倍,kaggle双GPU(ddp模式)加速pytorch攻略
下一篇: 30分钟吃掉wandb模型训练可视化
算法美食屋
博客等级 码龄9年 2万+粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值