作業記録2023岡
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[組込みシステム 2023]]
* 研究内容 [#ua241c7d]
-LSTMの軽量化
* 予定 [#x91d7589]
** 月曜日 [#n7156b3e]
-10:30〜12:00 高木グループミーティング
** 火曜日 [#q56d8a35]
** 水曜日 [#ae8420a7]
** 木曜日 [#n484a96d]
-13:00〜14:30 全体ミーティング
-14:40〜16:10 コンピュータ・アーキテクチャ演習:[[C...
** 金曜日 [#e0191ee9]
** 土曜日 [#p26acf19]
** 日曜日 [#u1aaaf8d]
* 参考文献 [#ma133df5]
-いろいろありそう https://github.com/Xilinx/SDSoC_Example...
-プラグマ https://japan.xilinx.com/htmldocs/xilinx2019_1/...
-VivadoのIPの概要が書いてあるところ https://docs.xilinx.c...
-PYNQ_Workshop https://github.com/Xilinx/PYNQ_Workshop
-HLSのなんかいろいろ書いてあるやつ https://docs.xilinx.co...
-疎行列を効率よく計算 https://qiita.com/KQTS/items/e5500b...
-Pythonで疎行列を扱う https://note.nkmk.me/python-scipy-s...
* 参考論文 [#l572fa33]
-https://arxiv.org/pdf/1511.05552v4.pdf
-https://reader.elsevier.com/reader/sd/pii/S2405959522000...
-https://arxiv.org/pdf/2101.02667.pdf
-Eciton: Very Low-Power LSTM Neural Network Accelerator f...
* メモ [#zdaea4a3]
&size(20){メモです};
&color(red,white){&size(35){''PYNQで何か動かしてる時に別...
-直近の具体的やることリスト(増えたり減ったりします)
--測定結果がちゃんと正しいのかを確認
--具体的なアプリケーションを探してなんか発表しやすいよう...
---論文とかを調べて
---実際に動かしてみる
---動かせなくても組み込みでこんなのができるよ的なのを話す
---リソース余ってるんだったら活性化関数の近似をもう少し色...
-知見
--何かしらの処理を小さいデバイスで同等に行える
--近似手法をいくつか試して(それぞれにちゃんとした理由付け...
--近似をパラメータを与えて決める(予め近似パターンを実装し...
-案
--そもそも16bitで通信を試みる
--行列の刈り込み法がいいのかを調べる
--刈り込み率などのパラメータを設定できるようにするかを考...
--固定小数の整数部分を少なくして数値を丸めるようにする(AP...
* 作業記録 [#x04c07d9]
**12/18 [#qb292b62]
-2の冪乗の計算はHLSだと自動的に最適化してシフト演算になる...
-最小二乗法でやってみたけどあんまりいい結果じゃないけど?
--計算結果があっているか今一度確認
**12/8 [#f3d6831e]
-IMDbデータセットについて
--25000件の映画のレビュー,各レビューには高評価or低評価の...
--学習用データで学習したらテストデータでそのレビューが高...
-問題点:kerasでの実装例しか無い
--理屈はわかったがモデルを1から手作りするのは無理がある
--そもそも学習フェーズは取り扱ってきていないのもしんどい...
--あとpynqにkerasが載せれない(どのみち関係ない?)
--内部パラメータどうやって見るねん問題
-まあこんなこともできるよねーみたいな話で済ますしかないの...
**11/6 [#ne2d133d]
-刈り込みありのやつだとdataflowでレイテンシが約3倍小さく
--実際の実行時間に変化が無いから通信時間の問題がありそう
---案1:LSTMの計算の規模を大きくする
---案2:その他のレイヤもまとめて実装する
---案3:通信時間を何とかする
**10/27 [#x3775bc9]
-区分線形近似までのやつでdataflowができた
--レイテンシ的には3〜4倍高速に
--あとは刈り込みのやつでも同じようにすればいけるんじゃな...
**10/23 [#o13aed2e]
-fgioをデータフローできたけどDSPとLUTが爆発した🤯
--if文がダメ?pipelineがダメ?ifを使わないなら適当な配列?
**10/20 [#ffec5628]
-誤差
--区分線形近似<量子化<<刈り込み
--11/6追記:いやプログラム間違えてたんだけど,刈り込み<...
**10/12 [#h109e73a]
-メモ的な
--s_axiliteは小数ダメ
--最適化無しを答えとして最適化手法一つだけのやつで色々試す
--区分線形近似ではなくテーブル(あらかじめ配列を用意)
**10/3 [#qc8350c6]
-hls:streamを試してみたい
--後日https://support.xilinx.com/s/question/0D52E00006lLv...
**7/25 [#v501de31]
-疎行列verとCSCverでperplexityの値が変化している
--計算結果は一致しているはずなんだがな...?
**7/24 [#afdf0e75]
-刈り込みありfpga用lstmでのperplexityの計算がうまく行った
--一応改良アルゴリズムでも試してみる
-affineの行列刈込みもおんなじ位だったのでこっちをやるのも...
**7/21 [#j9a81f7f]
-刈り込みありの行列積の計算はあってるっぽい
--perplexityの計算の際に受け渡す重みの設定がおかしい可能...
**7/14 [#f2311d78]
-刈り込みありの行列積の計算がおかしい?
--perplexityが相変わらずやばすぎる
--メモのやることリストに今後のことをメモった
**7/13 [#vb21dea7]
-刈り込みなし最適化ありのやつでperplexity測ったらそこまで...
--刈り込みありのやつがなんか間違ってる?
--刈り込みのみのやつを作って計算結果があってるか試さない...
**7/3 [#p19b0015]
-perplexityの計算(LSTM使用バージョン)の計算自体は間違って...
**6/30 [#d89522bb]
-刈り込み率を1%~100%でそれぞれperplexityがどうなるのかを...
--大体80%ぐらいから急激に増加するっぽそう
--いくつかの論文で述べられていたことと同じそうで安心
-自分の作った刈り込みありのLSTMでperplexityを計算したらと...
--可能性1:プログラム自体がなにかおかしい
--可能性2:刈り込みは大丈夫だけどその他最適化がやばいの...
**6/29 [#uc6cac30]
-刈り込み率50%でのperplexityは139.33だった(刈り込み率無し...
--いくつかの論文で述べているように50%の段階ではまだまだ大...
--lstmに載せた場合や他の最適化で生じたperplexityの変化は...
--50%以上用のアルゴリズムも考えないとな
**6/16 [#r0bfa4b6]
-perplexityの計算にLSTMが乗った
--バッチサイズや展開サイズの影響もあって計算が遅すぎる!
--6/19追記:計算結果も正常そう
**6/15 [#wc6e4f33]
-pynq上のcpuでもperplexityを計算できるようにした
--あとは自作LSTM載せるだけだと思われる
**6/9 [#aecf5290]
-任意の重みとバイアスでperplexityを計測できるようになった
--刈り込みした行列は疎行列のまま渡すほうが良さそう
-量子化,活性化関数の近似もperplexityの計算でLSTM使うから...
**6/7 [#a0daca87]
-学習した重みを設定してeval_perplexityに投げたらperplexit...
--刈り込みした奴とかで試せそう
--量子化や活性化関数の近似の誤差はまた別で評価しないとい...
--あとはハイパーパラメータをどうするか
**6/2 [#j78c248b]
-Affineもまとめて高位合成するor別々に高位合成してoverlay...
--そもそもoverlay二個作戦は使えるか知らんけど
--行列刈り込みはAffineでやるのが良さそう?
**6/1 [#ef3593a2]
-行列積の途中で足し合わせる段階は<16,5>とかにすべきかも
--でもそうすると本来の目的の誤差軽減ができなくなるという...
-もしかして速度負けてる?
**5/26 [#le2f750a]
-こいつ見てたhttps://docs.xilinx.com/r/ja-JP/ug1399-vitis...
--どうやらhlsには半精度浮動小数のhalf型が標準で用意されて...
--計算誤差を調べたところhalfとap_fixed<16,6>はだいたい同...
---まあこれはそのうちap_fixed<16,3>とかにすればいいだけの話
--他の観点でhalf vs ap_fixed16をやってみたけどBRAMと速度...
---half速度が負けてるのが致命的なので採用は無しかもしれない
--飽和はAP_SATかAP_SAT_SYMを使うと実現できる
---違いはわからん
---LUTの使用率が増加するらしいので重み行列に取り入れた際...
**5/19 [#veeaafca]
-今日の知見
--LSTMの計算途中で一番計算結果(の絶対値)が大きくなるとこ...
---自分のデータだと一番大きくて19とか
---んで,行列積の結果を活性化関数に投げて0〜1 or -1...
---その活性化関数も4超えたあたりからほぼ1になる(逆もしかり)
---つまり行列積の計算結果の整数部分を律儀に保持せず4超え...
---そうすると小数部分に割けるビット数が増えて誤差が減る
--なんか昔作った奴結局全体で見たらシリアルに動いてるのも...
---fgio部分を分けて高位合成して作ったら速くなったりしない...
--活性化関数の近似で結果の逆転が起きてるから近似をもうち...
---リソースや実行時間との兼ね合い
---結果が0になってるのもなんか気持ち悪いから何とかしたさ...
-次回予告
--固定小数の整数部分を少なくして数値を丸めるようにする
--計算モジュールを分けて高位合成orうまく並列化する
--活性化関数の近似をもう少し考える
**5/18 [#n91ed97a]
-allocateの場所変えたら速くなったけど最適化ありのやつの誤...
--今一度実装した奴を見返す価値はありそう
--改善策:固定16ビットでも小数部分を増やす(オーバーフロー...
--次やろうかな:fe16だけの最適化で動かす
-なんか面白そうなこと書いてあるかもしれないので一応置いと...
**4/24 [#pc92cdab]
-とりあえず文章生成が動いた
--速度負けてた
-考えうる原因(python的部分)
--overlayの生成場所を考える
--allocateの場所(allocate結構遅そう)
--allocateした配列の値の代入(よく見たらコードが違うかもし...
-考えうる原因(fpga的部分)
--根本的に作った奴が通信回数多いのが問題かもしれない
---対策1:通信回数の少ないLSTMを作る
---対策1:他のレイヤもまとめて実装する
**4/21 [#f30fd526]
-M1の中間発表用に調整したLSTMだと入出力の関係で文章生成に...
**4/17 [#jd67b534]
-emacsでmozcが使えるようになりました(鳥居君に感謝)
**4/14 [#g8b8834c]
-作業記録作成
* おまけ [#i5076525]
-[[作業記録2021岡]]一昨年のやつ
-[[作業記録2022岡]]去年のやつ
-[[作業記録2023岡]]今年のやつ
-source /eda1/Xilinx/Vivado/2019.1/settings64.sh
--なんか定期的にvivadoコマンド使えなくなってるからその時...
-create HDL wrapperだよ
-[[卒業論文の雛形]]
終了行:
[[組込みシステム 2023]]
* 研究内容 [#ua241c7d]
-LSTMの軽量化
* 予定 [#x91d7589]
** 月曜日 [#n7156b3e]
-10:30〜12:00 高木グループミーティング
** 火曜日 [#q56d8a35]
** 水曜日 [#ae8420a7]
** 木曜日 [#n484a96d]
-13:00〜14:30 全体ミーティング
-14:40〜16:10 コンピュータ・アーキテクチャ演習:[[C...
** 金曜日 [#e0191ee9]
** 土曜日 [#p26acf19]
** 日曜日 [#u1aaaf8d]
* 参考文献 [#ma133df5]
-いろいろありそう https://github.com/Xilinx/SDSoC_Example...
-プラグマ https://japan.xilinx.com/htmldocs/xilinx2019_1/...
-VivadoのIPの概要が書いてあるところ https://docs.xilinx.c...
-PYNQ_Workshop https://github.com/Xilinx/PYNQ_Workshop
-HLSのなんかいろいろ書いてあるやつ https://docs.xilinx.co...
-疎行列を効率よく計算 https://qiita.com/KQTS/items/e5500b...
-Pythonで疎行列を扱う https://note.nkmk.me/python-scipy-s...
* 参考論文 [#l572fa33]
-https://arxiv.org/pdf/1511.05552v4.pdf
-https://reader.elsevier.com/reader/sd/pii/S2405959522000...
-https://arxiv.org/pdf/2101.02667.pdf
-Eciton: Very Low-Power LSTM Neural Network Accelerator f...
* メモ [#zdaea4a3]
&size(20){メモです};
&color(red,white){&size(35){''PYNQで何か動かしてる時に別...
-直近の具体的やることリスト(増えたり減ったりします)
--測定結果がちゃんと正しいのかを確認
--具体的なアプリケーションを探してなんか発表しやすいよう...
---論文とかを調べて
---実際に動かしてみる
---動かせなくても組み込みでこんなのができるよ的なのを話す
---リソース余ってるんだったら活性化関数の近似をもう少し色...
-知見
--何かしらの処理を小さいデバイスで同等に行える
--近似手法をいくつか試して(それぞれにちゃんとした理由付け...
--近似をパラメータを与えて決める(予め近似パターンを実装し...
-案
--そもそも16bitで通信を試みる
--行列の刈り込み法がいいのかを調べる
--刈り込み率などのパラメータを設定できるようにするかを考...
--固定小数の整数部分を少なくして数値を丸めるようにする(AP...
* 作業記録 [#x04c07d9]
**12/18 [#qb292b62]
-2の冪乗の計算はHLSだと自動的に最適化してシフト演算になる...
-最小二乗法でやってみたけどあんまりいい結果じゃないけど?
--計算結果があっているか今一度確認
**12/8 [#f3d6831e]
-IMDbデータセットについて
--25000件の映画のレビュー,各レビューには高評価or低評価の...
--学習用データで学習したらテストデータでそのレビューが高...
-問題点:kerasでの実装例しか無い
--理屈はわかったがモデルを1から手作りするのは無理がある
--そもそも学習フェーズは取り扱ってきていないのもしんどい...
--あとpynqにkerasが載せれない(どのみち関係ない?)
--内部パラメータどうやって見るねん問題
-まあこんなこともできるよねーみたいな話で済ますしかないの...
**11/6 [#ne2d133d]
-刈り込みありのやつだとdataflowでレイテンシが約3倍小さく
--実際の実行時間に変化が無いから通信時間の問題がありそう
---案1:LSTMの計算の規模を大きくする
---案2:その他のレイヤもまとめて実装する
---案3:通信時間を何とかする
**10/27 [#x3775bc9]
-区分線形近似までのやつでdataflowができた
--レイテンシ的には3〜4倍高速に
--あとは刈り込みのやつでも同じようにすればいけるんじゃな...
**10/23 [#o13aed2e]
-fgioをデータフローできたけどDSPとLUTが爆発した🤯
--if文がダメ?pipelineがダメ?ifを使わないなら適当な配列?
**10/20 [#ffec5628]
-誤差
--区分線形近似<量子化<<刈り込み
--11/6追記:いやプログラム間違えてたんだけど,刈り込み<...
**10/12 [#h109e73a]
-メモ的な
--s_axiliteは小数ダメ
--最適化無しを答えとして最適化手法一つだけのやつで色々試す
--区分線形近似ではなくテーブル(あらかじめ配列を用意)
**10/3 [#qc8350c6]
-hls:streamを試してみたい
--後日https://support.xilinx.com/s/question/0D52E00006lLv...
**7/25 [#v501de31]
-疎行列verとCSCverでperplexityの値が変化している
--計算結果は一致しているはずなんだがな...?
**7/24 [#afdf0e75]
-刈り込みありfpga用lstmでのperplexityの計算がうまく行った
--一応改良アルゴリズムでも試してみる
-affineの行列刈込みもおんなじ位だったのでこっちをやるのも...
**7/21 [#j9a81f7f]
-刈り込みありの行列積の計算はあってるっぽい
--perplexityの計算の際に受け渡す重みの設定がおかしい可能...
**7/14 [#f2311d78]
-刈り込みありの行列積の計算がおかしい?
--perplexityが相変わらずやばすぎる
--メモのやることリストに今後のことをメモった
**7/13 [#vb21dea7]
-刈り込みなし最適化ありのやつでperplexity測ったらそこまで...
--刈り込みありのやつがなんか間違ってる?
--刈り込みのみのやつを作って計算結果があってるか試さない...
**7/3 [#p19b0015]
-perplexityの計算(LSTM使用バージョン)の計算自体は間違って...
**6/30 [#d89522bb]
-刈り込み率を1%~100%でそれぞれperplexityがどうなるのかを...
--大体80%ぐらいから急激に増加するっぽそう
--いくつかの論文で述べられていたことと同じそうで安心
-自分の作った刈り込みありのLSTMでperplexityを計算したらと...
--可能性1:プログラム自体がなにかおかしい
--可能性2:刈り込みは大丈夫だけどその他最適化がやばいの...
**6/29 [#uc6cac30]
-刈り込み率50%でのperplexityは139.33だった(刈り込み率無し...
--いくつかの論文で述べているように50%の段階ではまだまだ大...
--lstmに載せた場合や他の最適化で生じたperplexityの変化は...
--50%以上用のアルゴリズムも考えないとな
**6/16 [#r0bfa4b6]
-perplexityの計算にLSTMが乗った
--バッチサイズや展開サイズの影響もあって計算が遅すぎる!
--6/19追記:計算結果も正常そう
**6/15 [#wc6e4f33]
-pynq上のcpuでもperplexityを計算できるようにした
--あとは自作LSTM載せるだけだと思われる
**6/9 [#aecf5290]
-任意の重みとバイアスでperplexityを計測できるようになった
--刈り込みした行列は疎行列のまま渡すほうが良さそう
-量子化,活性化関数の近似もperplexityの計算でLSTM使うから...
**6/7 [#a0daca87]
-学習した重みを設定してeval_perplexityに投げたらperplexit...
--刈り込みした奴とかで試せそう
--量子化や活性化関数の近似の誤差はまた別で評価しないとい...
--あとはハイパーパラメータをどうするか
**6/2 [#j78c248b]
-Affineもまとめて高位合成するor別々に高位合成してoverlay...
--そもそもoverlay二個作戦は使えるか知らんけど
--行列刈り込みはAffineでやるのが良さそう?
**6/1 [#ef3593a2]
-行列積の途中で足し合わせる段階は<16,5>とかにすべきかも
--でもそうすると本来の目的の誤差軽減ができなくなるという...
-もしかして速度負けてる?
**5/26 [#le2f750a]
-こいつ見てたhttps://docs.xilinx.com/r/ja-JP/ug1399-vitis...
--どうやらhlsには半精度浮動小数のhalf型が標準で用意されて...
--計算誤差を調べたところhalfとap_fixed<16,6>はだいたい同...
---まあこれはそのうちap_fixed<16,3>とかにすればいいだけの話
--他の観点でhalf vs ap_fixed16をやってみたけどBRAMと速度...
---half速度が負けてるのが致命的なので採用は無しかもしれない
--飽和はAP_SATかAP_SAT_SYMを使うと実現できる
---違いはわからん
---LUTの使用率が増加するらしいので重み行列に取り入れた際...
**5/19 [#veeaafca]
-今日の知見
--LSTMの計算途中で一番計算結果(の絶対値)が大きくなるとこ...
---自分のデータだと一番大きくて19とか
---んで,行列積の結果を活性化関数に投げて0〜1 or -1...
---その活性化関数も4超えたあたりからほぼ1になる(逆もしかり)
---つまり行列積の計算結果の整数部分を律儀に保持せず4超え...
---そうすると小数部分に割けるビット数が増えて誤差が減る
--なんか昔作った奴結局全体で見たらシリアルに動いてるのも...
---fgio部分を分けて高位合成して作ったら速くなったりしない...
--活性化関数の近似で結果の逆転が起きてるから近似をもうち...
---リソースや実行時間との兼ね合い
---結果が0になってるのもなんか気持ち悪いから何とかしたさ...
-次回予告
--固定小数の整数部分を少なくして数値を丸めるようにする
--計算モジュールを分けて高位合成orうまく並列化する
--活性化関数の近似をもう少し考える
**5/18 [#n91ed97a]
-allocateの場所変えたら速くなったけど最適化ありのやつの誤...
--今一度実装した奴を見返す価値はありそう
--改善策:固定16ビットでも小数部分を増やす(オーバーフロー...
--次やろうかな:fe16だけの最適化で動かす
-なんか面白そうなこと書いてあるかもしれないので一応置いと...
**4/24 [#pc92cdab]
-とりあえず文章生成が動いた
--速度負けてた
-考えうる原因(python的部分)
--overlayの生成場所を考える
--allocateの場所(allocate結構遅そう)
--allocateした配列の値の代入(よく見たらコードが違うかもし...
-考えうる原因(fpga的部分)
--根本的に作った奴が通信回数多いのが問題かもしれない
---対策1:通信回数の少ないLSTMを作る
---対策1:他のレイヤもまとめて実装する
**4/21 [#f30fd526]
-M1の中間発表用に調整したLSTMだと入出力の関係で文章生成に...
**4/17 [#jd67b534]
-emacsでmozcが使えるようになりました(鳥居君に感謝)
**4/14 [#g8b8834c]
-作業記録作成
* おまけ [#i5076525]
-[[作業記録2021岡]]一昨年のやつ
-[[作業記録2022岡]]去年のやつ
-[[作業記録2023岡]]今年のやつ
-source /eda1/Xilinx/Vivado/2019.1/settings64.sh
--なんか定期的にvivadoコマンド使えなくなってるからその時...
-create HDL wrapperだよ
-[[卒業論文の雛形]]
ページ名: