ぱたへね!

はてなダイアリーはrustの色分けができないのでこっちに来た

The RISC-V Reader: An Open Architecture Atlas

パターソン先生の動画を見て、これは読まねばならぬと思い読んでみました。 https://www.amazon.com/RISC-V-Reader-Open-Architecture-Atlas/dp/0999249118/ Amazon.co.jpでは取り扱ってないけど、.comでは普通に買えます。不当に高いのをつかまないように。…

GCPでTPUを使えるようにする

GCPでTPUを使いたくて試行錯誤した途中経過です。 コンソールからの登録 GCPコンソールの左上からTPUを登録しようとしても、なかなか上手く行かず挫折。 結局 ip address rangeに何を入れて良いのか分かりませんでした。 ctpuコマンドを使う ctpuコマンドをC…

京都Devかふぇ#4 〜レガシーシステム考古学〜

京都Devかふぇ#4 〜レガシーシステム考古学〜にLT参加してきました。 僕の発表資料です。 Kyoto dev caffe from Natsutani Minoru どの人の発表もすごく面白かったです。 レガシーコードとの戦いの軌跡 レガシーから脱出するために、レビューにきっちりと時…

Rustの配列操作メモ

Rust Standard Library Cookbook から、気になった配列の操作をメモしました。 要素の取りだし 配列の要素を取り出すにはgetを使います。Option型で返ってくるので、Someかunwrapでその値を取り出せます。[ ]でも同じ動きです。 [ ]を使って配列の領域外にア…

組合せ最適化アルゴリズムの最新手法―基礎から工学応用まで

組合せ最適化アルゴリズムの最新手法―基礎から工学応用までを読みました。 80年代後半、90年代の論文がよく出てきており、20年前の最先端をまとめた本です。題材に半導体関連のネタが多く、興味を持って最後まで読めました。シミュレーティド・アニーリング…

RustでSimulated Annealing

本棚を見たら組合せ最適化アルゴリズムの最新手法―基礎から工学応用までという本を見つけました。Simulated Annealingのアルゴリズムが載っていたので、せっかくだからRustで実装してみました。 問題 この図の回路を2つのエリアにわける方法を考えます。簡単…

rustでマクロ

rust standard library cookbookから。 マクロを使って、簡単な可変長引数を実現する例。 macro_rules! multiply { ( $last:expr ) => { $last }; ( $head:expr, $($tail:expr), + ) => { $head * multiply!($($tail), +) }; } fn main() { let val1 = multi…

Rustでグラフ

ほとんどライブラリの使い方レベルだけど、なんとか動いた。 extern crate petgraph; use std::fs; use std::io::Write; // https://docs.rs/petgraph/0.4.13/petgraph/ use petgraph::Graph; use petgraph::algo; use petgraph::dot::Dot; fn main() { let …

久しぶりにKerasを動かしたときのメモ

import keras しただけでこういうエラーがでる。 ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory libcublasが見つからないだけなので、.bashrcにLD_LIBRARY_PATHを追加する。 export LD_LIBRARY_PATH=$LD_LIBRA…

TVMで使われている最適化の探索手法

TVMとは ペーパーはこちらからダウンロードできます。 https://arxiv.org/abs/1802.04799 TVMは、ASICやAPGAの様な組込様CPU等、様々なバックエンドでDeep Learningを動かすことを目的としたコンパイラです。 グラフレベルや演算子レベルの様々な最適化を行…

Rustで文字列の連結

Rust Standard Library Cookbookを読み始めました。 Amazon CAPTCHA この本ではRustの文字列連結として3つの方法が紹介されています。 moveによる連結 一番標準の方法。わかりやすく効率も良いが、連結後はmoveによりhelloは使えなくなる。 fn by_moving() …

GCPUG in Osaka #8【GCP】〜 Google TPU Day 〜

マーチンのおっかけで、GCPUGへ参加してきました。 https://gcpug-osaka.connpass.com/event/100106/ Tensorflow and modern convnets グーグル Martin Görner さん・吉川さん Google martinによる。最新のコンボリューションネットワークの紹介。CNNの基本…

DevFest Kyoto 2018 & TPU

日曜日にDevFest Kyotoに参加してTPUの情報を集めてきました。 https://gdgkyoto.connpass.com/event/99527/Twitterでは見たことがあるこの図を生で見れたのが良かったです。 TPUで使用されているbfloatフォーマットについて。 よく見ると、指数部を増やして…

TFUG KANSAI Meetup 2018

今回は急な開催となり告知期間が短い中、57名の方に参加していただきました。 平日の微妙な天気の中、ご参加いただきありがとうございました。さくらインターネット様には素敵な会場提供だけでなく、講演者へのお声がけや、懇親会の費用も負担していただき実…

rustを使ってonnxを読み込んでみた

https://cipepser.hatenablog.com/entry/protobuf-read-in-rust を参考にrustを使ってonnxを読み込んでみました。 Cargo.toml protobufを使えるようにする。 [dependencies] protobuf = { version = "~2.0", features = ["with-bytes"] } onnxフォーマットの…

らすと

ここってRustのハイライトできんの? >|rust| use std::collections::HashSet; type Pi = Vec<u32>; fn calc_k(pi:&Pi, i:u32, n:u32) -> u32 { // pi(i) + 1 .. n let g0: HashSet<u32> = (pi[i as usize - 1] + 1.. n + 2).collect(); // pi(1) .. pi(i-1) let g1: H</u32></u32>…

[rust][離散最適化] パス列挙アルゴリズム

組込Deep Learningで、量子化された状態での学習というのは離散最適化問題なのでは?と思い立ち組合せ最適化 第2版を読み始めました。最初のアルゴリズムとして、パス列挙アルゴリズム(path enumeration algorithm)が載っていたので、これまた勉強を始めたRu…

なにわTECH道×TFUG KANSAI Deep Learning フェス2018

土曜日に行われたなにわTECH道×TFUG KANSAI Deep Learning フェス2018のレポートです。今回は発表も無く、当日の僕の役割は司会者の近くに座って何かあったらサポートするというポジションだったので、集中して発表内容を聞くことができました。当日は公演中…

戦略的データサイエンス入門

戦略的データサイエンス入門 ―ビジネスに活かすコンセプトとテクニックを読みました。 どんな本 タイトルにあるようにビジネス側からのデータサイエンスについて書かれた本です。データサイエンスの本は、ともするとアルゴリズムから手法を分類しがちですが…

Writing Compilers and Interpreters まとめ

Writing Compilers and Interpreters A Software Engineering Approach 3rd Editionを5月から読んでました。なかなか面白い本なので紹介します。コンパイラの勉強というとどうしてもパーサーで挫折してしまいがちです。この本は、まずはフロントエンドと、中…

オンライン機械学習

機械学習プロフェッショナルシリーズのオンライン機械学習を読みました。タイトルはオンライン機械学習となっていますが、機械学習の基本的な学習アルゴリズムについて説明されている本です。特にオンラインでしか通用しない話だけでなく、半分くらいは基本…

[compiler]Writing Compilers and Interpreters: その13手強かった11章が終了。 12章 Interpreting Pascal Programsへ

Writing Compilers and Interpreters: その12

定数宣言のパースができるようになった。こういう定数の宣言をパースしてクロスリファレンスをかえると、 CONST epsilon = 10; limit = -epsilon; BEGIN END.こんな感じで、integerということとその値が表示されるところまで来た。 ***Definition.PROGRAM du…

Writing Compilers and Interpreters: その11

chap9は型システム。想像していたより難しい。一歩ずつ行かないと。 PROGRAM Test; CONST epsilon = 1.0e-6; TYPE rec = RECORD a : real; x, y : integer; END;こういうコードに対して、シンボルテーブルをスタックにする。Level 0がInteger等の組込型が定…

Writing Compilers and Interpreters: その10

chap8が終了。 for文などが動くようになった。面白くなってきた。CASE文の処理で caseのラベルをキーにして処理を辞書に入れておくと、caseラベルが増えても一定のコストでジャンプできるハック。その辞書をメモ化するまでがセット。面白いが、いまいち速度…

Writing Compilers and Interpreters: その9

chap6が終了。制御構造とか何にもないけど、変数の代入ができるようになった。 ふと気が付いたんだけど、定数の畳み込みの最適化って、実際にはインタプリタの実装と同じだ。変数のスコープ、演算子の優先順序、型変換等、言語仕様にそって動く物がないと、…

Writing Compilers and Interpreters: その8

手書きパーサー作成中。 BEGIN BEGIN {Temperature conversions.} five := 3; END; END.これのパース結果をxmlで出力できるようになった。こんな単純なのだと良いけど、これから複雑になってきたときにxmlで良いのかは良く分からない。 <COMPOUND line="1"> <COMPOUND line="2"> <ASSIGN line="3"> <VARIABLE id="five" level="0" > <INTEGER_CONSTANT value="3" > </ASSIGN> </COMPOUND> </COMPOUND> あとは…

Writing Compilers and Interpreters: その7

手書きパーサーを作成中。このPascalコードをパースして、 BEGIN BEGIN {Temperature conversions.} five := 3; END; END.fiveを代入先の識別子として認識するところまで来ました。 ====== CROSS-REFERENCE TABLE ====== Identifier Line numbers ----------…

Writing Compilers and Interpreters: その6

シンボルテーブルを作りました。 この本にでてくるのは、スタック型のデータ構造でシンボルを管理しています。ツリーで全部作りきった方が良さそうな気がするのですが、パースしながらネストに沿ってスタックを伸ばしたり縮めたりするようです。ネストの処理…

Writing Compilers and Interpreters: その5

とりあえず3章まで終了してトーカナイザーができた。正直この辺までは僕の人生で10回くらいやってる。 パーサーを突破したのが2回くらい。4章はシンボルテーブル。Cで書くと辛い奴だが、今時の言語なら余裕だと思う。順調だけど油断せずに行こう。