こんにちは、こんにちは、友達!私はKuiperinferの著者です。オープンソースのコースとして、KuiperinferはこれまでGithubで2.5kの星を獲得しています。元のコースに基づいて、 「Mockup Inference Frameworkを実践する実践的なもの」を開始しました。新しいコースでは、ラマシリーズのモデル(最新のllama3.2を含む)およびQwen2.5シリーズのモデルをサポートし、CUDA加速とINT8量子化をサポートしています。
https://l0kzvikuq0w.feishu.cn/docx/zf2hd0xfaoaxqaxcpn2c5ohanbc
大きなモデルの推論に興味があり、詳細な理解を持ち、関連するテクノロジーを習得したい場合、学校の募集と秋の募集インタビューで目立つようにしたい場合は、このコース「手作りの大きなモデル推論フレームワーク」を見逃すことはありません。来て、私たちに参加して、一緒に学習の旅を始めましょう!興味のある学生は、コースの下のQRコードをスキャンするか、wechatlyrry1997を追加してコースに参加できます。

あなた自身の手で深い学習推論フレームワークを作成するように導きます。私のBステーションスペースに従って、最新のビデオアップデートを取得します。
このプロジェクトに従って、独自の深い学習推論フレームワークから始めて、次のようになります。
ビデオコースリンク: https://space.bilibili.com/1822828582
2番目のコースは、最初のコースのリセットバージョンであり、コンテンツはより充実しており、完璧です。最初のコースの概要については、以下の章を参照してください。
| コース数 | スケジュール | コースリンク |
|---|---|---|
| 講義1プロジェクトのプレビューと環境構成 | 仕上げる | https://www.bilibili.com/video/bv118411f7ym |
| 講義2テンソルの設計と実装 | 仕上げる | https://www.bilibili.com/video/bv1hn411k7q7 |
| 講義3計算グラフの定義 | 仕上げる | https://www.bilibili.com/video/bv1vc411mmyp |
| 講義4:計算グラフの関係と実行順序の構築 | 仕上げる | https://www.bilibili.com/video/bv19s4y1r7az |
| 講義5: Kuiperinferのオペレーターと登録労働者 | 仕上げる | https://www.bilibili.com/video/bv1gx4y1o7pj |
| 講義6:畳み込みとプーリングオペレーターの実装 | 仕上げる | https://www.bilibili.com/video/bv1hx4y197ds |
| 講義7:表現層での語彙分析と文法分析と演算子の実装 | 仕上げる | https://www.bilibili.com/video/bv1j8411o7ao |
| 講義8:自家製の推論フレームワークは、ResNetネットワークの推論をサポートしています | 仕上げる | https://www.bilibili.com/video/bv1o84y1o7ni |
| 講義9:自家製の推論フレームワークは、Yolov5ネットワークの推論をサポートしています | 仕上げる | https://www.bilibili.com/video/bv1qk4y1a7xl |
? Kuiperinferは現在、UNETネットワークの推論をサポートし、Carvanaのトレーニング前の重量を使用しています
推論を再現することは、記事の最後にあるデモを実行しているKuiperを参照できます
デモは、Yolov5-Sの事前に訓練された重量(COCOデータセット)を直接使用し、Kuiperinferを理由に使用します

私はビリビリに関する教育コースを持っていますが、現在はコースの最初の13コースです。コースの概要は次のとおり、ホームページは次のとおりです。https://space.bilibili.com/1822828582です。誰もがフォローしてサポートできます。学習グループに入る方法は、上の写真のQRコードに示されているとおりです。
| コース数 | メインコンテンツ | スケジュール | コースリンク |
|---|---|---|---|
| ファーストクラス | 全体的なフレームワークの解釈と開発環境の構成 | 仕上げる | https://www.bilibili.com/video/bv1hv4y1a7h8/ |
| 2番目のレッスン | テンソルテンソルクラスの分析と入力データのメモリ配置 | 仕上げる | https://www.bilibili.com/video/bv1ed4y1v7gb/ |
| 3番目のレッスン | CSVファイルからテンソルテンソルのインスタンスを初期化する | 仕上げる | https://www.bilibili.com/video/bv1pg411j7v5/ |
| レッスン4 | 最初のオペレーターを手書きして、オペレーター登録工場のクラスを完了します | 仕上げる | https://www.bilibili.com/video/bv1bg4y1j7sq/ |
| レッスン5 | IM2COLの原則と畳み込み演算子の実装 | 仕上げる | https://www.bilibili.com/video/bv1f841137ct |
| レッスン6 | 猫を描き、トラを描くことで、MaxPoolingオペレーターを完成させます | 仕上げる | https://www.bilibili.com/video/bv1m3411s7yy |
| レッスン7 | グラフ構造(PNNX)説明と予備計算グラフ | 仕上げる | https://www.bilibili.com/video/bv1vw4y1v7vp |
| レッスン8 | PNNXを読み、独自の計算図を作成します | 仕上げる | https://www.bilibili.com/video/bv1hy4y1z7s3 |
| レッスン9 | 畳み込みオペレーターの実装とIM2COLの原則が計算されました | 仕上げる | https://www.bilibili.com/video/bv1f841137ct |
| レッスン10 | テンソルクラスをもう一度探索し、計算グラフのグラフ関係を構築し、オペレーターの入力と出力を事前に割り当てます | 仕上げる | https://www.bilibili.com/video/bv1m54y1k7ag |
| レッスン11 | オペレーターの実行プロセス | 仕上げる | https://www.bilibili.com/video/bv1wy411c7kv |
| レッスン12 | 自家製の推論フレームワークを使用して、ResNetネットワークの写真の推論と分類を完了します | 仕上げる | https://www.bilibili.com/video/bv1jd4y1m772 |
| レッスン13 | 自家製の推論フレームワークでYolov5モデルの推論をサポートする | 仕上げる | https://www.bilibili.com/video/bv1xs4y1j7t2 |
Kuiperinferへの努力に次の学生に感謝します
このプロジェクトは、コースのアップストリームまたは前研究前のプロジェクトに相当します
ここのすべての機能は、ビデオコースの知識ポイントになる可能性があります。これは、私によって開発されているか、他の学生が改善しています。
ヒント:
$DEVELOPMENTまたは-DDEVELOPMENT=ON cmakeファイルを設定してください。 apt install cmake, libopenblas-dev, liblapack-dev, libarpack-dev, libsuperlu-devヒント:
コンピレーション後にtmp/unet/demoフォルダーのTEST.PNG画像の絶対または相対アドレスをコピーしてから、 build/demosで次の形式で推論プログラムを実行してください
./unet_test test.png unet_demo.pnnx.param unet_demo.pnnx.binPNNXモデルのダウンロードアドレス:https://cowtransfer.com/s/09c7f337bab443
推論が成功した場合、フォルダーunet_output.jpgに元の画像が分割された結果が表示されます。
Demosフォルダーの下のYolo_test.cppフォルダーの次のコードを変更してください
const std::string& image_path = " imgs/car.jpg " ;
const std::string& param_path = " tmp/yolo/demo/yolov5s_batch8.pnnx.param " ;
const std::string& bin_path = " tmp/yolo/demo/yolov5s_batch8.pnnx.bin " ; image_path Image Directory、 param_pathはモデルのパラメーターファイル、 bin_pathはモデルの重量ファイルです。それをあなたの地元の道に置き換えてください。
モデルの定義と重量のダウンロードアドレスは次のとおりです。https://cowtransfer.com/s/9bc43e0905cb40
コンパイルが完了したら、プロジェクトディレクトリにcall ./build/demos/yolo_testに電話してください
全体的な概念:既存のオペレーターを徐々に最適化します。必要に応じて、実装されていないオペレーターを開発します
ソースはソースディレクトリです
テストはユニットテストディレクトリであり、基本的にパブリックメソッドのユニットテスト権を実装しています
ベンチマークはGoogleベンチマークで、MobileNETV3、ResNet18、Yolov5のパフォーマンステストが含まれています。
15 Core AMD EPYC 7543(Xiaolong)32コアプロセッサ(Dockerコンテナ、ホストには合計32コアがあります)
gcc(ubuntu 9.4.0-1ubuntu1〜20.04.1)9.4.0
5回連続で時間をかけて実行し、平均的な方法で計算されます
| 入力サイズ | モデル名 | コンピューティング機器 | 時間がかかる |
|---|---|---|---|
| 224×224バッチ= 8 | mobilenetv3small | CPU(Armadillo + Openblas) | 6.76ms/画像 |
| 224×224バッチ= 8 | resnet18 | CPU(Armadillo + Openblas) | 23.53ms/画像 |
| 224×224バッチ= 16 | resnet18 | CPU(Armadillo + Openblas) | 13.52ms/画像 |
| 640×640バッチ= 8 | yolov5nano | CPU(Armadillo + Openblas) | 78.37ms/画像 |
| 640×640バッチ= 8 | Yolov5s | CPU(Armadillo + Openblas) | 177.54ms/画像 |
| 640×640バッチ= 16 | Yolov5s | CPU(Armadillo + Openblas) | 134.57ms/画像 |
推論フレームワークNCNNは、https://github.com/tencent/ncnnを参照するコードでNCNNのBSDプロトコルを保持しています
優れた数学ライブラリOpenblas:https://github.com/xianyi/openblas
優れた数学ライブラリアルマジロ:https://arma.sourceforge.net/docs.html
私にインスピレーションを与えるカフェフレームワーク:https://github.com/bvlc/caffe
fmathフレームワーク:https://github.com/herumi/fmath/