VTA: An Open, Customizable Deep Learning Acceleration Stack Jul 12, 2018 Thierry Moreau(VTA architect), Tianqi Chen(TVM stack), Ziheng Jiang†(graph compilation), Luis Vega(cloud deployment) Advisors: Luis Ceze, Carlos Guestrin, Arvind Krishnamurthy Paul G. Allen School of Computer Science & Engineering, University of Washington Hardware acceleration is an enabler for ubiquitous and efficient deep
はじめに NNVMは各種フロントエンドなディープラーニングフレームワーク(Caffe/Keras/MXNet/PyTorch/Caffe2/CNTK)で構築した演算グラフを、TVMというテンソル演算スタックを介してさまざまなバックエンド(LLVM,OpenCL,Metal,CUDA)を用いたランタイムに変換するコンパイラです。原理的には学習にも使えるんじゃないかと思うのですが、基本的には推論のデプロイ用というかんじですね。 すごく乱暴にいうと、ラズパイ等の非力なデバイスでなるべく速く動くようにするコンパイラ、です。 公式リリースの絵がとてもわかりやすいです。 日本製フレームワーク(Chainer, NNabla)がガン無視されていて悲しいですね。。 残念ながら現時点では、PyTorchからONNX経由での経路は、OSXでは通りませんでした(後述)。素直にサポートされているMXNetで試して
TensorFlow、Chainer、MXNetなどのディープラーニングのフレームワークによって作成した学習済みのモデルを使って、iPhoneやAndroidスマートフォン、Raspberry PIなどの様々なバックエンドデバイスで推論するために、Amazonは昨年の10月にNNVM/TVMと呼ばれるコンパイラを発表しました。 NNVM/TVMについて NNVM NNVMは、フレームワークで作成した学習済みモデルを、共通のモデル(以降、便宜上NNVMモデルと呼びます)に変換するためのモジュールです。 NNVMは各フレームワークで生成されたフォーマットの異なる学習済みモデルを、NNVMモデルに変換します。これにより、各フレームワークで生成する学習済みモデルの差異をNNVMで吸収することができます。 NNVMについては、以下のQiita記事がよくまとまっていますので、こちらを参照ください。 【
この記事について NNVMはDeep learningの推論用コンパイラの一つで、AWSなどによりサポートされています。NNVMのアーキテクチャは以下の通りです。(公式HPより) この記事では、NNVM/TVMの導入と簡単なモデルのコンパイルについて記載します。 この記事の目標 今回は上図で示されているところの、Keras->NNVM->TVM->LLVM->x86の手順を実行します。 NNVM/TVMをUbuntu(x86)上の環境に導入します KerasのサンプルモデルをNNVMでコンパイルします コンパイルされたNNVMモデルからTVMでCPU向けの推論モジュールに変換します NNVM/TVMで作成したモジュールで推論を実行します NNVMの公式チュートリアルを参考にして進めていきます。 Compile Keras Models Ubuntu 16.04、g++ 5.4.0、pyth
AWS Machine Learning Blog Introducing NNVM Compiler: A New Open End-to-End Compiler for AI Frameworks You can choose among multiple artificial intelligence (AI) frameworks to develop AI algorithms. You also have a choice of a wide range of hardware to train and deploy AI models. The diversity of frameworks and hardware is crucial to maintaining the health of the AI ecosystem. This diversity, howev
6. 6 @ikwzmPYNQ 祭り(2017/3/4) 目次 ・ Polyphony の紹介 ・ Polyphony での記述例(fibonacci)とインターフェース ・ MessagePack-RPC Server on FPGA-SoC-Linux ・ Design Flow ・ PYNQ-Z1 での動作 ・ 課題 7. 7 @ikwzmPYNQ 祭り(2017/3/4) Polyphony (本日の主役) の紹介(1) ・ Python ベースの高位合成コンパイラ ・ 作っているのは 有限会社シンビー http://www.sinby.com/PolyPhony/index.html ・ github でも公開中 https://github.com/ktok07b6/polyphony ・ 高位合成友の会 第3回(2015/12/08) でのスライド https://www.s
2016年09月14日19:42 カテゴリバッテリー・電池関連電子タバコの考察 リチウムイオン電池と、温度(と発煙)について こんにちは。 さて今回は。 電子タバコで良く使われている。 18650リチウムイオン電池の、温度回りについて。 掘り下げていきたいと思います。 さて。 まず、18650なリチウムイオン電池は。 必ず、ガス排出弁がついています。 まあそもそも、なんでコレが必要なのか、そして電池がヤバい状況にならずに使うには、辺りをね。 まず、リチウムイオン電池の構造から。 まあ正極と負極が、セパレータで分離されつつ、ぐるぐるまきになってるのが、リチウムイオン電池ですが。 正極と負極だけではなく、「リチウムイオン」が染みこんでる、「電解液」が、この間には存在します。 まあクルマ用のバッテリー、鉛蓄電池で言う所の「バッテリー液・希硫酸」ですね。 コイツはどれくらい含まれてるのか。 総務省
1.はじめに Arduinoをある程度使い込んでくると、Arduino関係の本やサイトに、「ブートローダ」(あるいは「ブートローダー」)という言葉が良く出て来ることが気になってきます。ブートローダって一体なんでしょう。 2.ブートローダの働き(一般論) 「ブート」とはマイコンが起動することを意味します。「ローダ」とはプログラムやデータなどを、メモリに読み込むプログラムを意味します。それらが合わさった「ブートローダ」とは何を意味するのでしょうか?結論から言うと、マイコンの起動時に、外部からプログラムをメモリに読み込むプログラムの事をブートローダと言います。 Arduinoの話から離れてしまいますが、例えば、例えばSDカードに実行したいプログラム書かれているマイコンシステムの場合について考えます。SDカード中のプログラムはRAMに転送してからしか実行する事ができません。この場合、起動時にSDカ
XGboostは「eXtreme Gradient Boosting」の略で2014年に発表された手法です。 勾配ブースティングと呼ばれるアンサンブル学習と決定木を組み合わせた手法で非常に高い汎化能力を誇ります。
An End to End Machine Learning Compiler Framework for CPUs, GPUs and accelerators Learn More Apache TVM is an open source machine learning compiler framework for CPUs, GPUs, and machine learning accelerators. It aims to enable machine learning engineers to optimize and run computations efficiently on any hardware backend. About Apache TVM The vision of the Apache TVM Project is to host a diverse c
先月、ひょんなことがきっかけで、TVM のバックエンド開発に関わっていました。 そのときの成果をブログとしてまとめて、TVM のウェブサイト上に載せました。ぜひご覧ください。 開発の成果の例として、PyTorchで学習したモデルをAMDGPU 向けにコンパイルし、推論を実行、ということができるようになりました。 ここでは、上のブログの内容や、開発に参加するにいたった経緯、開発中のこぼれ話などを紹介したいと思います。 TVM AMDGPUバックエンドの紹介 TVMは、様々なハードウェア向けに Deep Learning 推論用の最適化コードを出力するための、ドメイン特化言語 + バックエンドコンパイラからなります。 僕が今回関わったのは、そのうちのAMDGPU向けバックエンドの開発です。このバックエンドは、TVMのLLVMコードジェネレータと、LLVMのAMDGPUバックエンドを組み合わせて
导言 Alexnet 横空出世的两年之前,我选择了深度学习作为本科毕设方向。当时的深度学习并没有现在那么火热,也没有现有的GPU卷积实现,我在实验室的 GTX 470上面第一次手写GPU卷积用以支持卷积RBM,当时针对CPU十多倍的加速比让我兴奋不已。虽然最终那段研究经历并没有结果,但是计算本身对于机器学习的推动作用却深深地印在了我的脑海里。 深度学习系统支是推动进步的引擎,而在引擎的核心,则是像cuDNN这样的针对硬件的高效算子实现。每一个高效的算子库的背后都是大量工程的工程努力。虽然我自己已经从事了几年深度学习系统的工作,如何实现高效的硬件代码始终对于我来说是一个头疼的问题。最近的深度学习系统趋势开始进行更多的高层优化:包括探索从不同的数据表示,精度和算子融合等各个方面,而这些优化势必会带来更多的算子版本需要去优化,这无疑是一个非常大的工程问题。我们还需要把这个问题乘上包括移动芯片,移
Accelerated Learning cuDNN provides kernels, targeting Tensor Cores, to deliver best available performance on compute-bound operations. It offers heuristics for choosing the right kernel for a given problem size. Expressive Op Graph API The user defines computations as a graph of operations on tensors. The cuDNN library has both a direct C API and an open-source C++ frontend for convenience. Most
スイッチサイエンスさんのATmega32U4搭載マイコンボードを購入して遊んでみました。 ATmega32U4の概要 Arduino Leonardo互換として扱える USBでパソコンにつなげば、マウスやキーボードデバイスとして利用できる(HID対応) VCCの出力は5V さらに詳細はスイッチサイエンスさんのATmega32U4ブレークアウトボードのページを見てください。 ちゃんとArduino互換にするには、ブートローダーを書きかえる必要がある。けど、やらなくてもなんとかなる このマイコンボードはデフォルトでDFU(Device Firmware Update)機能が有効になっており、USB経由でソフトウェアを書き換えることができます。 ただし、DFU機能では、ブートローダー自体は書き換えできないため、完全にArduino互換にするにはAVR ISP mkIIや、別途Arduino UN
取扱説明書ご利用条件 本ウェブサイトによる取扱説明書※をご覧になる前に、以下の「ご利用の条件」にご同意いただいた上で、ご利用ください。 (※PDFファイルです。比較的ファイル容量が大きいのでご注意ください。) ご利用の条件 1.本ダウンロードサービスの内容 パナソニック株式会社の許可なく本ウェブサイトに公開されている取扱説明書の内容の一部、または全部を複製、改変したり、送信したりすることはできません。お客さまは、お持ちの当社商品のご利用のために、本ウェブサイトからダウンロードした取扱説明書を1部のみプリントアウトすることができます。 本ウェブサイトでは、当社が発売した全ての機種の取扱説明書は公開しておりません。ご希望の取扱説明書が見つからない場合は、ご購入店、お近くの当社商品の取扱店、または当社サービス会社に直接お問い合わせの上、ご購入いただきますようお願いいたします。ただし、商品自体の生
2013/04/27からのアクセス回数 9188 小さいながら便利屋ATmega32U4 † 飯田さんのブログ を見て、ATmega32U4なら小さくてブレッドボードで使うのに最適だと思ったので、 早速スイッチサイエンスからATmega32U4を購入しました。 このボードは、小さいながらリセットボタンやチェック用のLEDも付いているので とても重宝しています。 ↑ Arduino DuemilanoveをArduinoISPにする † 以下手順でArduino DuemilanoveをArduinoISPにします。 Arduino Duemilanoveを接続して、Arduino IDEを起動 IDEからファイル>スケッチの例>ArduinoISPを選択 ArduinoISPを書き込み ↑ Arduino DuemilanoveとATmega32U4の接続 † 飯田さんのArduinoUn
電気の迷宮 過去記事はカテゴリの 【 目次 】 で一覧できます。 自作の電子工作が中心な不定期更新のブログ?です。 アルカリ乾電池の使用温度範囲は5~45℃となっているが5℃未満でも使う場合もあるだろうし、低温時の容量(mAh)を長年探していたのだが見つからなかった。 青森だと冬に60%位の性能になるという実感を見つけたくらい。 それが最近 Iindustrial Panasonic のデータシートが差し替えられて温度特性が載っているものになった。 アルカリ乾電池(金赤パナ相当)はこのページのPDFの絵をクリックすると見られます。 他にマンガン乾電池、EVOLTAでも放電条件が違いますが見られます。 どうもデータシート自体は昔からあったもののようだが公開されていなかったか検索に引っ掛かる場所に無かったようである。 例えば単三アルカリ乾電池(LR6、AA)の定電流特性 アルカリ乾電池は容量は
Getting Started with the LLVM System using Microsoft Visual Studio¶ Overview¶ Welcome to LLVM on Windows! This document only covers LLVM on Windows using Visual Studio, not WSL, mingw or cygwin. In order to get started, you first need to know some basic information. There are many different projects that compose LLVM. The first piece is the LLVM suite. This contains all of the tools, libraries, an
Notice You are accessing a machine-readable page. In order to be human-readable, please install an RSS reader. All articles published by MDPI are made immediately available worldwide under an open access license. No special permission is required to reuse all or part of the article published by MDPI, including figures and tables. For articles published under an open access Creative Common CC BY li
Intel® Integrated Performance Primitives (Intel® IPP) is an extensive library of ready-to-use, domain-specific functions that are highly optimized for diverse Intel architectures. Its royalty-free APIs help developers: Take advantage of Single Instruction, Multiple Data (SIMD) instructions Improve the performance of computation-intensive applications, including signal processing, data compression,
インテル Integrated Performance Primitives (IPP) とは、マルチメディア・画像処理・信号処理のために最適化された基本関数群からなるソフトウェアライブラリである。ライブラリはインテルプロセッサならびに互換プロセッサをサポートしており、Windows、Linux、macOS、Androidオペレーティングシステムの各プラットフォームで利用可能である。 ディスパッチ機能[編集] IPPは複数世代のプロセッサごとに実装された複数の最適コードの中から、実行時に環境に応じて最適なものを動的選択するディスパッチ機能をサポートしている[2][3]。たとえばSSE/SSE2命令までをサポートするプロセッサではSSE/SSE2を利用したコードを、AVX命令までをサポートするプロセッサではAVXを利用したコードを実行する、などである。IPPを動的リンク(ダイナミックリンク)
勉強会概要 pixiv.connpass.com 発表 Blenderを使ってCUIベースで3D画像処理する by haya (15min) 下記のピクシブfactoryで使われている画像処理にBlenderを使ってる話 ものづくりがもっと楽しくなるアイテム制作サービス - ピクシブファクトリー - pixivFACTORY 実はブログに詳しく書いてあるとのこと。このあたりかな BlenderとPythonで3Dモデルを動的生成してレンダリングする - pixiv inside 二次元から三次元を作る方法 — サーバ内でBlenderを動かしてみたら意外にもイケていたという話 - pixiv inside 平面的なもの(Tシャツ)にディスプレイスメントマッピングと質感、パースで全然違和感なかった 画像処理する前に一度元画像からリサイズしてから、変換や合成をしている 元画像は容量的に重すぎて
EC2のFPGAインスタンス向けに提供されているaws-fpga SDKで、SDAccelというツールが使えるようになりました。少しためしてみたので紹介します。 高位合成とOpenCLとSDAccel FPGAを動作させるためには回路を作る必要があります。基本的な方法として、VerilogやVHDLという言語を使って論理回路を組み立てるののですが、普通のプログラミングとはかなり考え方が異なるので、プログラマにとっては正直敷居が高いです。 これとは違ったやりかたとして、高位合成という方法があります。簡単にいうと普通のプログラミング言語をつかって回路を記述して、それを回路に変換するという方法です。CやC++を使って記述したプログラムをメモリとCPUを使って走らせるのではなく、ハードウェアに載せられる論理回路として合成してしまうことが可能なのです。これなら普通のプログラマにも手に負えるだろうとい
AWS News Blog Developer Preview – EC2 Instances (F1) with Programmable Hardware Have you ever had to decide between a general purpose tool and one built for a very specific purpose? The general purpose tools can be used to solve many different problems, but may not be the best choice for any particular one. Purpose-built tools excel at one task, but you may need to do that particular task infreque
pixiv さんが話す画像処理技術、こりゃ面白そう!ということで connpass のページを見つけて即申し込んだ会でした。 pixiv Night #02 - 画像処理技術(go, blender, C++ライブラリ等) - connpass - 画像処理は大学の頃に研究で OpenCV で動画像処理をやって以来惹かれている分野で、Web アプリケーションエンジニアとなった今、pixiv 社が提供する画像処理をコアとする Web サービスの話は興味のど真ん中だった。 pixiv のオフィスに入るのは初めてで、噂の絵馬や巨大な1枚机を見れたのも良かったです。オフィス見学は楽しい。 トークはどれも面白く、個人的には @saturday06 さんの Halide の話と @harukasan さんの jpeg ブロックノイズの話が特に刺激的だった。Halide 遊んでみよう。 懇親会では久しぶ
Amazon Web Services ブログ 開発者プレビュー ー EC2 Instances (F1) with Programmable Hardware あなたは汎用ツールと非常に特殊な目的のために作られたツール、どちらかを決めなければならない経験をしたことはありませんか? 汎用ツールは、さまざまな問題を解決するために使用できますが、特定な用途に最適な選択ではないかもしれません。目的に合ったツールは1つのタスクに優れていますが、頻繁にその特定のタスクを実行する必要があります。 コンピュータエンジニアは、アーキテクチャと命令セットを設計するときに、この問題に直面し、非常に広い範囲のワークロードにわたって良好なパフォーマンスを実現するアプローチを常に追求しています。 時々新しいタイプの作業負荷と作業条件が発生し、カスタムハードウェアによって最もよく対処されます。 これにはもう1つのバラ
社内勉強会のネタです. HalideとDarkroomという画像処理を並列化するためのソフトウェアの研究についてのちょっとしたサーベイ発表のスライドを公開します. Halideについては,サンプルコードも書いてみました. とある画像処理を,下のメソッドチェーンで記述するだけで,「画像全体を8行毎に切って,それをマルチスレッドで処理し,8行毎の処理は内部的に4ピクセル毎にベクタライズして処理する」という並列化処理に置き換えられてしまいます. ゴイスー. temp.split(y, y, yi, 8).parallel(y).vectorize(x, 4); 例えば,25×25のサイズフィルタを畳み込むぼかし処理を上記の並列化で高速化した場合,画像サイズが768×1024のケースで,15倍くらい高速化することができました. また,HalideはC++にインラインでそのまま書けるのでポータビリテ
プログラミングスクールのつながりがキャリアにつながるのかもしれない話 / Connections at programming schools may lead to a career
MIT Halide(http://halide-lang.org/)というC++の高速画像処理ライブラリが去年リリースされた。C++内のDSLを使っていて、画像処理を、 計算のアルゴリズム アルゴリズム自体は副作用がなく、純粋関数的に定義される。 実装の詳細(「スケジュール」) スケジュールは、計算の並列化と、複数の計算ステップの融合を最適化する方法を指定する。 を分離した形で簡潔に書ける。 凄いのは、抽象的に書いたアルゴリズムからライブラリによって低レベルコードを出力させたほうが、手書きでチューニングしたコードよりも速いことすらあること(という作者の主張)。たとえば最近開発されたlocal Laplacian filterというの複雑なアルゴリズム(http://people.csail.mit.edu/sparis/publi/2011/siggraph/、pixelwise ope
Halideでプログラミングするための入門記事 Halide入門とOpenCVとの比較 チュートリアルとOpenCVとの比較. OpenCVによるHalideプログラミングの開発支援 Halideによるポイントオペレータの実装 cast, saturating_cast, clamp, min, select Halideによる2次元FIRフィルタの実装 BoundaryConditions, RDom, sum, fast_exp Halideによる画像境界の取り扱い(BoundaryConditions) BoundaryConditions Halideによるプログラムのパフォーマンス計測 HalideにおけるバッファHalide::Bufferの操作(HalideとOpenCVの相互変換) Buffer Todo 書く予定のもの.これだけあればだいたいかけるようになる? Visua
Halideという画像処理向けのプログラミング言語を始めるべく Visual Studio 2015でHalideの環境構築をしてみました 今回はその手順について紹介します はじめに やること 事前に必要なもの ソースの入手 Halid LLVMとClang ビルド LLVMのビルド Clangのビルド Halideのビルド Halideのプロジェクトを作成してみる CMake ソース プロジェクトの作成とビルド パスの設定 実行結果 おわりに 【余談】tutorialのビルドにハマった話 __iob_funcの未定義 sprintfの未定義 NT32の再定義 はじめに HalideとはMITが開発している画像処理向けの言語です 公式ページやブログなどの紹介によると以下の特徴があるようです C++内で使用するDSL(domain-specific language)である 画像処理を簡単に
最近はDeep Learningを使うと、オシャレなんだそうです。でも面倒くさい勉強は極力したくありません。OpenCVのdnnモジュールが、3.4.2ぐらいからレギュラー扱いで本体に吸収されたそうなので、お手軽にこれを使ってみたいと思います。 1.インストール OpenCV3.4.2以降のソースコードを用意します。ここではgithubに上がっているmaster版[1]を使おうと思います。開発環境は、Windows10のMSVC2015です。[1]-[3]の3つをダウンロードして、例えばc:\workspaceなどに同じフォルダに並べて置きます。 1.1 ダウンロード github.com GitHub - opencv/opencv_extra: OpenCV extra data GitHub - opencv/opencv_contrib: Repository for OpenCV
テストプログラムを実行してみましたが、実行速度が遅いという不満があります。テストプログラムの引数のいくつかに、使ってこなかったものの気になるパラメータがありました。backendと、targetです。 backend (value:0) Choose one of computation backends: 0: automatically (by default), 1: Halide language (http://halide-lang.org/), 2: Intel's Deep Learning Inference Engine (https://software.intel.com/openvino-toolkit), 3: OpenCV implementation target (value:0) Choose one of target computation devi
2017/11/16日に開催されました、”画像処理を簡単に高速化してみませんか!?~Halideによる画像処理プログラミング入門~“では、Halide を初めて知った方向けに、言語の概要と、プログラムの記述方法、活用事例の紹介等を行いました。 本日、こちらのセミナーで使用した資料を公開いたしました。セミナーに参加いただいた方の復習用にご活用下さい。また、残念ながらセミナーに参加できなかった方にも、この資料でHalide による画像処理の高速化について学んでいただけたら幸いです。
CMake は、複数のプラットフォームで動作するビルド プロセスを定義するためのクロスプラットフォームのオープン ソース ツールです。 この記事は、CMake についてよく理解されていることを前提としています。 CMake の詳細については、CMake のドキュメントをご覧ください。 詳細については、CMake チュートリアルを参照してください。 Note CMake は、過去数回のリリースで Visual Studio とより一層緊密に統合されてきました。 優先するバージョンの Visual Studio のドキュメントを表示するには、 [バージョン] セレクター コントロールを使用します。 このページの目次の一番上にあります。 Visual Studio の CMake ネイティブ サポートを使用すると、Windows、Linux 用 Windows サブシステム (WSL)、およびリ
A program database (.pdb) file, also called a symbol file, maps the identifiers that you create in source files for classes, methods, and other code to the identifiers that are used in the compiled executables of your project. The .pdb file also maps the statements in the source code to the execution instructions in the executables. The debugger uses this information to determine two key pieces of
C++初心者Advent Calendar 2015 この記事はC++初心者Advent Calendar 2015 9日目の記事です << 8日目 | C++のポインタ渡しと参照渡しの使い分け || 10日目 | テンプレートでコケた話 >> 17日目 | C99からC++14を駆け抜けるC++講座 >> 個人的には、歌舞伎座.tech #8 「C++初心者会」とか見て以降、「初心者」が怖くなってしまっていますが(初心者がBoost.asioをつかえるもんか!)、ここまでは初心者向けでものすごくホッとしています。初日の 初心者が C++ を勉強するときに最低限押さえておいたほうがよい C++11/14 の機能 を除いてですが(最近の初心者は継承が使えるのか・・・怖い) 8日目 | C++のポインタ渡しと参照渡しの使い分けとかはさっぱりしていてわかりやすいのではないでしょうか。なので見ろ(
これは,VisualStudio AdventCalenderの5日目の記事です. VisualStudio の AdventCalender に空きがあって,丁度誰もVisualStudio 2017 RCのClangについて書いていなかったので,参加してみました.下手な文章ですが,読んでいただけると幸いです. #include <Windows.h> をするとコケるという VisualStudio 2015 時代ではあんまりよくなかった Clang with Microsoft CodeGen でしたが,VisualStudio 2017 で #include <Windows.h>をしてもこけなくなりました この記事では,VisualStudio 2017 RC上で Clang を用いてコンパイルする方法を書きます.また,それでは内容スカスカな記事になるので,初心者がずっこけそうな日
a language for fast, portable computation on images and tensors Halide is a programming language designed to make it easier to write high-performance image and array processing code on modern machines. Halide currently targets: CPU architectures: X86, ARM, MIPS, Hexagon, PowerPC, RISC-V Operating systems: Linux, Windows, macOS, Android, iOS, Qualcomm QuRT GPU Compute APIs: CUDA, OpenCL, OpenGL Com
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く