• [ModelArts昇...] 本地部署出现 The engine tensorflow does not support local inference
    tensorflow==1.13.1python 3.5.2是环境配置的问题吗?附件为错误日志
  • [问题求助] 按照“使用TensorFlow实现手写数字识别”教程,但是跑出来的模型不能成功预测
    看问题日志,这些语句重复出现,不知道是什么问题。。。救救孩子吧
  • [问题求助] 关于模型与推理代码的疑问
    我使用的是tensorflow框架,训练好模型后将模型(整个model文件夹)上传到桶里面,模型是这个样子。接下来编写推理代码,推理代码主要是用来对输入数据预处理和输出数据后处理。那举个例子就是,我可以提前把数据处理好上传到桶里,编写推理代码中的预处理代码来读取桶中的文件,这个preprocess返回预处理后的数据(dataframe或者其他形式,或者一个数组),通过什么方式来使用这个这个数据,我没有找到。看了下tensorflow的推理代码示例,我的理解是,之前上传的已经训练好的模型,这个模型里有input和output两个变量,推理代码中preprocess返回的数据赋值给这个input,之后模型自动运行。。。运行完毕将结果赋值给output。推理代码中的postprocess会读取模型中的output变量,经过处理,得到最终的呈现结果,形式是{“data”:{"resp_data":{"wuhezhangheng":[1,4,5,...]}}}是不是这么个流程。。
  • [问题求助] tensorflow手势识别模型转换失败
    Start conversion job.Internal service error.Internal service error.
  • [问题求助] 如何在modelart中在tensorflow2环境下运行代码
    如何在开发环境中的notebook中使用tensorflow2环境运行从obs上上传的代码,现在notebook上好像只支持tensorflow1耶。
  • [AI大赛] 请问tensorflow2.0大概还有多久上线?
    如题,目前赛事群许多人反映需要tensoreflow2.0问题,而往往自己安装的环境发布会出现报错,希望能尽快上线tf2,或者希望能提供相关示例代码
  • [AI大赛] 关于tensorflow2.0的问题
    使用tensorflow2.0部署批量服务可以得到结果,但是发布之后为什么说 批量推理服务运行失败。我参考tensorflow1.14的自定义模型配置和推理代码进行配置config.json和customize_service.py文件,参考链接:[https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0092.html#section5](https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0092.html#section5).我刚刚也试了一下,在线服务也可以得到结果,就是发布不成功。
  • [AI大赛] 使用TensorFlow部署批量服务失败,报错Connection refused
    我按照官方文档的规范说明写好了config信息和推理文件,生成模型文件,但是在最后部署为批量服务时报错如下:Exceptionorg.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:8080/": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)推理文件:config.json:{"model_algorithm": "predict_analysis", "model_type": "TensorFlow", "runtime": "python3.6", "metrics": {}, "apis": [{"procotol": "http", "url": "/", "method": "post", "request": {"Content-type": "applicaton/json", "data": {"type": "object", "properties": {"req_data": {"type": "array", "items": [{"type": "string"}]}}}}, "response": {"Content-type": "applicaton/json", "data": {"type": "object", "properties": {"resp_data": {"type": "array", "items": [{"type": "number"}]}}}}}]}
  • [问题求助] 【BDC大赛】ModelArts目前是否支持TensorFlow2.0?
    ModelArts目前是否支持TensorFlow2.0?如果不支持的话,预计什么时候能够支持?
  • [技术干货] 如何基于Moxing的第一个训练案例文档,完成该案例
    看官网就知道,MoXing是华为云ModelArts团队自研的分布式训练加速框架,它构建于开源的深度学习引擎TensorFlow、MXNet、PyTorch、Keras之上。 相对于TensorFlow和MXNet原生API而言,MoXing API让模型代码的编写更加简单,允许用户只需要关心数据输入(input_fn)和模型构建(model_fn)的代码,即可实现任意模型在多GPU和分布式下的高性能运行,降低了TensorFlow和MXNet的使用门槛。另外,MoXing-TensorFlow还将支持自动超参选择和自动模型结构搜索,用户无需关心超参和模型结构,做到模型全自动学习。今天我解释的第一个案例,其实已经有对应文章(https://github.com/huaweicloud/ModelArts-Lab/blob/master/docs/moxing_api_doc/MoXing_API_GettingStarted.md),但是我在实际操作过程中,发现缺少了一些基于ModelArts如何完成该文档所描述的训练过程,所以我补上。我们需要把手写字的训练数据和测试数据上传到OBS上,如下图所示:这里的两个文件夹train-images-idx3-ubyte和train-labels-idx1-ubyte分别用于存放训练数据和训练输出文件,trainScript.py是训练代码(Moxing示例文档里给出的代码无法在Notebook里执行,需要在训练作业里执行脚本)。train-images-idx3-ubyte文件夹内容如下:这是从Lecun大师的网站上下载的,链接引导文档里有。接下来启动一个训练作业,进入ModelArts首页,选择训练管理-训练作业,创建一个作业,如下图所示:由于我选择了免费的GPU资源,所以原始代码会报错:not defined num_gpus,需要增加参数定义,并且不用担心data_url、train_url、num_gpus这三个参数的设置值,因为你在训练作业界面已经设置了,会使用你选择的值。注意,Python版本需要选择2.7,因为maxInt这个函数在3.x版本已经不存在了。训练代码如下:import sysimport tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data tf.flags.DEFINE_string('data_url', './mnist-train-dataset/train-images-idx3-ubyte', 'Directory for storing input data')tf.flags.DEFINE_string('train_url', './mnist-train-dataset/train-labels-idx1-ubyte', 'Directory for output logs')tf.flags.DEFINE_string('num_gpus','1','number of GPUS')flags = tf.flags.FLAGSmnist = input_data.read_data_sets(flags.data_url, one_hot=True) import moxing.tensorflow as mox def input_fn(run_mode, **kwargs):  num_epochs = 5  batch_size = 100  num_batches = num_epochs * mnist.train.num_examples // batch_size   def gen():    for _ in range(num_batches):      yield mnist.test.next_batch(batch_size)   ds = tf.data.Dataset.from_generator(gen,                                      output_types=(tf.float32, tf.int64),                                      output_shapes=(tf.TensorShape([None, 784]), tf.TensorShape([None, 10])))  x, y_ = ds.make_one_shot_iterator().get_next()  return x, y_  def model_fn(inputs, run_mode, **kwargs):  x, y_ = inputs  W = tf.get_variable(name='W', initializer=tf.zeros([784, 10]))  b = tf.get_variable(name='b', initializer=tf.zeros([10]))  y = tf.matmul(x, W) + b  cross_entropy = tf.reduce_mean(    tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))  return mox.ModelSpec(loss=cross_entropy, log_info={'loss': cross_entropy})  def optimizer_fn():  return tf.train.GradientDescentOptimizer(0.5)  mox.run(input_fn=input_fn,        model_fn=model_fn,        optimizer_fn=optimizer_fn,        run_mode=mox.ModeKeys.TRAIN,        log_dir=flags.train_url,        max_number_of_steps=sys.maxint)最后,点击提交按钮,提交你的训练任务,祝你好运,一次通过。
  • [Atlas 300] InferObjectDetection的搭建
    # 简介 最近刚开始接触菊厂的Atlas300,然后根据[InferObjectClassificaiton](https://gitee.com/HuaweiAtlas/samples/tree/master/Samples/InferObjectDetection)这个Sample去实现了一下,感觉效果还不错,先上结果: ![0.jpg](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/21/163151gvishzkn0wzwpjwb.jpg) ![1.jpg](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/21/163200ccgifrdmxengggxj.jpg) 可以看到准确度和速度都是很不错的,就在下面与诸君分享一下搭建的全部过程,也欢迎诸君分享相关的问题,不吝赐教。 # 环境和型号 我采用的Atlas型号是 ``` root@locke-RH2288H-V3:/var/dlog# npu-smi info +------------------------------------------------------------------------------+ | npu-smi 1.2.2 Version: 1.3.5.B896 | +-------------------+-----------------+----------------------------------------+ | NPU Name | Health | Power(W) Temp(C) | | Chip | Bus-Id | AICore(%) Memory-Usage(MB) | +===================+=================+========================================+ | 4 310 | Warning | 12.8 53 | | 0 | 0000:06:00.0 | 0 2375 / 8192 | +-------------------+-----------------+----------------------------------------+ | 4 310 | OK | 12.8 54 | | 1 | 0000:07:00.0 | 0 2375 / 8192 | +-------------------+-----------------+----------------------------------------+ | 4 310 | OK | 12.8 55 | | 2 | 0000:08:00.0 | 0 2375 / 8192 | +-------------------+-----------------+----------------------------------------+ | 4 310 | OK | 12.8 57 | | 3 | 0000:09:00.0 | 0 2375 / 8192 | +===================+=================+========================================+ root@locke-RH2288H-V3:/var/dlog# uname -a Linux locke-RH2288H-V3 4.4.0-93.116+ #1 SMP Fri Jan 25 18:53:31 CST 2019 x86_64 x86_64 x86_64 GNU/Linux ``` 在**模型的准备**这一步中进行模型转换所使用的tensorflow以及python版本为 ``` (tensorflow) root@locke-RH2288H-V3:/var/dlog# python --version Python 3.5.5 (tensorflow) root@locke-RH2288H-V3:/var/dlog# pip3 show tensorflow Name: tensorflow Version: 2.0.0 Summary: TensorFlow is an open source machine learning framework for everyone. Home-page: https://www.tensorflow.org/ Author: Google Inc. Author-email: packages@tensorflow.org License: Apache 2.0 Location: /usr/local/lib/python3.5/dist-packages Requires: numpy, google-pasta, gast, six, wheel, astor, absl-py, wrapt, keras-applications, keras-preprocessing, opt-einsum, termcolor, tensorflow-estimator, protobuf, grpcio, tensorboard Required-by: (tensorflow) root@locke-RH2288H-V3:/var/dlog# ``` # 模型的准备:从checkpoint文件到pb文件,从pb文件到om文件 我使用的模型文件是从[Yolov3](https://github.com/wizyoung/YOLOv3_TensorFlow/releases/)的release上下载下来的,只下载了yolo_tf_weights.zip文件,然后按照[这篇帖子的内容进行格式转换](https://bbs.huaweicloud.com/forum/thread-45383-1-1.html?ticket=ST-1839417-fwh76qs7uiPGeXrdP1uQdpFa-sso),当然这其中碰到了一些问题。 因为我使用的tensorflow版本比较高,所以为了能够正常的按照上面这篇帖子的代码生成pb文件,所以进行了一些修改,以下是我在实际的模型转换中使用的代码 ``` import tensorflow.compat.v1 as tf from tensorflow.python.framework import graph_util from tensorflow.python.platform import gfile def freeze_graph(input_path, output_path): # print("The package has been loaded") output_node_names = "yolov3/yolov3_head/feature_map_1,yolov3/yolov3_head/feature_map_2,yolov3/yolov3_head/feature_map_3" saver = tf.train.import_meta_graph(input_path+".meta",clear_devices=True) graph = tf.get_default_graph() input_graph_def = graph.as_graph_def() with tf.Session() as sess: saver.restore(sess, input_path) output_graph_def = graph_util.convert_variables_to_constants( sess = sess, input_graph_def = input_graph_def, output_node_names = output_node_names.split(",")) with tf.gfile.GFile(output_path, 'wb') as fgraph: fgraph.write(output_graph_def.SerializeToString()) if __name__=="__main__": tf.disable_eager_execution() input_path = "./yolov3.ckpt" output_path = "./yolov3.pb" freeze_graph(input_path, output_path) ``` 【注意】因为我使用的是tensorflow 2.0,所以我使用了*import tensorflow.compat.v1 as tf*的指令,如果你用的是普通1.x版本的tensorflow可能需要直接*import tensorflow as tf*。 【注意】我在运行这个脚本的过程中,因为出现了一个不能同时执行eager_execution的报错,所以我添加了*tf.disable_eager_execution()*,这一行可以根据你的这个脚本的运行情况自行添加或者删除掉。 【可能出现的问题1】首先我碰到的一个问题是在服务器安装tensorflow的过程中(我是通过ssh远程登录到一台安装了atlas300卡的服务器来运行这个demo的),缺失了wheel的依赖包,而在服务器的内部网络中无法使用*pip3 install wheel*的指令直接安装这个包,所以我后来的解决方案是直接在wheel的官方网站上下载.tar.gz文件,然后将其上传到我的服务器上,通过执行*pip3 install wheel --no-index --find-links file:/home/MyPackages/wheel-0.34.2.tar.gz*这个指令(将/home/MyPackages替换为你上传.tar.gz文件的目录)即可从本地安装,解决了tensorflow的依赖包的问题。 【可能出现的问题2】我后来安装好了tensorflow之后,在*import tensorflow*时依然会报无法找到这个包的错误,解决方法是通过*pip3 show tensorflow*找到tensorflow在本机上安装的路径(也就是location)所对应的这一行,然后执行命令*export PYTHONPATH=/usr/local/lib/python3.5/dist-packages:$PYTHONPATH.*来添加到路径中,然后就可以成功的*import tensorflow*了 这一步可以输出一个pb文件,然后我们需要通过ddk提供的omg工具,将这个pb文件转化为atlas300可以使用的.om文件,具体的执行命令为 ``` /your_path_to_ddk/ddk/bin/x86_64-linux-gcc5.4/omg --model /your_path_to_pb_file/yolov3.pb --framework 3 --output ./yolov3 --insert_op_conf ./aipp_yolov3_picture.cfg --input_shape "Placeholder:1,416,416,3" ``` 【注意】上面的这个aipp_yolov3_picture.cfg的配置文件可以在[InferObjectClassificaiton](https://gitee.com/HuaweiAtlas/samples/tree/master/Samples/InferObjectDetection)的*./data/models*下面找到,具体可以参照这个文件夹下面的README.md # 模型编译 拥有了上一步的.om文件之后,那么几乎是万事俱备了,我们需要更新graph.config的信息,将其中ObjectDetectionEngine的value改成正确的我们存放.om文件的路径,然后就可以执行./build.sh来编译了 ``` root@locke-RH2288H-V3:/home/InferObjectDetection# ./build.sh -- The C compiler identification is GNU 5.4.0 -- The CXX compiler identification is GNU 5.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /home/InferObjectDetection/out Scanning dependencies of target ObjectDetection Scanning dependencies of target Device [ 14%] Building CXX object device/CMakeFiles/Device.dir/home/InferObjectDetection/ObjectDetectionEngine/ObjectDetectionEngine.cpp.o [ 28%] Building CXX object device/CMakeFiles/Device.dir/home/InferObjectDetection/ObjectDetectionEngine/YoloV3PostProcess.cpp.o [ 42%] Building CXX object device/CMakeFiles/Device.dir/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp.o [ 57%] Building CXX object host/CMakeFiles/ObjectDetection.dir/home/InferObjectDetection/DstEngine/DstEngine.cpp.o [ 71%] Building CXX object host/CMakeFiles/ObjectDetection.dir/home/InferObjectDetection/main.cpp.o [ 85%] Linking CXX executable ../ObjectDetection [ 85%] Built target ObjectDetection [100%] Linking CXX shared library ../libDevice.so [100%] Built target Device root@locke-RH2288H-V3:/home/InferObjectDetection# ``` 编译成功! # 输出 编译成功的结果放到out下面,我们可以通过执行例如 ``` ./ObjectDetection -i ./test.jpg -t 1 -m ./ObjectDetection.om -g ./graph.config -s 0 -e 1 ``` 来测试通过一张图片的Object Detection的效果,但是要记得把.om文件和test.jpg文件放置到当前的out目录下面,不然是会执行失败的。同时,如果需要获得标记后的图片,需要先在out目录下新建一个result_files的目录才行。 # 反思 整个过程的log会储存在/var/dlog下面,经过检查,发现在device-xxxxxxx.log下面产生了很多诸如这样的告警 ``` [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.893.583 Destroy vdec api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:151:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.893.723 Destroy JpegD api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:158:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.893.794 Destroy vpc api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:165:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.893.871 Destroy vdec api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:151:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.893.938 Destroy JpegD api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:158:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.893.999 Destroy vpc api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:165:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.894.071 Destroy vdec api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:151:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.894.135 Destroy JpegD api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:158:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.894.198 Destroy vpc api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:165:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.894.271 Destroy vdec api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:151:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.894.337 Destroy JpegD api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:158:~DecodeEngine], Msg: app log level: error [ERROR] APP(2073,graph_2):2020-04-21-15:52:28.894.400 Destroy vpc api!,[/home/InferObjectDetection/DecodeEngine/DecodeEngine.cpp:165:~DecodeEngine], Msg: app log level: error ``` 这是因为我们的DecodeEngine的析构函数中会产生三个告警(详情可以查看/DecodeEngine/DecodeEngine.cpp),而我们在graph.config中定义了4个DecodeEngine,所以一共会产生以上的12个告警。不过我认为,这个析构函数应该是比较正常的行为,但是却会在log里面记录ERROR级别的信息,所以我还是觉得有点奇怪的,为什么会这样设计呢?可能这就得研发人员来回答了。 总的来说,在整个sample的过程中碰到的一些小问题都不是来自于sample本身,官方的README.md文档也写的还是比较详尽的,整个sample在自己的机器上重新运行起来的难度比较低,欢迎大家尝试一下,如果大家在这个过程中碰到了什么问题,也欢迎来这个帖子底下回帖,我们可以一起交流经验,共同学习:)
  • [问题求助] ascend环境下的TensorFlow是运行在CPU上的还是运行在ascend910上的?
    ascend环境下的TensorFlow是运行在CPU上的还是运行在ascend910上的?在modelarts里的notebook环境中申请的如下环境:
  • [问题求助] 想问下ModelArts上哪些算法(TensorFlow和Caffe)支持训练后的模型转为.om?
    想问下ModelArts上哪些算法(TensorFlow和Caffe)支持训练后的模型转为.om?预置算法中好像只有yolov3_resnet18明确表明可以转为.om,其他的没有说明。
  • [问题求助] 请问模型转换方面,TensorFlow哪个版本训练的模型适配的比较好,Caffe呢?
    最近在模型转换方面遇到了很多不支持算子,想问下模型转换方面:如果用.pb模型的话,TensorFlow哪个版本训练的模型适配的比较好?对Caffe模型的支持呢?我记得文档中好像说Caffe原生算子基本都支持?
  • [问题求助] 请问有人跑过以tensorflow为后端的Keras中的Resnet50网络吗?能在Ascend 310上运行吗?
    请问有人跑过以tensorflow为后端的Keras中的Resnet50网络吗?能在Ascend 310上运行吗?有没有例子提供参考呀?