随着c ++ 11的引入,简单的可复制性已经变得非常相关.最值得注意的是使用'std :: atomic'.基础很简单.如果出现以下情况,课程foo可以轻易复制:
foo* src = new foo();
foo* dest = malloc(sizeof(foo));
memcpy(dest, src, sizeof(foo));
Run Code Online (Sandbox Code Playgroud)
具有相同的效果:
foo* src = new foo();
foo* dest = new foo(src);
Run Code Online (Sandbox Code Playgroud)
因此,复制内存的对象与复制构造函数具有相同的效果.然而,当然,这是一个问题.不仅有复制构造函数.但也移动构造函数,移动赋值运算符.等等.
std :: is_trivially_copyable可用于测试对象是否可以轻易复制.因此,通过反复试验,可以使对象易于复制.
但当然,一套定义明确的规则会更好一些:).所以我的要求.
我必须在使用不同设备的不同类型的 pytorch 模型上堆叠一些我自己的层。
例如,A是cuda模型,B是cpu模型(但在获得设备类型之前我不知道)。那么新模型分别是C和D,其中
class NewModule(torch.nn.Module):
def __init__(self, base):
super(NewModule, self).__init__()
self.base = base
self.extra = my_layer() # e.g. torch.nn.Linear()
def forward(self,x):
y = self.base(x)
z = self.extra(y)
return z
...
C = NewModule(A) # cuda
D = NewModule(B) # cpu
Run Code Online (Sandbox Code Playgroud)
但是我必须继续前进base,并extra在相同的设备,即base和extra的C是CUDA模型和D的是CPU的型号。所以我试过这个__inin__:
def __init__(self, base):
super(NewModule, self).__init__()
self.base = base
self.extra = …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 GPU 与 Tensorflow 结合使用。我的 Tensorflow 版本是2.4.1,我使用的是 Cuda 版本 11.2。这是 的输出nvidia-smi。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce MX110 Off | 00000000:01:00.0 Off | N/A |
| N/A 52C P0 N/A / N/A | 254MiB / 2004MiB | 8% …Run Code Online (Sandbox Code Playgroud) 我正在研究这个模型:
class Model(torch.nn.Module):
def __init__(self, sizes, config):
super(Model, self).__init__()
self.lstm = []
for i in range(len(sizes) - 2):
self.lstm.append(LSTM(sizes[i], sizes[i+1], num_layers=8))
self.lstm.append(torch.nn.Linear(sizes[-2], sizes[-1]).cuda())
self.lstm = torch.nn.ModuleList(self.lstm)
self.config_mel = config.mel_features
def forward(self, x):
# convert to log-domain
x = x.clip(min=1e-6).log10()
for layer in self.lstm[:-1]:
x, _ = layer(x)
x = torch.relu(x)
#x = torch_unpack_seq(x)[0]
x = self.lstm[-1](x)
mask = torch.sigmoid(x)
return mask
Run Code Online (Sandbox Code Playgroud)
进而:
model = Model(model_width, config)
model.cuda()
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
File "main.py", line 29, in <module>
Model.train(args)
File ".../src/model.py", line 57, in …Run Code Online (Sandbox Code Playgroud) 我的CUDA设置
Visual Studio 2010和2008 SP1(CUDA要求).并行NSight 1.51 CUDA 4.0 RC或3.2和Thrust
基本上,我遵循指南:http: //www.ademiller.com/blogs/tech/2011/03/using-cuda-and-thrust-with-visual-studio-2010/
然后我继续编译成功,没有错误消息.
所以我尝试了更多来自网络的CUDA代码示例.Visual Studios上出现了这些错误.我仍然可以成功编译没有错误消息,但这些错误只是在视觉上突出显示
这是截图.
我应该担心吗?它是Visual Studios错误还是我的设置配置错误?任何帮助表示赞赏.多谢你们!
PS我对Visual Studios和CUDA都很陌生.
// incrementArray.cu
#include "Hello.h"
#include <stdio.h>
#include <assert.h>
#include <cuda.h>
void incrementArrayOnHost(float *a, int N)
{
int i;
for (i=0; i < N; i++) a[i] = a[i]+1.f;
}
__global__ void incrementArrayOnDevice(float *a, int N)
{
int idx = blockIdx.x*blockDim.x + threadIdx.x;
if (idx<N) a[idx] = a[idx]+1.f;
}
int main(void)
{
float *a_h, *b_h; // pointers …Run Code Online (Sandbox Code Playgroud) 我正在尝试在TensorFlow中构建一个大型CNN,并打算在多GPU系统上运行它.我采用了"塔式"系统并为两个GPU分割批次,同时保留CPU上的变量和其他计算.我的系统有32GB的内存,但是当我运行我的代码时,我得到错误:
E tensorflow/stream_executor/cuda/cuda_driver.cc:924] failed to alloc 17179869184 bytes on host: CUDA_ERROR_OUT_OF_MEMORY
W ./tensorflow/core/common_runtime/gpu/pool_allocator.h:195] could not allocate pinned host memory of size: 17179869184
Killed
Run Code Online (Sandbox Code Playgroud)
如果我将CUDA设备隐藏到TensorFlow,我已经看到代码工作(虽然非常慢),因此它不使用cudaMallocHost()......
感谢您的时间.
我正在尝试从此repo运行代码。我通过更改 main.py 中的第 39/40 行来禁用 cuda
parser.add_argument('--type', default='torch.cuda.FloatTensor', help='type of tensor - e.g torch.cuda.HalfTensor')
Run Code Online (Sandbox Code Playgroud)
到
parser.add_argument('--type', default='torch.FloatTensor', help='type of tensor - e.g torch.HalfTensor')
Run Code Online (Sandbox Code Playgroud)
尽管如此,运行代码给了我以下异常:
Traceback (most recent call last):
File "main.py", line 190, in <module>
main()
File "main.py", line 178, in main
model, train_data, training=True, optimizer=optimizer)
File "main.py", line 135, in forward
for i, (imgs, (captions, lengths)) in enumerate(data):
File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 201, in __next__
return self._process_next_batch(batch)
File "/Users/lakshay/anaconda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 221, in _process_next_batch
raise batch.exc_type(batch.exc_msg)
AssertionError: Traceback (most …Run Code Online (Sandbox Code Playgroud) 我想在我的本地机器(1个CPU,1个cuda兼容GPU)中实现Asynchronous Advantage Actor Critic(A3C)模型以进行强化学习.在该算法中,若干"学习者"网络与环境的副本交互并定期更新中心模型.
我已经看到在同一个图中创建n个"工作者"网络和一个"全局"网络的实现,并使用线程来运行这些.在这些方法中,通过将梯度应用于具有"全局"范围的可训练参数来更新全局网络.
但是,我最近读了一些关于分布式张量流的内容,现在我有点困惑.使用分布式tensorflow API实现这一点会更容易/更快/更好吗?在文档和会谈中,他们总是提到在多设备环境中使用它.我不知道在本地异步算法中使用它是否过分.
我还想问一下,有没有办法批处理每个工人计算出的梯度,在n步之后一起应用?
由于我是初学者,我提前道歉。我正在尝试使用 xgb 和 XGBclassifier 使用 XGBoost 进行 GPU 与 CPU 测试。结果如下:
passed time with xgb (gpu): 0.390s
passed time with XGBClassifier (gpu): 0.465s
passed time with xgb (cpu): 0.412s
passed time with XGBClassifier (cpu): 0.421s
Run Code Online (Sandbox Code Playgroud)
我想知道为什么 CPU 的性能似乎不比 GPU 好。这是我的设置:
** 还尝试使用通过 pip 从预先构建的二进制轮子安装的 xgboost 版本:同样的问题
这是我正在使用的测试代码(从这里提取):
param = {'max_depth':5, …Run Code Online (Sandbox Code Playgroud) gpu ×3
python ×3
pytorch ×3
python-3.x ×2
tensorflow ×2
c++ ×1
c++11 ×1
cpu ×1
cuda ×1
move ×1
numpy ×1
nvidia ×1
visual-c++ ×1
xgboost ×1