Skip to content

เร่งความเร็วโค้ดใน Python ด้วย Numba

ทุกท่านคงทราบกันดีว่า ภาษาไพทอนเป็นภาษาจำพวก scripting language และภาษาไพทอนเป็นภาษา interpreter

ในบทความที่ผ่านมา ผมได้นำเสนอวิธีการเร่งความเร็วโค้ดไพทอน ไม่ว่าจะเป็น เขียนโมดูลแยกออกมา, ใช้ for loop แทน while loop , เขียน Cython เชื่อมภาษาซีกับไพทอน, คอมไพล์โค้ดไปเป็นไฟล์ .pyc,  แปลงโค้ดไปเป็นภาษา Java C/C++ หรือใช้ PyPy ในการรันโค้ด เป็นต้น

แต่ถ้าหากจำเป็นต้องการใช้งาน CPython เท่านั้น ผมขอแนะนำอีกวิธีหนึ่ง คือ ใช้โมดูล Numba เข้ามาช่วย

Numba เป็นโมดูล JIT compiler สำหรับใช้คอมไพล์โค้ดไพทอนด้วย LLVM ช่วยเร่งความเร็วในการคอมไพล์โค้ดไพทอนไปเป็นภาษาเครื่อง
โดยโมดูลนี้ใช้ NumPy เป็นกลไกในการแปลงโค้ดภาษาไพทอนไปเป็นภาษาเครื่อง

  • พัฒนาโดย Continuum Analytics, Inc (ผู้พัฒนา Anaconda)
  • รองรับทั้ง Python 2 และ Python 3
  • ใช้ BSD License

การติดตั้ง Numba

สามารถติดตั้งได้โดยใช้คำสั่ง pip:

pip install numba

หรือสำหรับท่านที่ใช้ Anaconda Distribution:

conda install numba

สำหรับผู้ใช้งาน Windows
ก่อนอื่นให้ทำการโหลด llvmlite มาติดตั้งก่อน โหลดไฟล์ .whl ได้จาก http://www.lfd.uci.edu/~gohlke/pythonlibs/#llvmlite ทำการติดตั้งเสร็จ
แล้วทำการติดตั้ง Numba โดยทำการโหลดไฟล์ .whl มาติดตั้งได้จาก http://www.lfd.uci.edu/~gohlke/pythonlibs/#numba


การใช้งานเบื้องต้น

ใช้ Numba ในการคอมไพล์โค้ดไฟล์ด้วย @jit decorator

import time
from numba import jit, int32
# ไม่ใช้ Numba
def f1(x, y):
	a = time.clock()
	while x<y:
		x+=1
	return time.clock()-a
# ใช้ Numba
@jit	
def f2(x, y):
	a = time.clock()
	while x<y:
		x+=1
	return time.clock()-a
print(f1(0,10000000))
print(f2(0,10000000))

ผลลัพธ์

1.745886006120316
0.06488709573499385

จะเห็นได้ว่า ฟังก์ชัน f1 ที่ไม่ใช้ Numba จะทำงานช้ากว่า ฟังก์ชัน f2 ที่ใช้ Numba เข้ามาช่วย

อ่านเอกสารการใช้งานได้ที่ http://numba.pydata.org/doc.html

หน้าเว็บ Numba  http://numba.pydata.org/
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *