FireDucks ไลบรารี Python ตัวแรงที่ช่วยให้ Pandas ทำงานเร็วขึ้นสูงสุดถึง 20 เท่า

This Python Library Can Run Pandas Workloads Up to 20x Faster

Pandas มักจะเป็นตัวเลือกแรกในการทำงานกับข้อมูลแบบตารางใน Python เนื่องจากใช้งานง่ายและทำงานร่วมกับระบบนิเวศอื่นได้ดี แต่เมื่อชุดข้อมูลขยายใหญ่ขึ้นถึงระดับหลายล้านแถว การดำเนินการพื้นฐานอย่างการเรียงลำดับ (Sorting) การกรอง (Filtering) หรือการจัดกลุ่ม (Grouping) มักจะเริ่มทำงานช้าลงอย่างเห็นได้ชัด

นี่คือจุดที่ FireDucks เข้ามาแก้ปัญหา โดย FireDucks มอบ API ที่เข้ากันได้กับ pandas ทำให้คุณสามารถใช้ไวยากรณ์ที่คุ้นเคยได้เช่นเดิม แต่ได้ประสิทธิภาพที่สูงขึ้นจากเทคนิค Lazy Execution, Compiler Optimizations และการประมวลผลผ่าน CPU แบบ Multithreaded

จากการทดสอบ Benchmark เปรียบเทียบกับ pandas โดยใช้ชุดข้อมูล 10 ล้านแถวใน 7 เวิร์กโหลดหลัก ผลลัพธ์ที่ได้น่าประทับใจอย่างยิ่ง โดยความแตกต่างที่โดดเด่นที่สุดคือการเรียงลำดับชุดข้อมูล ซึ่ง FireDucks ทำงานเสร็จ เร็วกว่า pandas ถึง 20.77 เท่า และมีค่าเฉลี่ยความเร็วเพิ่มขึ้นรวมทุกรายการอยู่ที่ 7.28 เท่า

FireDucks คืออะไร?

FireDucks คือไลบรารี DataFrame ที่เร่งความเร็วด้วยคอมไพเลอร์ พัฒนาโดย NEC ซึ่งถูกออกแบบมาให้ทำงานทดแทน pandas ได้เกือบสมบูรณ์เพียงแค่เปลี่ยนคำสั่ง import เท่านั้น

FireDucks Execution Model

ภาพจาก Execution Model | FireDucks

ความแตกต่างสำคัญอยู่ที่วิธีประมวลผล ปกติ pandas จะรันแต่ละคำสั่งทันที (Eager Execution) แต่ FireDucks จะใช้ lazy execution ซึ่งจะรวบรวมลำดับการทำงานทั้งหมดมาสร้างเป็นแผนการประมวลผลที่เหมาะสมที่สุดก่อน แล้วจึงสั่งรันผ่านคอร์ CPU หลายตัวพร้อมกัน วิธีนี้ช่วยลดการคำนวณส่วนเกินและเพิ่มความเร็วในการจัดการข้อมูลขนาดใหญ่ได้อย่างมหาศาล

การเริ่มต้นใช้งาน FireDucks

คุณสามารถติดตั้ง FireDucks เวอร์ชันล่าสุดได้ง่ายๆ ผ่าน pip:

pip install -U fireducks

เมื่อติดตั้งแล้ว เพียงเปลี่ยนการ import pandas ในโค้ดเดิมของคุณเป็นรูปแบบนี้:

import fireducks.pandas as pd

จากนั้นคุณก็สามารถเขียนโค้ดต่อด้วยไวยากรณ์เดิมได้ทันที ตัวอย่างเช่น:

import fireducks.pandas as pd
 
df = pd.read_parquet("transactions.parquet")
 
result = (
    df[df["price"] > 100]
    .groupby("category", as_index=False)
    .agg(
        total_sales=("price", "sum"),
        average_price=("price", "mean"),
    )
    .sort_values("total_sales", ascending=False)
)
 
print(result)

ในการทำงานจริง FireDucks จะไม่รันทุกคำสั่งในทันที แต่จะรอจนกว่าจะมีการเรียกใช้ผลลัพธ์จริงๆ เช่น คำสั่ง print() ระบบถึงจะประมวลผลแผนงานที่ปรับแต่งมาแล้วอย่างรวดเร็ว

วิธีที่เราทำ Benchmark

เราทำการทดสอบบนชุดข้อมูล 10 ล้านแถว ร่วมกับตาราง lookup อีก 2 ล้านแถว โดยครอบคลุม 7 เวิร์กโหลดทั่วไป ได้แก่ การอ่าน Parquet, การกรอง, การจัดกลุ่ม (Low/High-cardinality), การเรียงลำดับ, การรวมตาราง และการประมวลผลแบบต่อเนื่อง (Chained Pipeline)

การทดสอบทำในสภาพแวดล้อม Linux โดยใช้ CPU AMD EPYC 9V74 (9 cores) และ RAM 15.93 GiB รันบน Python 3.12.13 เพื่อให้ได้ผลลัพธ์ที่แม่นยำที่สุด

ผลลัพธ์ Benchmark ระหว่าง pandas vs. FireDucks

การดำเนินการค่ามัธยฐาน pandasค่ามัธยฐาน FireDucksความเร็วที่เพิ่มขึ้น
อ่าน Parquet0.3243 วินาที0.1220 วินาที2.66 เท่า
กรองข้อมูลหลายคอลัมน์0.5159 วินาที0.0444 วินาที11.63 เท่า
จัดกลุ่มแบบ Low-cardinality0.9061 วินาที0.0587 วินาที15.44 เท่า
จัดกลุ่มแบบ High-cardinality2.1634 วินาที0.3765 วินาที5.75 เท่า
เรียงลำดับชุดข้อมูลทั้งหมด15.2674 วินาที0.7352 วินาที20.77 เท่า
รวมตารางกับ lookup 2 ล้านแถว1.6886 วินาที0.5271 วินาที3.20 เท่า
Pipeline แบบต่อเนื่อง1.0418 วินาที0.1754 วินาที5.94 เท่า

FireDucks สามารถทำให้ Pandas เร็วขึ้น 20 เท่าได้จริงหรือ?

คำตอบคือใช่ แต่ผลลัพธ์จะแตกต่างกันไปตามประเภทของงาน โดยความเร็วที่เพิ่มขึ้น 20.77 เท่า เกิดขึ้นในงานประเภทการเรียงลำดับข้อมูลจำนวนมาก ซึ่งสอดคล้องกับรายงานจาก Toyota Technical Development Corporation (TTDC) ที่นำไปใช้ในงาน AI และพบว่าช่วยลดเวลาการวิเคราะห์ข้อมูลได้ถึง 60-76%

แม้แต่นักวิทยาศาสตร์ข้อมูลอย่าง Avi Chawla ที่ทดสอบบน Google Colab ก็พบว่าความเร็วเพิ่มขึ้นถึง 4 เท่า ดังนั้นประสิทธิภาพที่แท้จริงจะขึ้นอยู่กับลักษณะข้อมูลและฮาร์ดแวร์ที่คุณใช้งานเป็นหลัก

บทสรุป

จุดเด่นของ FireDucks ไม่ได้มีแค่ตัวเลขความเร็ว แต่คือความง่ายในการเปลี่ยนผ่านจากโค้ดเดิม เพียงเปลี่ยนการ import ก็สามารถเพิ่มประสิทธิภาพได้ทันทีโดยเฉพาะในงานที่ต้องใช้พลังการประมวลผลสูงหรือการทำงานแบบขนาน

สำหรับนักวิเคราะห์ข้อมูลที่ต้องดีลกับชุดข้อมูลมหาศาล การประหยัดเวลาแม้เพียงเล็กน้อยในแต่ละ Pipeline หมายถึงการประหยัดต้นทุนและช่วยให้การทดลองงานวิจัยทำได้รวดเร็วยิ่งขึ้นในแต่ละวัน

Source: KDnuggets
ดูแลงานแปลและเรียบเรียงโดย SirilukP

ความคิดเห็น (0)

เข้าสู่ระบบเพื่อร่วมแสดงความเห็น

สมัครสมาชิก

มาเป็นคนแรกที่แสดงความเห็นกันเลยโบร