Caffe2 — 源碼分析

Caffe2 在上個月開放了 筆者之前玩過Theano, Tensorflow 這次開放了Caffe2 於是好奇來了解他的運算結構

Caffe2 是由Python 來做主要的Wrapper 來呼叫相對應的C++方法 然後來進行運算, 其所用的Binder 是pybind11, 然後其中使用protobuf來做物件資訊的傳遞.

首先我們從基礎的物件來了解Caffe2的運作方式:


from caffe2.python import core, workspace
op = core.CreateOperator(
“Relu”, # The type of operator that we want to run
[“X”], # A list of input blobs by their names
[“Y”], # A list of output blobs by their names
)
workspace.FeedBlob(“X”, np.random.randn(2, 3).astype(np.float32))
workspace.RunOperatorOnce(op)

我們可以從python/core.py 找到 CreateOperator這個方法 在這個方法裡面我們可以看到


operator = caffe2_pb2.OperatorDef()

前面有提到Caffe2使用了protobuf來進行物件資訊在Python跟C++之間的傳遞, 而這個caffe2_pb2.py這個檔案即是protobuf所產生出來的, 我們可以把他想成一個資訊檔案, C++ 便可以因為這些資訊來建立相對應的Operator物件


workspace.RunOperatorOnce(op)

當RunOperatorOnce會呼叫binding的C++ func, 然後將這個物件傳給C++, 去呼叫

bool Workspace::RunOperatorOnce(const OperatorDef& op_def)

至於這個C++的運作方式, 我們下次再來分享

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.