Nvidia มี Python library ใหม่สำหรับการใช้ GPU ในการทดแทนการประมวลผลสำหรับ Library Pandas, Numpy, Scipy, Networkx หรือ sklearn โดยเรียกว่า RAPIDS (Rapids.ai) ซึ่งประสิทธิภาพเมื่อเทียบกับ CPU แบบ Multiprocessing แล้วได้ประสิทธิภาพที่สูงกว่า 10 - 1,000 เท่า และปัจจุบัน RAPIDS มียอดดาวน์โหลดแล้วมากกว่า 3 ล้านครั้งและเพิ่มขึ้นอย่างต่อเนื่อง
TL;DR.
Nvidia มี Python library ใหม่สำหรับการใช้ GPU ในการทดแทนการประมวลผลสำหรับ Library Pandas, Numpy, Scipy, Networkx หรือ sklearn โดยเรียกว่า RAPIDS (Rapids.ai) ซึ่งประสิทธิภาพเมื่อเทียบกับ CPU แบบ Multiprocessing แล้วได้ประสิทธิภาพที่สูงกว่า 10 - 1,000 เท่า และปัจจุบัน RAPIDS มียอดดาวน์โหลดแล้วมากกว่า 3 ล้านครั้งและเพิ่มขึ้นอย่างต่อเนื่อง
เกริ่น
ถ้าพูดถึง GPU Nvidia แล้วเราคงนึกถึงการนำ GPU มาใช้ในการ Train and Inference AI เป็นอันดับแรก แต่นอกจากงานฝั่ง AI แล้ว GPU Nvidia สามารถทำงานได้หลากหลายมากกว่างาน AI
Nvidia พยายามจะเปลี่ยนแนวทางจาก GPU ให้กลายเป็น GP-GPU (General Purpose Graphic Processing Unit)
โดยการเปลี่ยนแนวทางนี้เริ่มมาจากการปูทางผ่าน Low level API ตั้งแต่การพัฒนาด้าน I/O, Encode and Decode, Virtual VRAM และ Distributed compute
Low level API ทั้งหมดเป็นพื้นฐานในการพัฒนาขึ้นมาเป็น High level API และ Library สำหรับการใช้งานด้วยภาษา Python เป็นหลัก เพื่อให้ผู้ใช้งานด้าน Data scientist, Data engineer, Data analyst, Machine learning engineer และ AI Researcher สามารถใช้งานทดแทนงานที่เคยทำอยู่ได้อย่างราบรื่น
กลุ่มของ Library ที่ทาง Nvidia ได้พัฒนาขึ้นมานั้นมีชื่อว่า RAPIDS โดยเป็น Open-source library ทั้งหมดและมีการเผยแพร่ Code ผ่านทาง Github ซึ่งสามารถติดตั้งและทดลองใช้ Library ดังกล่าว ฟรี !!
Library ภายใน RAPIDS นั้นจะถูกสร้างขึ้นมาโดยล้อจาก Library ดั้งเดิมได้แก่
เรื่องที่ควรรู้ก่อนเริ่มต้นใช้งาน Nvidia RAPIDS
Data Communication
Data Communication เคยเป็นหนึ่งในปัญหาใหญ่ของการประมวลผลด้วย GPU เพราะการจะประมวลผลด้วย GPU ได้นั้น จำเป็นต้องนำข้อมูลมาไว้ที่ VRAM (GPU Memory) ถึงจะทำการประมวลผลได้ และลำดับกระบวนการที่ต้องทำเมื่อเราโหลดข้อมูลจาก Storage มาประมวลผลที่ GPU คือ
ลำดับกระบวนการดังกล่าว เกิดการทำงานที่ซ้ำซ้อน เพราะไม่มีความจำเป็นที่ต้องนำข้อมูลไปพักไว้ที่ Memory โดยไม่มีความเกี่ยวข้องในการประมวลผล
ทำให้เกิดการ Develop Low level API ขึ้นมาใหม่ 1 API โดยมีชื่อเรียกว่า Magnum IO GPUDirect storage
Magnum IO ช่วยทำให้สามารถโหลดข้อมูลจาก Storage มายัง VRAM ได้โดยตรง ไม่จำเป็นต้องผ่าน Memory อีกต่อไป ทำให้มีประสิทธิภาพในการเคลื่อนย้ายข้อมูลได้ดีมากยิ่งขึ้นมากถึง 3 เท่า
Compute Unit
Streaming Multiprocessor (SM) design ถือเป็นอีกหนึ่งเรื่องที่ควรเรียนรู้ก่อนใช้งาน GPU เนื่องจากมีลักษณะการออกแบบเฉพาะตัวสูงและมีความหลากหลายในการออกแบบ ซึ่งหนึ่งสถาปัตยกรรมย่อยสามารถออกแบบ SM ได้มากกว่า 1 รูปแบบ ทำให้การใช้งาน GPU นั้นมีความซับซ้อนขึ้นไปอีก
จุดสังเกตสำหรับ SM คือการที่มีประเภทของการประมวลผล Cuda และ Tensor มีลักษณะรวมถึง Library ที่รองรับแตกต่างกัน โดยมีข้อเปรียบเทียบดังนี้
ประสิทธิภาพในการประมวลผลของ GPU นั้นถือเป็นอีกหนึ่งเรื่องควรศึกษาทุกครั้งก่อนเลือกซื้อ GPU เพราะแต่ละรุ่นย่อยของ GPU นั้นมีประสิทธิภาพที่แตกต่างกัน เนื่องจากจำนวนของ Cuda core ที่ไม่เท่ากันแล้ว บางรุ่นยังมีจำนวน Tensor Core ที่มากน้อยแตกต่างกันไปตามจุดประสงค์ของรุ่นนั้น ๆ
หน่วยการวัดผลเชิงทฤษฏีนั้นจะใช้หน่วย FLOPS (Floating point Operations Per Second) และ OPS (Operations Per Second) โดยค่าดังกล่าวยิ่งเยอะยิ่งดี
สำหรับการวัดผลโดยการใช้งาน Deep learning นั้นจะถูกวัดผลโดย MLPerfs (MLCommons ) โดยเป็นการวัดผลการ Training and Inference Model โดยเฉพาะ
RAPIDS
วันนี้จะมาแนะนำ Library น่ารู้จัก 3 ตัวได้แก่ cuDF, cuML และ cuCIM
การใช้งาน RAPIDS นั้นสามารถทดลองใช้งานผ่าน Google colab, AWS Sagemaker หรือ Docker contain ผ่าน Nvidia runtime toolkit เริ่มต้นใช้งานผ่าน RAPIDS | GPU Accelerated Data Science ได้เลย
CUDF
cuDF ถูกออกแบบมาเพื่อทดแทนการใช้งาน Pandas ที่ใช้งานบน CPU เป็นหลัก โดยข้อแตกต่างหลักระหว่าง Pandas และ cuDF คือ cuDF ถูกพัฒนาขึ้นมาโดยใช้ Columnar memory format ทำให้การเข้าถึงข้อมูลนั้นเข้าถึงในรูปแบบ Column เป็นหลัก
ประสิทธิภาพและหน้าตาของ Code cuDF เมื่อเทียบกับ Pandas
ข้อควรรู้สำหรับการใช้งาน cuDF
cuDF นั้นจะมีประสิทธิภาพ Outperform Pandas เมื่อมีขนาด Data ในการประมวลผลมากกว่าจุด ๆ หนึ่ง โดยส่วนใหญ่แล้วในการทดลองวัดประสิทธิภาพ cuDF จะใช้ Data ที่มีขนาดมากกว่า 1M Row และ 10 Column หรือ Data shape (1000000,10) เป็นต้นไป ดังนั้นถ้า Data ที่นำเข้ามาประมวลผลมีขนาดน้อยกว่าตัวอย่าง การใช้งาน Pandas จะมีโอกาสที่มีประสิทธิภาพที่สูงกว่า
CUML
cuML ถูกออกแบบมาเพื่อใช้งานทดแทน sklearn และ xgboost ซึ่งการใช้งาน cuML นั้นจะ Implement machine learning algorithm ให้สามารถใช้งานบน GPU ได้ จากเดิมที่เราใช้งานได้แค่บน CPU ซึ่ง cuML นั้นสามารถใช้งานร่วมกับ cuDF โดยไม่จำเป็นต้องคัดลอกข้อมูลใหม่อีกครั้งหนึ่ง (Zero data copy) ทำให้สามารถลดคอขวดในด้านของ Data communication
ประสิทธิภาพและหน้าตาของ Code cuML เมื่อเทียบกับ sklearn
ข้อควรรู้สำหรับการใช้งาน cuML
cuML นั้นควรใช้งานร่วมกับ cuDF ตั้งแต่ต้นเพื่อช่วยให้ Data communication ไม่เกิดการทำงานซ้ำซ้อนและ cuML นั้นยังสามารถใช้งานร่วมกับ Deep learning framwork อื่นเช่น pytorch หรือ tensorflow โดยไม่จำเป็นต้องคัดลอกข้อมูลซ้ำ (Zero data copy) ได้อีกด้วย
CUCIM
cuCIM ถูกออกแบบมาเพื่อใช้งานทดแทน skimage และ openslide ซึ่งเป็นการทำงานกับรูปภาพที่มีจำนวนมิติมากกว่า 2 มิติและไฟล์รูปภาพขนาดใหญ่ โดยรองรับไฟล์นามสกุล เช่น Aperio ScanScope Virtual Slide (SVS), Philips TIFF และ Multi-resolution RGB TIFF ซึ่ง cuCIM ยังได้รับคุณสมบัติ Zero data copy เมื่อใช้งานร่วมกับ pytorch, tensorflow หรือ cupy (numpy like) และ RAPIDS library อื่น ๆ
อนาคตของ RAPIDS และ Ecosystem
RAPIDS ถือเป็นอีกหนึ่ง Innovation ที่น่าประทับใจและน่าจับตามองให้ช่วง 3 - 5 ปีนี้ ทั้งในแง่ของประสิทธิภาพของงานเทียบกับ CPU และในแง่ของการประยุกต์ใช้งาน GPU ที่มีโอกาสแพร่หลายมากยิ่งขึ้น
แต่ก็ยังมีความท้าทายที่ต้องควรระวังก่อนใช้งาน RAPIDS ทั้งความท้าทายในด้านของ Developer ที่จำเป็นต้องเรียนรู้การใช้งาน GPU เพิ่มมาขึ้น รวมถึงวิธีการ Monitor, Validate และ Debug RAPIDS
ทิ้งท้าย Developer Community
การใช้งาน GPGPU เป็นสิ่งที่น่าตื่นเต้น, ท้าทาย และ เป็นความเสี่ยง การรวมกลุ่มของ Developer เพื่อสร้าง Community สำหรับการแชร์ Case study, Tutorial หรือ Succeed case จึงเป็นสิ่งสำคัญ ดังนั้น จึงเป็นที่มาของการเริ่มต้นสร้าง Nvidia User Group Thailand ขึ้นมา เพื่อเป็นแหล่งรวบรวมข้อมูลการใช้งาน, ปัญหาที่ควรระวัง, วิธีการแก้ไขปัญหา และกรณีศึกษา โดยทาง VulturePrime เป็นผู้ดูแลและรับบทผู้เขียน How-to, Tutorial, Trick, FAQ, Highlight Feature, Vendor list, News update, Feature update และอื่น ๆ พร้อมทั้งเปิดโอกาสให้ Partner และ Member มีส่วนร่วมในการแลกเปลี่ยนความรู้ตลอดจนการจัดกิจกรรมให้ความรู้ หรือ workshop
เราหวังว่า เราจะสามารถผลักดันความสามารถและเพิ่มความเป็นไปได้ทางเทคโนโลยีให้แก่สมาชิกทุกท่านให้ทัดเทียมกับระดับนานาชาติ ผ่านการมีส่วนร่วมจากทุกภาคส่วน