本文整理匯總了Python中torch.cuda方法的典型用法代碼示例。如果您正苦於以下問題:Python torch.cuda方法的具體用法?Python torch.cuda怎麽用?Python torch.cuda使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類torch
的用法示例。
在下文中一共展示了torch.cuda方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def forward(self, input):
laplacian = input.exp() + self.eps
output = input.clone()
for b in range(input.size(0)):
lap = laplacian[b].masked_fill(
Variable(torch.eye(input.size(1)).cuda().ne(0)), 0)
lap = -lap + torch.diag(lap.sum(0))
# store roots on diagonal
lap[0] = input[b].diag().exp()
inv_laplacian = lap.inverse()
factor = inv_laplacian.diag().unsqueeze(1)\
.expand_as(input[b]).transpose(0, 1)
term1 = input[b].exp().mul(factor).clone()
term2 = input[b].exp().mul(inv_laplacian.transpose(0, 1)).clone()
term1[:, 0] = 0
term2[0] = 0
output[b] = term1 - term2
roots_output = input[b].diag().exp().mul(
inv_laplacian.transpose(0, 1)[0])
output[b] = output[b] + torch.diag(roots_output)
return output
示例2: run_weighted_rmse_net_helper
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def run_weighted_rmse_net_helper(X_train, Y_train, X_test, Y_test, params, weights, i):
X_train_ = Variable(torch.Tensor(X_train[:,:-1])).cuda()
Y_train_ = Variable(torch.Tensor(Y_train)).cuda()
X_test_ = Variable(torch.Tensor(X_test[:,:-1])).cuda()
Y_test_ = Variable(torch.Tensor(Y_test)).cuda()
model = model_classes.Net(X_train[:,:-1], Y_train, [200, 200])
model.cuda()
opt = optim.Adam(model.parameters(), lr=1e-3)
solver = model_classes.SolveScheduling(params)
for j in range(100):
model.train()
batch_train_weightrmse(100, i*100 + j, X_train_.data, Y_train_.data, model, opt, weights.data)
# Rebalance weights
model.eval()
mu_pred_train, sig_pred_train = model(X_train_)
Y_sched_train = solver(mu_pred_train.double(), sig_pred_train.double())
weights2 = task_loss_no_mean(
Y_sched_train.float(), Y_train_, params).cuda()
model.set_sig(X_train_, Y_train_)
return model, weights2
示例3: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def forward(self, log_prices):
prices = torch.exp(log_prices)
nBatch = prices.size(0)
T = self.T
Q = self.Q.unsqueeze(0).expand(nBatch, self.Q.size(0), self.Q.size(1))
c = torch.cat(
[prices, -prices,
-Variable(self.lam * self.B * torch.ones(T)).unsqueeze(0).expand(nBatch,T).cuda()],
1)
A = self.A.unsqueeze(0).expand(nBatch, self.A.size(0), self.A.size(1))
b = self.b.unsqueeze(0).expand(nBatch, self.b.size(0))
Ae = self.Ae.unsqueeze(0).expand(nBatch, self.Ae.size(0), self.Ae.size(1))
be = self.be.unsqueeze(0).expand(nBatch, self.be.size(0))
out = QPFunction(verbose=True)\
(Q.double(), c.double(), A.double(), b.double(), Ae.double(), be.double())
return out
示例4: __init__
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def __init__(self, X, Y, hidden_layer_sizes):
super(Net, self).__init__()
# Initialize linear layer with least squares solution
X_ = np.hstack([X, np.ones((X.shape[0],1))])
Theta = np.linalg.solve(X_.T.dot(X_), X_.T.dot(Y))
self.lin = nn.Linear(X.shape[1], Y.shape[1])
W,b = self.lin.parameters()
W.data = torch.Tensor(Theta[:-1,:].T)
b.data = torch.Tensor(Theta[-1,:])
# Set up non-linear network of
# Linear -> BatchNorm -> ReLU -> Dropout layers
layer_sizes = [X.shape[1]] + hidden_layer_sizes
layers = reduce(operator.add,
[[nn.Linear(a,b), nn.BatchNorm1d(b), nn.ReLU(), nn.Dropout(p=0.2)]
for a,b in zip(layer_sizes[0:-1], layer_sizes[1:])])
layers += [nn.Linear(layer_sizes[-1], Y.shape[1])]
self.net = nn.Sequential(*layers)
self.sig = Parameter(torch.ones(1, Y.shape[1]).cuda())
示例5: __init__
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def __init__(self, params, eps=1e-2):
super(SolveNewsvendor, self).__init__()
k = len(params['d'])
self.Q = Variable(torch.diag(torch.Tensor(
[params['c_quad']] + [params['b_quad']]*k + [params['h_quad']]*k)) \
.cuda())
self.p = Variable(torch.Tensor(
[params['c_lin']] + [params['b_lin']]*k + [params['h_lin']]*k) \
.cuda())
self.G = Variable(torch.cat([
torch.cat([-torch.ones(k,1), -torch.eye(k), torch.zeros(k,k)], 1),
torch.cat([torch.ones(k,1), torch.zeros(k,k), -torch.eye(k)], 1),
-torch.eye(1 + 2*k)], 0).cuda())
self.h = Variable(torch.Tensor(
np.concatenate([-params['d'], params['d'], np.zeros(1+ 2*k)])).cuda())
self.one = Variable(torch.Tensor([1])).cuda()
self.eps_eye = eps * Variable(torch.eye(1 + 2*k).cuda()).unsqueeze(0)
示例6: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def forward(self, y):
nBatch, k = y.size()
eps2 = 1e-8
Q_scale = torch.cat([torch.diag(torch.cat(
[self.one, y[i]+eps2, y[i]+eps2])).unsqueeze(0) for i in range(nBatch)], 0)
Q = self.Q.unsqueeze(0).expand_as(Q_scale).mul(Q_scale)
p_scale = torch.cat([Variable(torch.ones(nBatch,1).cuda()), y, y], 1)
p = self.p.unsqueeze(0).expand_as(p_scale).mul(p_scale)
G = self.G.unsqueeze(0).expand(nBatch, self.G.size(0), self.G.size(1))
h = self.h.unsqueeze(0).expand(nBatch, self.h.size(0))
e = Variable(torch.Tensor().cuda()).double()
out = QPFunction(verbose=False)\
(Q.double(), p.double(), G.double(), h.double(), e, e).float()
return out[:,:1]
示例7: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def forward(self, input):
laplacian = input.exp() + self.eps
output = input.clone()
for b in range(input.size(0)):
lap = laplacian[b].masked_fill(
torch.eye(input.size(1)).cuda().ne(0), 0)
lap = -lap + torch.diag(lap.sum(0))
# store roots on diagonal
lap[0] = input[b].diag().exp()
inv_laplacian = lap.inverse()
factor = inv_laplacian.diag().unsqueeze(1)\
.expand_as(input[b]).transpose(0, 1)
term1 = input[b].exp().mul(factor).clone()
term2 = input[b].exp().mul(inv_laplacian.transpose(0, 1)).clone()
term1[:, 0] = 0
term2[0] = 0
output[b] = term1 - term2
roots_output = input[b].diag().exp().mul(
inv_laplacian.transpose(0, 1)[0])
output[b] = output[b] + torch.diag(roots_output)
return output
示例8: _process_cuda_events
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def _process_cuda_events(self):
"""
Service pending timers. Dequeue timers and aggregate Cuda time intervals,
until the first "pending" timer (i.e. dependent on a not-yet-ready cuda event).
"""
while len(self._cuda_pending_timers) > 0:
timer = self._cuda_pending_timers[0]
elapsed_cuda = 0.0
for ev_start, ev_end in timer._cuda_event_intervals:
if not ev_start.query() or not ev_end.query():
# Cuda events associated with this timer aren't ready yet,
# stop servicing the queue.
return
# Use seconds (instead of ms) for consistency with "host" timers
elapsed_cuda += ev_start.elapsed_time(ev_end) / 1000.0
# All time intervals for this timer are now accounted for.
# Aggregate stats and pop from pending queue.
self._cuda_stats[timer.name].update(elapsed_cuda)
self._cuda_pending_timers.popleft()
示例9: __init__
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def __init__(self, size, cuda=False):
self.size = size
self.done = False
self.tt = torch.cuda if cuda else torch
# The score for each translation on the beam.
self.scores = self.tt.FloatTensor(size).zero_()
self.all_scores = []
self.all_length = []
# The backpointers at each time-step.
self.prevKs = []
# The outputs at each time-step.
self.nextYs = [self.tt.LongTensor(size).fill_(s2s.Constants.PAD)]
self.nextYs[0][0] = s2s.Constants.BOS
# The attentions (matrix) for each time.
self.attn = []
# Get the outputs for the current timestep.
示例10: recommend_auto_balance
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def recommend_auto_balance(message: str) -> str:
"""Expands a message with recommendation to :mod:`torchgpipe.balance`."""
return f'''{message}
If your model is still under development, its optimal balance would change
frequently. In this case, we highly recommend 'torchgpipe.balance' for naive
automatic balancing:
from torchgpipe import GPipe
from torchgpipe.balance import balance_by_time
partitions = torch.cuda.device_count()
sample = torch.empty(...)
balance = balance_by_time(partitions, model, sample)
model = GPipe(model, balance, ...)
'''
示例11: make_translator
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def make_translator(opt, report_score=True, out_file=None):
if out_file is None:
out_file = codecs.open(opt.output, 'w', 'utf-8')
if opt.gpu > -1:
torch.cuda.set_device(opt.gpu)
dummy_parser = argparse.ArgumentParser(description='train.py')
onmt.opts.model_opts(dummy_parser)
dummy_opt = dummy_parser.parse_known_args([])[0]
fields, model, model_opt = \
onmt.ModelConstructor.load_test_model(opt, dummy_opt.__dict__)
scorer = onmt.translate.GNMTGlobalScorer(opt.alpha,
opt.beta,
opt.coverage_penalty,
opt.length_penalty)
kwargs = {k: getattr(opt, k)
for k in ["beam_size", "n_best", "max_length", "min_length",
"stepwise_penalty", "block_ngram_repeat",
"ignore_when_blocking", "dump_beam",
"data_type", "replace_unk", "gpu", "verbose"]}
translator = Translator(model, fields, global_scorer=scorer,
out_file=out_file, report_score=report_score,
copy_attn=model_opt.copy_attn, **kwargs)
return translator
示例12: _run_target
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def _run_target(self, batch, data):
data_type = data.data_type
if data_type == 'text':
_, src_lengths = batch.src
else:
src_lengths = None
src = onmt.io.make_features(batch, 'src', data_type)
tgt_in = onmt.io.make_features(batch, 'tgt')[:-1]
# (1) run the encoder on the src
enc_states, memory_bank = self.model.encoder(src, src_lengths)
dec_states = \
self.model.decoder.init_decoder_state(src, memory_bank, enc_states)
# (2) if a target is specified, compute the 'goldScore'
# (i.e. log likelihood) of the target under the model
tt = torch.cuda if self.cuda else torch
gold_scores = tt.FloatTensor(batch.batch_size).fill_(0)
dec_out, _, _ = self.model.decoder(
tgt_in, memory_bank, dec_states, memory_lengths=src_lengths)
tgt_pad = self.fields["tgt"].vocab.stoi[onmt.io.PAD_WORD]
for dec, tgt in zip(dec_out, batch.tgt[1:].data):
# Log prob of each word.
out = self.model.generator.forward(dec)
tgt = tgt.unsqueeze(1)
scores = out.data.gather(1, tgt)
scores.masked_fill_(tgt.eq(tgt_pad), 0)
gold_scores += scores
return gold_scores
示例13: async_copy_to
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def async_copy_to(obj, dev, main_stream=None):
if torch.is_tensor(obj):
obj = Variable(obj)
if isinstance(obj, Variable):
v = obj.cuda(dev, async=True)
if main_stream is not None:
v.data.record_stream(main_stream)
return v
elif isinstance(obj, collections.Mapping):
return {k: async_copy_to(o, dev, main_stream) for k, o in obj.items()}
elif isinstance(obj, collections.Sequence):
return [async_copy_to(o, dev, main_stream) for o in obj]
else:
return obj
示例14: _async_copy
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def _async_copy(inputs, device_ids):
nr_devs = len(device_ids)
assert type(inputs) in (tuple, list)
assert len(inputs) == nr_devs
outputs = []
for i, dev in zip(inputs, device_ids):
with cuda.device(dev):
outputs.append(async_copy_to(i, dev))
return tuple(outputs)
示例15: _async_copy_stream
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import cuda [as 別名]
def _async_copy_stream(inputs, device_ids):
nr_devs = len(device_ids)
assert type(inputs) in (tuple, list)
assert len(inputs) == nr_devs
outputs = []
streams = [_get_stream(d) for d in device_ids]
for i, dev, stream in zip(inputs, device_ids, streams):
with cuda.device(dev):
main_stream = cuda.current_stream()
with cuda.stream(stream):
outputs.append(async_copy_to(i, dev, main_stream=main_stream))
main_stream.wait_stream(stream)
return outputs