Documentation: Multiple GPUs
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Documentação
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- python
- Domínio
- documentation
Direção de pesquisa
Comece revisando o exemplo de Python fornecido e os exemplos de documentação existentes no repositório para determinar onde um exemplo de múltiplas GPUs deve ser incluído. Verifique se o exemplo está correto e é reproduzível e, em seguida, adicione-o ao local apropriado da documentação; considera-se concluído quando o exemplo explica a configuração de múltiplas GPUs e funciona conforme descrito.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
I think it would be great to have an example for using multiple GPUs.
Here is what I tried. If thats the right way to do it, then you may add it as an example.
It seems to scale fine (tested up to 7 GPUs) and nvidia-smi reports 96% util.
import time
import numpy as np
import arrayfire as af
import argparse
af.set_backend('cuda')
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('gpus', type=int)
parser.add_argument('-runs', type=int, default=100)
args = parser.parse_args()
GPUS = args.gpus
N = 5000
runs = args.runs
# The simple task we want to solve:
# we have a huge list of vectors X and want to calculate the distance between all of them
# this will result in a huge distance matrix M
# the resulting matrix should be multiplied by a vector alpha
X = np.random.rand(100, N)
Alpha = np.random.rand(N,1)
#copy data once:
xGPU = []
alphaGPU = []
for i in range(GPUS):
af.set_device(i)
x = af.to_array(X)
xGPU.append(x)
alpha = af.to_array(Alpha)
alphaGPU.append(alpha)
sub = lambda a,b: a - b
print("init finished")
for _ in range(runs):
startTime = time.time()
splitSize = int(np.ceil(N / GPUS))
#print("Temp data will ocupy at least {:.2f} MB on the gpu.".format((X.shape[0] * splitSize * X.shape[1]) *8 /1024/1024))
result = []
for i in range(GPUS):
af.set_device(i)
x = xGPU[i]
alpha = alphaGPU[i]
start = i*splitSize
end = min((i+1)*splitSize, N)
diff = af.broadcast(sub, af.tile(x[:,start:end],1,1,x.shape[1]), af.moddims(x,x.shape[0],1,x.shape[1]))
diff = af.sqrt(af.sum(af.pow(diff,2),0) )
r = af.matmul(af.moddims(diff, diff.shape[1], diff.shape[2]), alpha)
result.append(r)
total = 0
for i in range(GPUS):
af.set_device(i)
total += af.sum(result[i])
print("Took {} sec".format(time.time() - startTime ))
- Linguagem predominante
- Python
- Estrelas
- 422
- Forks
- 63
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de arrayfire/arrayfire-python
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
arrayfire/arrayfire-python#271 ·
-
Unwrap phase function Aberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
arrayfire/arrayfire-python#270 ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
arrayfire/arrayfire-python#269 ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 38/100
arrayfire/arrayfire-python#268 · 1 comentário ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 48/100
arrayfire/arrayfire-python#267 · 1 comentário · 1 reação ·
Todas as issues de arrayfire/arrayfire-python
Issues semelhantes
-
Add: hunch Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
AbdelStark/awesome-typesafe#104 ·
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
DiamondLightSource/dodal#2211 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
openml/openml-python#1749 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
sipyourdrink-ltd/bernstein#6191 ·