Tensorflow C API实现卷积计算

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: Tensorflow C API实现卷积计算

一个基于C API实现的进行卷积计算的示例。

回目录

测试程序

一个卷积Operation测试代码:
继续阅读“Tensorflow C API实现卷积计算”本作品采用知识共享署名 4.0 国际许可协议进行许可。

Tensorflow Debug with CDT

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: Tensorflow Debug with CDT

Get the source from github
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
Install the prerequirement
sudo apt install python3-dev python3-pip
pip install -U --user pip six 'numpy<1.19.0' wheel setuptools mock 'future>=0.17.1' 'gast==0.3.3' typing_extensions
pip install -U --user keras_applications --no-deps
pip install -U --user keras_preprocessing --no-deps
Configure the tensorflow
./configure
Install the build tool: Bazel
sudo apt install curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg
sudo mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
sudo apt update && sudo apt install bazel
编译和Debug设置

1 Build Tensorflow的debug版本,即可以用GDB Debug的版本:
Build的时候加上copt “-g”:
通过gdb conv_ops_3d.pic.o验证,只要不出现No symbols则说明debug信息有。

 
bazel build --config=opt --copt -g //tensorflow/tools/lib_package:libtensorflow --verbose_failures
#You can also use --per_file_copt to allow only some library with debug info.
bazel build --config=opt  --per_file_copt=.*tensorflow.*@-g //tensorflow/tools/lib_package:libtensorflow --verbose_failures
 
[root@localhost conv_ops]# gdb conv_ops_3d.pic.o
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-114.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/.cache/bazel/_bazel_root/e88dc1dcc3c90dfdeee7304faf39c313/execroot/org_tensorflow/bazel-out/k8-opt/bin/tensorflow/core/kernels/_objs/conv_ops/conv_ops_3d.pic.o...done.
(gdb) 
 
#Other libraries may need for debuging.
bazel build --config=opt  --copt -g //tensorflow/cc:cc_ops --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/c:c_test_util --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/c:c_api --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/cc:cc_ops --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/cc:const_op --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/cc:array_ops --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/cc:ops --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/cc:match_ops --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/cc:math_ops --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/cc:scope --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/core:test --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/core:testlib --verbose_failures
bazel build --config=opt  --copt -g //tensorflow/core/kernels:ops_testutil --verbose_failures

继续阅读“Tensorflow Debug with CDT”本作品采用知识共享署名 4.0 国际许可协议进行许可。

TF 计算图的执行

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: TF 计算图的执行

TF计算图优化完成后,在Session开始执行后就轮到TF 计算图的执行了。Tensorflow会根据计算图的节点信息,首先找到一个没有输入的节点作为根节点,创建一个task交给线程池取执行。每个节点完成后会根据Edge通知下游节点计算,直到所有节点完成计算,然后输出结果。

Tensorflow源码解读

计算图执行

还是以“TF 生成计算图”中的程序为例:
进入到如下的堆栈,从DirectSession::CreateExecutors()开始创建Executors。

tensorflow::DirectSession::CreateExecutors() at direct_session.cc:1,301 0x7ffff591344b	
tensorflow::DirectSession::GetOrCreateExecutors() at direct_session.cc:1,435 0x7ffff5914bec	
tensorflow::DirectSession::PRunSetup() at direct_session.cc:849 0x7ffff59162b7	
TF_SessionPRunSetup() at c_api.cc:2,668 0x7ffff2090e54	
main() at TensorflowTest2.cpp:58 0x40522e

继续阅读“TF 计算图的执行”本作品采用知识共享署名 4.0 国际许可协议进行许可。

TF 生成计算图

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: TF 生成计算图

生成计算图分析

假设我们有以下的tensorflow程序:
程序中,两个Input tensor A和B,一个常量tensor 2,两个计算Operation Plus2和PlusB。
程序计算A+2的结果。
继续阅读“TF 生成计算图”本作品采用知识共享署名 4.0 国际许可协议进行许可。

TF Operation的创建

原创文章,转载请注明: 转载自慢慢的回味

本文链接地址: TF Operation的创建

Tensorflow创建OP的过程

以AddNOp为例说明Operation怎样从ops的定义创建具体的kernel实例。
在Tensorflow Excecutor初始化的时候,会迭代计算图中的所有节点,对每个节点的Operation进行创建。如下方法params_.create_kernel(n->def(), &item->kernel):
Tensorflow源码解读

// Code in executor.cc 
Status ExecutorImpl::Initialize() {
......
  for (const Node* n : graph_->nodes()) {
    const int id = n->id();
    const string& frame_name = cf_info.frame_names[id];
    FrameInfo* frame_info = EnsureFrameInfo(frame_name);
 
    // See if this node is a root node, and if so, add to root_nodes_.
    if (n->in_edges().empty()) {
      root_nodes_.push_back(n);
    }
 
    NodeItem* item = gview_.node(id);
    item->node = n;
 
    item->input_start = frame_info->total_inputs;
    frame_info->total_inputs += n->num_inputs();
 
    Status s = params_.create_kernel(n->def(), &item->kernel);

继续阅读“TF Operation的创建”本作品采用知识共享署名 4.0 国际许可协议进行许可。