Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyTorch:无法使用Gloo后端_Pytorch - Fatal编程技术网

PyTorch:无法使用Gloo后端

PyTorch:无法使用Gloo后端,pytorch,Pytorch,我试图使用Pytork以(多CPU)分布式方式训练模型。然而,当我运行代码时,我得到了以下错误消息 运行时错误:Gloo后端不可用;尝试在/opt/conda/conda bld/pytorch-cpu_1544218188686/work/torch/lib/THD/process_group/General.cpp:20处使用Gloo支持重新编译THD包 我在自己的Macbook和大学的slurm集群(Red Hat 4.8.5-16)上都试过。Python版本是3.6。我使用命令conda

我试图使用Pytork以(多CPU)分布式方式训练模型。然而,当我运行代码时,我得到了以下错误消息

运行时错误:Gloo后端不可用;尝试在/opt/conda/conda bld/pytorch-cpu_1544218188686/work/torch/lib/THD/process_group/General.cpp:20处使用Gloo支持重新编译THD包

我在自己的Macbook和大学的slurm集群(Red Hat 4.8.5-16)上都试过。Python版本是3.6。我使用命令conda install PyTorch cpu torchvision cpu-c PyTorch安装了PyTorch(该版本不支持CUDA)

我想知道是否必须从源代码处重新安装PyTorch或手动安装Gloo。我有点困惑,因为根据PyTorch的文件

自版本0.2.0以来,Gloo后端自动包含在PyTorch的预编译二进制文件中

该代码正是在

导入操作系统
进口火炬
导入torch.distributed.distributed作为dist不推荐使用
导入torch.nn作为nn
导入torch.nn.功能为F
将torch.optim导入为optim
从数学导入单元
从随机导入随机
从torch.MULTIPROSSING导入过程
从torch.autograd导入变量
从torchvision导入数据集,转换
类分区(对象):
“”“类似于数据集的对象,但仅访问其子集。”“”
定义初始化(自身、数据、索引):
self.data=数据
self.index=索引
定义(自我):
返回长度(自索引)
定义uu获取项目uu(自身,索引):
data_idx=self.index[index]
返回self.data[data_idx]
类DataPartitioner(对象):
“”“将数据集划分为不同的数据块。”“”
定义初始化(self,data,size=[0.7,0.2,0.1],seed=1234):
self.data=数据
self.partitions=[]
rng=随机()
种子(种子)
数据长度=长度(数据)
索引=[x代表范围内的x(0,数据长度)]
随机排列(索引)
对于压裂尺寸:
零件长度=整数(分形*数据长度)
self.partitions.append(索引[0:part\u len])
索引=索引[部分内容:]
def使用(自身、分区):
返回分区(self.data,self.partitions[Partition])
类别网络(nn.模块):
“”“网络体系结构。”“”
定义初始化(自):
超级(网络,自我)。\uuuu初始化
self.conv1=nn.Conv2d(1,10,内核大小=5)
self.conv2=nn.Conv2d(10,20,内核大小=5)
self.conv2_drop=nn.Dropout2d()
self.fc1=nn.线性(320,50)
self.fc2=nn.线性(50,10)
def前进(自身,x):
x=F.relu(F.max_pool2d(self.conv1(x),2))
x=F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)),2))
x=x.view(-1320)
x=F.relu(自fc1(x))
x=F.辍学(x,培训=自我培训)
x=自身.fc2(x)
返回F.log\u softmax(x)
def partition_dataset():
“分区列表”
dataset=datasets.MNIST(
“/数据”,
火车=真的,
下载=真,
transform=transforms.Compose([
transforms.ToTensor(),
规范化((0.1307,),(0.3081,))
]))
大小=距离获取世界大小()
bsz=int(128/浮点数(大小))
分区大小=[1.0/范围内的大小(大小)]
分区=数据分区器(数据集、分区大小)
partition=partition.use(dist.get\u rank())
列车组=torch.utils.data.DataLoader(
分区,批处理大小=bsz,洗牌=True)
返回列车组,bsz
def平均_梯度(型号):
“”“梯度平均。”“”
大小=浮动(距离获取世界大小()
对于model.parameters()中的参数:
dist.all\u reduce(param.grad.data,op=dist.reduce\u op.SUM,group=0)
param.grad.data/=大小
def运行(等级、大小):
“”“分布式同步SGD示例”“”
手电筒。手动种子(1234)
序列集,bsz=分区数据集()
model=Net()
模型
#model=model.cuda(排名)
optimizer=optim.SGD(model.parameters(),lr=0.01,momentum=0.5)
num_batches=ceil(len(train_set.dataset)/float(bsz))
对于范围内的历元(10):
历元损耗=0.0
对于数据,列车组中的目标:
数据,目标=变量(数据),变量(目标)
#数据,目标=变量(data.cuda(rank)),变量(target.cuda(rank))
optimizer.zero_grad()
输出=模型(数据)
损失=F.nll\U损失(输出、目标)
历元损失+=损失数据项()
loss.backward()
平均坡度(模型)
optimizer.step()
打印('Rank',
区域获取秩(),'历元',历元':',
历元(损失/批量)
def init_进程(秩、大小、fn、后端='gloo'):
“”“初始化分布式环境。”“”
操作系统环境['MASTER_ADDR']='127.0.0.1'
操作系统环境['MASTER_PORT']='29500'
dist.init\u进程组(后端,秩=秩,世界大小=大小)
fn(级别、大小)
如果名称=“\uuuuu main\uuuuuuuu”:
尺寸=2
进程=[]
对于范围内的排名(大小):
p=Process(target=init_进程,args=(秩、大小、运行))
p、 开始()
进程。追加(p)
对于流程中的p:
p、 加入