Skip to content

Commit 0143b66

Browse files
authored
Merge pull request #92 from rohithkrn/caffe2-hipify-python
Caffe2 - hipify python API #2
2 parents e3d615e + 2a4f310 commit 0143b66

19 files changed

+235
-159
lines changed

.jenkins/caffe2/test.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ if [[ $BUILD_ENVIRONMENT == *-rocm* ]]; then
109109
# Our cuda top_k op has some asm code, the hipified version doesn't
110110
# compile yet, so we don't have top_k operator for now
111111
rocm_ignore_test+=("--ignore $CAFFE2_PYPATH/python/operator_test/top_k_test.py")
112+
113+
# this is a multi-gpu test
114+
rocm_ignore_test+=("--ignore $CAFFE2_PYPATH/python/data_parallel_model_test.py")
115+
112116
fi
113117
114118
# Python tests

caffe2/python/cnn.py

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from __future__ import print_function
66
from __future__ import unicode_literals
77

8-
from caffe2.python import brew, workspace
8+
from caffe2.python import brew
99
from caffe2.python.model_helper import ModelHelper
1010
from caffe2.proto import caffe2_pb2
1111
import logging
@@ -17,7 +17,7 @@ class CNNModelHelper(ModelHelper):
1717
"""
1818

1919
def __init__(self, order="NCHW", name=None,
20-
use_gpu_engine=True, gpu_engine_exhaustive_search=False,
20+
use_cudnn=True, cudnn_exhaustive_search=False,
2121
ws_nbytes_limit=None, init_params=True,
2222
skip_sparse_optim=False,
2323
param_model=None):
@@ -31,8 +31,8 @@ def __init__(self, order="NCHW", name=None,
3131

3232
cnn_arg_scope = {
3333
'order': order,
34-
'use_gpu_engine': use_gpu_engine,
35-
'gpu_engine_exhaustive_search': gpu_engine_exhaustive_search,
34+
'use_cudnn': use_cudnn,
35+
'cudnn_exhaustive_search': cudnn_exhaustive_search,
3636
}
3737
if ws_nbytes_limit:
3838
cnn_arg_scope['ws_nbytes_limit'] = ws_nbytes_limit
@@ -45,8 +45,8 @@ def __init__(self, order="NCHW", name=None,
4545
)
4646

4747
self.order = order
48-
self.use_gpu_engine = use_gpu_engine
49-
self.gpu_engine_exhaustive_search = gpu_engine_exhaustive_search
48+
self.use_cudnn = use_cudnn
49+
self.cudnn_exhaustive_search = cudnn_exhaustive_search
5050
self.ws_nbytes_limit = ws_nbytes_limit
5151
if self.order != "NHWC" and self.order != "NCHW":
5252
raise ValueError(
@@ -79,9 +79,9 @@ def ConvNd(self, *args, **kwargs):
7979
return brew.conv_nd(
8080
self,
8181
*args,
82-
use_gpu_engine=self.use_gpu_engine,
82+
use_cudnn=self.use_cudnn,
8383
order=self.order,
84-
gpu_engine_exhaustive_search=self.gpu_engine_exhaustive_search,
84+
cudnn_exhaustive_search=self.cudnn_exhaustive_search,
8585
ws_nbytes_limit=self.ws_nbytes_limit,
8686
**kwargs
8787
)
@@ -90,9 +90,9 @@ def Conv(self, *args, **kwargs):
9090
return brew.conv(
9191
self,
9292
*args,
93-
use_gpu_engine=self.use_gpu_engine,
93+
use_cudnn=self.use_cudnn,
9494
order=self.order,
95-
gpu_engine_exhaustive_search=self.gpu_engine_exhaustive_search,
95+
cudnn_exhaustive_search=self.cudnn_exhaustive_search,
9696
ws_nbytes_limit=self.ws_nbytes_limit,
9797
**kwargs
9898
)
@@ -101,9 +101,9 @@ def ConvTranspose(self, *args, **kwargs):
101101
return brew.conv_transpose(
102102
self,
103103
*args,
104-
use_gpu_engine=self.use_gpu_engine,
104+
use_cudnn=self.use_cudnn,
105105
order=self.order,
106-
gpu_engine_exhaustive_search=self.gpu_engine_exhaustive_search,
106+
cudnn_exhaustive_search=self.cudnn_exhaustive_search,
107107
ws_nbytes_limit=self.ws_nbytes_limit,
108108
**kwargs
109109
)
@@ -112,9 +112,9 @@ def GroupConv(self, *args, **kwargs):
112112
return brew.group_conv(
113113
self,
114114
*args,
115-
use_gpu_engine=self.use_gpu_engine,
115+
use_cudnn=self.use_cudnn,
116116
order=self.order,
117-
gpu_engine_exhaustive_search=self.gpu_engine_exhaustive_search,
117+
cudnn_exhaustive_search=self.cudnn_exhaustive_search,
118118
ws_nbytes_limit=self.ws_nbytes_limit,
119119
**kwargs
120120
)
@@ -123,9 +123,9 @@ def GroupConv_Deprecated(self, *args, **kwargs):
123123
return brew.group_conv_deprecated(
124124
self,
125125
*args,
126-
use_gpu_engine=self.use_gpu_engine,
126+
use_cudnn=self.use_cudnn,
127127
order=self.order,
128-
gpu_engine_exhaustive_search=self.gpu_engine_exhaustive_search,
128+
cudnn_exhaustive_search=self.cudnn_exhaustive_search,
129129
ws_nbytes_limit=self.ws_nbytes_limit,
130130
**kwargs
131131
)
@@ -147,16 +147,16 @@ def FC_Sparse(self, *args, **kwargs):
147147

148148
def Dropout(self, *args, **kwargs):
149149
return brew.dropout(
150-
self, *args, order=self.order, use_gpu_engine=self.use_gpu_engine, **kwargs
150+
self, *args, order=self.order, use_cudnn=self.use_cudnn, **kwargs
151151
)
152152

153153
def LRN(self, *args, **kwargs):
154154
return brew.lrn(
155-
self, *args, order=self.order, use_gpu_engine=self.use_gpu_engine, **kwargs
155+
self, *args, order=self.order, use_cudnn=self.use_cudnn, **kwargs
156156
)
157157

158158
def Softmax(self, *args, **kwargs):
159-
return brew.softmax(self, *args, use_gpu_engine=self.use_gpu_engine, **kwargs)
159+
return brew.softmax(self, *args, use_cudnn=self.use_cudnn, **kwargs)
160160

161161
def SpatialBN(self, *args, **kwargs):
162162
return brew.spatial_bn(self, *args, order=self.order, **kwargs)
@@ -169,7 +169,7 @@ def InstanceNorm(self, *args, **kwargs):
169169

170170
def Relu(self, *args, **kwargs):
171171
return brew.relu(
172-
self, *args, order=self.order, use_gpu_engine=self.use_gpu_engine, **kwargs
172+
self, *args, order=self.order, use_cudnn=self.use_cudnn, **kwargs
173173
)
174174

175175
def PRelu(self, *args, **kwargs):
@@ -187,7 +187,7 @@ def Sum(self, *args, **kwargs):
187187
return brew.sum(self, *args, **kwargs)
188188

189189
def Transpose(self, *args, **kwargs):
190-
return brew.transpose(self, *args, use_gpu_engine=self.use_gpu_engine, **kwargs)
190+
return brew.transpose(self, *args, use_cudnn=self.use_cudnn, **kwargs)
191191

192192
def Iter(self, *args, **kwargs):
193193
return brew.iter(self, *args, **kwargs)
@@ -197,15 +197,15 @@ def Accuracy(self, *args, **kwargs):
197197

198198
def MaxPool(self, *args, **kwargs):
199199
return brew.max_pool(
200-
self, *args, use_gpu_engine=self.use_gpu_engine, order=self.order, **kwargs
200+
self, *args, use_cudnn=self.use_cudnn, order=self.order, **kwargs
201201
)
202202

203203
def MaxPoolWithIndex(self, *args, **kwargs):
204204
return brew.max_pool_with_index(self, *args, order=self.order, **kwargs)
205205

206206
def AveragePool(self, *args, **kwargs):
207207
return brew.average_pool(
208-
self, *args, use_gpu_engine=self.use_gpu_engine, order=self.order, **kwargs
208+
self, *args, use_cudnn=self.use_cudnn, order=self.order, **kwargs
209209
)
210210

211211
@property
@@ -235,11 +235,6 @@ def CPU(self):
235235
@property
236236
def GPU(self, gpu_id=0):
237237
device_option = caffe2_pb2.DeviceOption()
238-
if workspace.has_hip_support:
239-
device_option.device_type = caffe2_pb2.HIP
240-
device_option.hip_gpu_id = gpu_id
241-
else:
242-
device_option.device_type = caffe2_pb2.CUDA
243-
device_option.cuda_gpu_id = gpu_id
244-
238+
device_option.device_type = caffe2_pb2.CUDA
239+
device_option.cuda_gpu_id = gpu_id
245240
return device_option

caffe2/python/core.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,16 +2021,16 @@ def DeduplicateGradientSlices(self, g, aggregator='sum'):
20212021
raise ValueError('{} is not supported'.format(aggregator))
20222022
return GradientSlice(indices=unique, values=new_g)
20232023

2024-
def RunAllOnGPU(self, gpu_id=0, use_gpu_engine=False):
2024+
def RunAllOnGPU(self, gpu_id=0, use_cudnn=False):
20252025
"""A convenient function to run everything on the GPU."""
20262026
device_option = caffe2_pb2.DeviceOption()
20272027
device_option.device_type = caffe2_pb2.HIP if workspace.has_hip_support else caffe2_pb2.CUDA
20282028
device_option.cuda_gpu_id = gpu_id
20292029
device_option.hip_gpu_id = gpu_id
20302030
self._net.device_option.CopyFrom(device_option)
2031-
if use_gpu_engine:
2031+
if use_cudnn:
20322032
for op in self._net.op:
2033-
op.engine = "MIOPEN" if workspace.has_hip_support else 'CUDNN'
2033+
op.engine = 'CUDNN'
20342034

20352035
def RunAllOnMKL(self):
20362036
"""A convenient function to run everything using MKLDNN."""

caffe2/python/core_gradients_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import unittest
1010

1111
from caffe2.proto import caffe2_pb2
12-
from caffe2.python import core, test_util
12+
from caffe2.python import core, test_util, workspace
1313
from caffe2.python.core import CreateOperator, GradientRegistry
1414
from caffe2.python import workspace
1515

@@ -94,7 +94,7 @@ def assertOperatorListEqual(self, operatorDefList1, operatorDefList2):
9494

9595
@given(device_option=st.sampled_from([
9696
None,
97-
core.DeviceOption(caffe2_pb2.CUDA, 1)]))
97+
core.DeviceOption(caffe2_pb2.HIP, hip_gpu_id=1) if workspace.has_hip_support else core.DeviceOption(caffe2_pb2.CUDA, cuda_gpu_id=1)]))
9898
def testDirect(self, device_option):
9999
operators = [
100100
CreateOperator('Direct', 'in', 'hidden'),
@@ -279,7 +279,7 @@ def testUseInputButInputHasBeenChanged(self):
279279

280280
@given(device_option=st.sampled_from([
281281
None,
282-
core.DeviceOption(caffe2_pb2.CUDA, 1)]))
282+
core.DeviceOption(caffe2_pb2.HIP, hip_gpu_id=1) if workspace.has_hip_support else core.DeviceOption(caffe2_pb2.CUDA, cuda_gpu_id=1)]))
283283
def testMultiUseInput(self, device_option):
284284
"""Test gradient for the following case:
285285

0 commit comments

Comments
 (0)