2016-06-12 2 views
1

Ich arbeite an einer der AWS GPU-Instanzen mit Taschenlampe 7. Der folgende Code benchmarks einen einfachen Vorwärtsdurchlauf eines linearen Modells. Die GPU-Ausführung scheint ungefähr 4 mal langsamer zu sein. Was mache ich falsch?Torch lineares Modell vorwärts Durchlauf 4 mal langsamer auf GPU dann CPU

require 'torch'; 
require 'nn'; 

cmd = torch.CmdLine() 
cmd:option("-gpu", 0) -- gpu/cpu 
cmd:option("-n_in", 100) 
cmd:option("-n_out", 100) 
cmd:option("-n_iter", 1000) 

params = cmd:parse(arg) 
A = torch.Tensor():randn(params.n_in); 
model = nn.Sequential():add(nn.Linear(params.n_in, params.n_out)) 

if params.gpu>0 then 
    require 'cutorch'; 
    require 'cudnn'; 
    A = A:cuda() 
    model = model:cuda() 
end 

timer = torch.Timer() 

for i=1,params.n_iter do 
    A2 = model:forward(A) 
end 
print("Average time:" .. timer:time().real/params.n_iter) 
+1

versuchen Sie eine größere Dimension – kangshiyin

+0

Danke, das scheint es zu sein! Das Laufen mit -n_in 10000 -n_out 500 gibt ungefähr 30X Beschleunigung auf GPU. – pavel

Antwort

3

Sie benötigen ein ausreichend großes Netzwerk, um die GPU vollständig zu nutzen. Für ein kleines Netzwerk (< 500 x 500) wird der Overhead einschließlich GPU-Kernel-Start, Datenübertragung über PCI-E usw. einen großen Teil der Trainingszeit beanspruchen. In diesem Fall sollten Sie stattdessen die CPU verwenden.

Verwandte Themen