ดูเหมือนว่าความเร็วในการคำนวณจะเปลี่ยนไปขึ้นอยู่กับ BLAS ที่ใช้ใน Numpy [Python]

2019 6 年月日 4

ใน "numpy" ไลบรารีการดำเนินการเชิงตัวเลขที่เรียกว่า BLAS มีหน้าที่รับผิดชอบในการประมวลผลจริง

ขึ้นอยู่กับว่าคุณติดตั้ง numpy ด้วย "conda install" หรือ "pip install" BLAS ที่ใช้จะเปลี่ยนไป และขึ้นอยู่กับ BLAS ที่คุณใช้ ความเร็วในการประมวลผลจะส่งผลไม่เพียงแค่ numpy แต่ยังรวมถึงไลบรารีที่ขึ้นอยู่กับมันด้วย

ครั้งนี้ ผมตรวจสอบ BLAS ความแตกต่างของความเร็วจริงโดยสังเขป และวิธีการตรวจสอบว่า BLAS ใดที่ใช้อยู่ ดังนั้นผมจะมาแนะนำ

BLAS และประเภทของพวกเขา

BLAS คืออะไร

เกี่ยวกับ BLAS คำอธิบายในเว็บไซต์ต่อไปนี้เข้าใจง่ายมาก ดังนั้นฉันจะยกมาอ้างอิง

BLAS ย่อมาจากโปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐานโดยสรุป มันเป็นไลบรารีของการดำเนินการเชิงเส้นพื้นฐานตัวอย่างเช่น การคูณเมทริกซ์ การคำนวณบรรทัดฐานของเวกเตอร์ เป็นต้นประเด็นคือการหยุดใช้การคำนวณเหล่านี้ (พัฒนาวงล้อใหม่) และใช้ไลบรารีเพื่อเขียนโค้ดอย่างมีประสิทธิภาพและประสิทธิผล

การใช้งาน BLAS อย่างง่าย

เนื่องจาก BLAS ยังใช้หลัง numpy จึงกล่าวได้ว่าเวลาในการคำนวณจะแตกต่างกันไปขึ้นอยู่กับว่า BLAS ใดถูกเรียกใช้เมื่อดำเนินการ numpy

ประเภทของ BLAS

BLAS ประเภทต่าง ๆ ได้รับการพัฒนาลองมาดูตัวอย่างตัวแทนกัน

เปิด BLAS

การใช้งานโอเพ่นซอร์สของ BLASใน numpy ที่ติดตั้งด้วย pip OpenBLAS จะถูกเรียกภายในเพื่อทำการคำนวณ
เข้ากันได้กับ CPU ต่างๆ และกล่าวกันว่าสามารถทำความเร็วได้เท่ากับ Intel MKL สำหรับ CPU Sandy Bridge ของ Intelเป็นที่รู้จักกันดีในเรื่องฟังก์ชันมัลติเธรด และดูเหมือนว่าจำนวนคอร์และการเร่งความเร็วนั้นเป็นสัดส่วนที่ดี

Intel MKL (ไลบรารีเคอร์เนล Intel Math)

BLAS พัฒนาโดย Intel รองรับเฉพาะ CPU ของ Intel เท่านั้น และไม่สามารถใช้ CPU ของผู้ผลิตรายอื่นได้ เนื่องจากได้รับการปรับให้เหมาะสมสำหรับ Intel CPUs เช่น Xeon, Core i series และ Atom การใช้ intel MKL เป็นไลบรารีการคำนวณบนคอมพิวเตอร์ที่ใช้เหล่านี้เป็น CPU จึงเร็วกว่าติดตั้ง numpy ด้วย "conda install" ใน Anaconda หรือ Miniconda ใช้ intel MKL

ATLAS (ซอฟต์แวร์พีชคณิตเชิงเส้นที่ปรับโดยอัตโนมัติ)

หนึ่งใน BLAS ฟรีตามชื่อที่แนะนำ มันตั้งค่าพารามิเตอร์ที่เหมาะสมที่สุดสำหรับฮาร์ดแวร์ที่จะติดตั้งโดยการปรับแต่งเพื่อให้ได้การคำนวณความเร็วสูง

ความแตกต่างของเวลาในการคำนวณเนื่องจากความแตกต่างของ BLAS

ความจริงที่ว่า BLAS ที่ใช้หลัง numpy ส่งผลต่อความเร็วในการประมวลผล หมายความว่ามันส่งผลต่อความเร็วในการดำเนินการของไลบรารีที่ขึ้นอยู่กับ numpyสิ่งนี้ยังส่งผลต่อ scipy, pandas, scikit-learn และ tensorflow

นักเทคโนโลยีจำนวนมากกำลังเปรียบเทียบเกณฑ์มาตรฐานสำหรับความแตกต่างของ BLAS (conda install กับ pip install) แต่ลองมาดูอันที่เผยแพร่ใน Intel® Developer Zone
การคำนวณเมทริกซ์โดย scipy แสดงเวลาที่จำเป็นสำหรับการคูณเมทริกซ์เชิงซ้อนไปทางขวา และ Intel MKL สามารถประมวลผลได้เร็วกว่า ATLAS

การเปรียบเทียบการคำนวณเมทริกซ์กับ scipy บน intel MKL และ ATLAS
การเปรียบเทียบการคำนวณเมทริกซ์กับ scipy บน intel MKL และ ATLAS
อ้างโดย:https://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl/

ต่อไปนี้มาจากเจ้าหน้าที่ Anaconda การเปรียบเทียบจำนวนภาพที่ฝึกฝนได้ต่อวินาทีสำหรับโมเดลการเรียนรู้เชิงลึกแต่ละโมเดลที่มีการติดตั้ง tensorflow โดยการติดตั้ง conda หรือ pip ความแตกต่างนั้นสูงถึง 1 เท่า

ความแตกต่างระหว่าง pip (OpenBLAS) และ conda (intel MKL) ในแต่ละโมเดลการเรียนรู้เชิงลึก
ความแตกต่างระหว่าง pip (OpenBLAS) และ conda (intel MKL) ในแต่ละโมเดลการเรียนรู้เชิงลึก
(ซีพียูคือ Intel®Xeon®Gold 6130)
อ้างโดย:https://www.anaconda.com/tensorflow-in-anaconda/

นอกจากนี้ยังมีการเปรียบเทียบอื่น ๆ เช่น pandas และ scikit learn (ประสิทธิภาพของ Intel vs. Anaconda vs. vanilla Python – เกณฑ์มาตรฐานส่วนตัวของฉัน) เนื่องจาก conda ติดตั้งและจัดการไลบรารีของตัวเอง ดูเหมือนว่าจะมีข้อได้เปรียบในหลายกรณี

วิธีตรวจสอบ BLAS ใน Python

__config__.show()เพียงแค่เรียกใช้

นำเข้า numpy เป็น np np.__config__.show()

>>
mkl_info: libraries = ['mkl_rt'] library_dirs = ['C:/Users/']define_macros = [('SCIPY_MKL_H', ไม่มี), ('HAVE_CBLAS', ไม่มี)] include_dirs = ['C:\\Program Files ( x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl\\include', 'C: \\ไฟล์โปรแกรม (x86)\\IntelSWTools\\compilers_and_libraries_2019.0.117\\windows\\mkl\\lib', 'C:/Users/programing/Miniconda3/envs/ML\\Library\\include']

หากแสดง mkl_info แสดงว่าใช้ intel MKL