สวัสดีสวัสดีเพื่อน! ฉันเป็นผู้แต่ง Kuiperinfer ในฐานะที่เป็นหลักสูตรโอเพ่นซอร์ส Kuiperinfer ได้รับรางวัล 2.5K ดาวบน GitHub จนถึงตอนนี้ ตอนนี้ขึ้นอยู่กับหลักสูตรดั้งเดิม เราได้เปิดตัว "Hand-on Hands-On Making Making Framework Framework" หลักสูตรใหม่รองรับซีรี่ส์ Llama Series (รวมถึง LLAMA3.2 ล่าสุด) และ QWEN2.5 ซีรีส์ของแบบจำลองและรองรับการเร่งความเร็วของ CUDA และ InT8 Quantization ซึ่งได้รับการยกย่องอย่างกว้างขวางนับตั้งแต่เปิดตัว
https://l0kzvikuq0w.feishu.cn/docx/zf2hd0xfaoaxqaxcpn2c5ohanbc
หากคุณมีความสนใจในการใช้เหตุผลแบบจำลองขนาดใหญ่ต้องการมีความเข้าใจในเชิงลึกและเทคโนโลยีที่เกี่ยวข้องกับต้นแบบและต้องการที่จะโดดเด่นในการสรรหาบุคลากรในโรงเรียนและการสัมภาษณ์การรับสมัครในฤดูใบไม้ร่วงหลักสูตรนี้ "กรอบการอนุมานแบบจำลองขนาดใหญ่ที่ทำด้วยมือ" มาร่วมกับเราและเริ่มต้นการเดินทางการเรียนรู้ของคุณด้วยกัน! นักเรียนที่สนใจสามารถสแกนรหัส QR ด้านล่างหลักสูตรหรือเพิ่ม WeChat Lyrry1997 เพื่อเข้าร่วมหลักสูตร

นำคุณไปสู่การสร้างกรอบการใช้เหตุผลการเรียนรู้อย่างลึกซึ้งด้วยมือของคุณเอง ติดตามพื้นที่สถานี B ของฉันเพื่อรับการอัปเดตวิดีโอล่าสุด
ทำตามโครงการนี้และเริ่มต้นด้วยกรอบการใช้เหตุผลการเรียนรู้เชิงลึกของคุณเองตั้งแต่เริ่มต้นคุณจะได้รับสิ่งต่อไปนี้:
ลิงค์หลักสูตรวิดีโอ: https://space.bilibili.com/1822828582
หลักสูตรที่สองเป็นเวอร์ชันรีเซ็ตของหลักสูตรแรกและเนื้อหานั้นเติมเต็มและสมบูรณ์แบบมากขึ้น ดูบทด้านล่างสำหรับโครงร่างหลักสูตรแรก
| จำนวนหลักสูตร | กำหนดการ | ลิงค์หลักสูตร |
|---|---|---|
| การบรรยาย 1 ตัวอย่างโครงการและการกำหนดค่าสภาพแวดล้อม | เสร็จ | https://www.bilibili.com/video/bv118411f7ym |
| การบรรยาย 2 การออกแบบและการใช้งานของเทนเซอร์ | เสร็จ | https://www.bilibili.com/video/bv1hn411k7q7 |
| การบรรยาย 3 คำจำกัดความของกราฟการคำนวณ | เสร็จ | https://www.bilibili.com/video/bv1vc411m7yp |
| การบรรยายที่ 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 ในตอนท้ายของบทความ
การสาธิตโดยตรงใช้น้ำหนักที่ได้รับการฝึกอบรมล่วงหน้า (ชุดข้อมูล COCO) ของ YOLOV5-S และใช้ KuiperInfer เพื่อเหตุผล

ฉันมีหลักสูตรการสอนเกี่ยวกับ Bilibili และปัจจุบันเป็นหลักสูตร 13 หลักสูตรแรกในหลักสูตร โครงร่างหลักสูตรมีดังนี้หน้าแรกคือ: https://space.bilibili.com/1822828582 ทุกคนยินดีที่จะติดตามและสนับสนุน วิธีการเข้าสู่กลุ่มการเรียนรู้ดังแสดงในรหัส QR ในภาพด้านบน
| จำนวนหลักสูตร | เนื้อหาหลัก | กำหนดการ | ลิงค์หลักสูตร |
|---|---|---|---|
| ชั้นหนึ่ง | การตีความกรอบการทำงานโดยรวมและการกำหนดค่าสภาพแวดล้อมการพัฒนา | เสร็จ | https://www.bilibili.com/video/bv1hv4y1a7h8/ |
| บทเรียนที่สอง | การวิเคราะห์คลาสเทนเซอร์เทนเซอร์และการจัดเรียงหน่วยความจำของข้อมูลอินพุต | เสร็จ | https://www.bilibili.com/video/bv1ed4y1v7gb/ |
| บทเรียนที่สาม | เริ่มต้นอินสแตนซ์ของเทนเซอร์เทนเซอร์จากไฟล์ CSV | เสร็จ | https://www.bilibili.com/video/bv1pg411j7v5/ |
| บทที่ 4 | เขียนด้วยลายมือผู้ให้บริการรายแรก Relu และจบคลาสโรงงานลงทะเบียนผู้ให้บริการ | เสร็จ | https://www.bilibili.com/video/bv1bg4y1j7sq/ |
| บทเรียนที่ 5 | หลักการของ IM2COL และการดำเนินการตามตัวดำเนินการ Convolution | เสร็จ | https://www.bilibili.com/video/bv1f841137ct |
| บทที่ 6 | ทำ MaxPooling Operator โดยการวาดแมวและวาดเสือ | เสร็จ | https://www.bilibili.com/video/bv1m3411s7yy |
| บทที่ 7 | คำอธิบายโครงสร้างกราฟ (PNNX) และกราฟการคำนวณเบื้องต้น | เสร็จ | https://www.bilibili.com/video/bv1vw4y1v7vp |
| บทที่ 8 | อ่าน pnnx และสร้างแผนภาพการคำนวณของคุณเอง | เสร็จ | https://www.bilibili.com/video/bv1hy4y1z7s3 |
| บทที่ 9 | การดำเนินการตามตัวดำเนินการ Convolution และหลักการของการคำนวณแบบเร่งความเร็ว IM2COL | เสร็จ | https://www.bilibili.com/video/bv1f841137ct |
| บทเรียนที่ 10 | สำรวจคลาส Tensor อีกครั้งสร้างความสัมพันธ์กราฟของกราฟการคำนวณและจัดสรรอินพุตและเอาต์พุตล่วงหน้าของตัวดำเนินการ | เสร็จ | https://www.bilibili.com/video/bv1m54y1k7k |
| บทที่ 11 | กระบวนการดำเนินการของผู้ประกอบการ | เสร็จ | https://www.bilibili.com/video/bv1wy411c7kv |
| บทที่ 12 | ใช้กรอบการใช้เหตุผลแบบโฮมเมดของเราเพื่อให้การอนุมานและการจำแนกรูปภาพของเครือข่าย resnet เสร็จสมบูรณ์ | เสร็จ | https://www.bilibili.com/video/bv1jd4y1m772 |
| บทเรียนที่ 13 | สนับสนุนการใช้เหตุผลของโมเดล YOLOV5 ด้วยกรอบการใช้เหตุผลแบบโฮมเมด | เสร็จ | https://www.bilibili.com/video/bv1xs4y1j7t2 |
ขอบคุณนักเรียนต่อไปนี้สำหรับความพยายามในการ KuiperInfer
โครงการนี้เทียบเท่ากับโครงการต้นน้ำหรือการวิจัยก่อนหลักสูตรของหลักสูตร
คุณลักษณะทุกอย่างที่นี่อาจกลายเป็นจุดความรู้ในหลักสูตรวิดีโอไม่ว่าจะเป็นการพัฒนาโดยฉันหรือปรับปรุงโดยนักเรียนคนอื่น ๆ
เคล็ดลับ:
-DDEVELOPMENT=ON คุณต้องการพัฒนา kuiperinfer โปรดใช้ git clone -recursive https://github.com/zjhellofss/kuiperinfer.git เพื่อดาวน์โหลด tmp โฟลเดอร์ $DEVELOPMENT ในเวลาเดียวกัน apt install cmake, libopenblas-dev, liblapack-dev, libarpack-dev, libsuperlu-devเคล็ดลับ:
โปรดคัดลอกที่อยู่สัมบูรณ์หรือที่อยู่สัมพัทธ์ของรูปภาพ test.png ในโฟลเดอร์ tmp/unet/demo หลังจากการรวบรวมจากนั้นเรียกใช้โปรแกรมการอนุมานในรูปแบบต่อไปนี้ใน build/demos
./unet_test test.png unet_demo.pnnx.param unet_demo.pnnx.binที่อยู่ดาวน์โหลดของรุ่น PNNX: https://cowtransfer.com/s/09c7f337bab443
หากการใช้เหตุผลสำเร็จคุณจะเห็นผลลัพธ์ของการแยกภาพต้นฉบับในโฟลเดอร์ unet_output.jpg
โปรดแก้ไขรหัสต่อไปนี้ในโฟลเดอร์ yolo_test.cpp ภายใต้โฟลเดอร์ Demos
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 ระบุไดเรกทอรีรูปภาพ param_path เป็นไฟล์พารามิเตอร์ของโมเดลและ bin_path เป็นไฟล์น้ำหนักของโมเดล โปรดแทนที่ด้วยเส้นทางในพื้นที่ของคุณ
คำจำกัดความของรุ่นและที่อยู่ดาวน์โหลดน้ำหนักมีดังนี้: https://cowtransfer.com/s/9bc43e0905cb40
หลังจากการรวบรวมเสร็จสมบูรณ์แล้วโทร ./build/demos/yolo_test demos/yolo_test ในไดเรกทอรีโครงการ
แนวคิดโดยรวม: ค่อยๆเพิ่มประสิทธิภาพผู้ให้บริการที่มีอยู่ พัฒนาตัวดำเนินการที่ไม่ได้ใช้งานเมื่อจำเป็น
แหล่งที่มา คือไดเรกทอรีต้นฉบับ
การทดสอบ เป็นไดเรกทอรีการทดสอบหน่วยโดยทั่วไปใช้สิทธิ์การทดสอบหน่วยของวิธีการสาธารณะ
Benchmark เป็นเกณฑ์มาตรฐานของ Google ซึ่งมีการทดสอบประสิทธิภาพสำหรับ Mobilenetv3, Resnet18 และ YOLOV5S
15 CORE AMD EPYC 7543 (Xiaolong) 32-Core Processor (Docker Container โฮสต์มีทั้งหมด 32 คอร์)
GCC (Ubuntu 9.4.0-1ubuntu1 ~ 20.04.1) 9.4.0
ใช้เวลานานและดำเนินการติดต่อกันห้าครั้งและคำนวณในทางเฉลี่ย
| ขนาดอินพุต | ชื่อนางแบบ | อุปกรณ์คอมพิวเตอร์ | ใช้เวลานาน |
|---|---|---|---|
| 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 ยังคงรักษาโปรโตคอล BSD ของ NCNN ไว้ในรหัสอ้างอิง https://github.com/tencent/ncnn
ห้องสมุดคณิตศาสตร์ที่ยอดเยี่ยม OpenBlas: https://github.com/xianyi/openblas
ห้องสมุดคณิตศาสตร์ที่ยอดเยี่ยม Armadillo: https://arma.sourceforge.net/docs.html
เฟรมเวิร์กคาเฟอีนที่เป็นแรงบันดาลใจให้ฉัน: https://github.com/bvlc/caffe
เฟรมเวิร์ก fmath: https://github.com/herumi/fmath/