Documentation: Multiple GPUs
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 35/100
- Tipo di issue
- Documentazione
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- python
- Ambito
- documentation
Direzione di ricerca
Inizia esaminando l’esempio Python fornito e gli esempi di documentazione esistenti del repository per determinare dove collocare un esempio con più GPU. Verifica che l’esempio sia corretto e riproducibile, quindi aggiungilo nella posizione appropriata della documentazione; il lavoro è considerato completato quando l’esempio spiega la configurazione multi-GPU e funziona come descritto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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 ))
- Lingua principale
- Python
- Stelle
- 422
- Fork
- 63
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di arrayfire/arrayfire-python
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
arrayfire/arrayfire-python#271 ·
-
Unwrap phase function Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
arrayfire/arrayfire-python#270 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
arrayfire/arrayfire-python#269 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 38/100
arrayfire/arrayfire-python#268 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
arrayfire/arrayfire-python#267 · 1 commento · 1 reazione ·
Tutte le issue di arrayfire/arrayfire-python
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
learningequality/ricecooker#747 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
BSData/horus-heresy-3rd-edition#3171 ·
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
run-llama/llama_index#23199 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
KhronosGroup/glTF-Blender-IO#2769 ·