網頁

2019年8月21日 星期三

numpy 之 GPU 版本, CuPy, MinPy

目前有 CuPy 和 MinPy
而 MinPy 有 Automatic gradient support,但感覺相容性不佳,要更動很多程式碼



CuPy 安裝和使用
pip install cupy

cupy_array = cupy.array(numpy_array)
numpy_array = cupy.asnumpy(cupy_array)

numpy.argwhere(cond) 要換成
cupy.transpose(cupy.asarray(cupy.nonzero(cond), dtype=np.int), axes=())

numpy.array([array1, array2]) 要換成
cupy.stack([array1, array2])

idx = numpy.max(array) 若只有1個值 要換成
idx = cupy.max(array).item()



MinPy 安裝和使用
查詢 mxnet 和 CUDA 版本的配合
https://mxnet.apache.org/versions/master/install/index.html?platform=Linux&language=Python&processor=GPU

sudo apt-get update
sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev

git clone --recursive -b v1.5.0 https://github.com/dmlc/mxnet
cd mxnet;
cp make/config.mk .
echo "USE_CUDA=1" >>config.mk
echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk
echo "USE_CUDNN=1" >>config.mk
make -j$(nproc)

pip install numpy pyyaml
python ~/mxnet/python/setup.py install

minpy_array = minpy.array(numpy_array)
numpy_array = minpy_array.asnumpy()

numpy.array([array1, array2]) 要換成
minpy.stack(*[array1, array2])

numpy_array.transpose(axes=()) 要換成
minpy.transpose(minpy_array, axes=())

numpy.zeros((0, 1)) 是合法的
minpy.zeros((0, 1)) 是不合法的

numpy_array[numpy.newaxis, :] 要換成
minpy.expand_dims(minpy_array, axis=0)

沒有留言:

張貼留言