อัปเดตครั้งสำคัญของ 🤗 Kernels: ยกระดับความปลอดภัยและรองรับการพัฒนาแบบ Agent
ใน โพสต์ก่อนหน้า (From Zero to GPU) เราได้แนะนำโปรเจกต์ 🤗 Kernels ซึ่งมีเป้าหมายเพื่อสร้างมาตรฐานในการบรรจุ (packaged), แจกจ่าย (distributed) และใช้งานเอนจิ้นการประมวลผลแบบกำหนดเอง (custom kernels) โดยเรามุ่งเน้นที่ความง่ายในการใช้งาน ความปลอดภัย และความเป็นมิตรกับระบบนิเวศของ Hub
ในช่วงไม่กี่เดือนที่ผ่านมา เราได้พัฒนาโปรเจกต์จนบรรลุเป้าหมายที่ตั้งไว้ และในระหว่างนั้นเรายังได้ออกแบบโครงสร้างใหม่เกือบทั้งหมด โพสต์นี้จะสรุปอัปเดตสำคัญที่เราได้ปล่อยออกมาและทิศทางในอนาคต
สารบัญ
- Kernels – ประเภท repository ใหม่
- การรักษาความปลอดภัยที่ปรับปรุงให้ดีขึ้น
- CLIs ที่ปรับโฉมใหม่
- รองรับ frameworks และ backends มากขึ้น
- รากฐานสำหรับการพัฒนา kernel แบบ agentic
- จิปาถะ
- สรุป
Kernels – ประเภท repository ใหม่
เราได้เปิดตัวประเภท repository แบบใหม่บน Hub ที่เรียกว่า "kernel" เพื่อตอบโจทย์ผู้ใช้ที่มีความต้องการเฉพาะเจาะจงด้านการคำนวณ โดยผู้ใช้สามารถตรวจสอบได้ว่า kernel นั้นๆ รองรับตัวเร่งความเร็ว (accelerators), ระบบปฏิบัติการ และเวอร์ชัน backend ใดบ้าง:

หน้า Kernel: kernels-community/flash-attn3
ผู้ใช้สามารถเลือกดู kernels ทั้งหมดบน Hub ได้ที่นี่: https://huggingface.co/kernels
การทำให้ kernels กลายเป็นส่วนประกอบหลัก (first-class citizens) บน Hub ยังเป็นประโยชน์ต่อระบบนิเวศ AI โดยรวม เพราะช่วยให้ผู้ใช้เห็นแนวโน้มการใช้งานร่วมกับโมเดลและแอปพลิเคชันต่างๆ ทำให้ค้นหา kernel ที่ต้องการได้ง่ายขึ้น
การรักษาความปลอดภัยที่ปรับปรุงให้ดีขึ้น เนื่องจาก Kernels ทำงานด้วยสิทธิ์ระดับเดียวกับโปรเซส Python ที่รันอยู่ kernel ที่เป็นอันตรายจึงอาจสร้างความเสียหายร้ายแรงได้ ความปลอดภัยจึงเป็นสิ่งสำคัญสูงสุดของโปรเจกต์นี้
เราให้ความสำคัญกับการทำซ้ำได้ (reproducibility) เพื่อให้คุณสามารถคอมไพล์ kernel และตรวจสอบเทียบกับ source code ได้ด้วยตัวเอง โดยเราใช้ Nix เพื่อให้การ build คงความบริสุทธิ์ผ่านระบบ sandbox ที่แยกออกจากกันอย่างเด็ดขาด นอกจากนี้ยังมีการฝัง Git SHA1 ลงไปในตัว kernel เพื่อยืนยันที่มาของซอร์สโค้ด (provenance)
ล่าสุดเราได้เพิ่มชั้นการป้องกันเพิ่มเติม ได้แก่ ระบบผู้เผยแพร่ที่เชื่อถือได้ (trusted kernel publishers) และการลงนามโค้ด (code signing)
ผู้เผยแพร่ kernel ที่เชื่อถือได้ (Trusted kernel publishers) เพื่อป้องกันผู้ไม่หวังดีอัปโหลด kernel อันตราย แพ็กเกจของ Kernels จะโหลดเฉพาะโค้ดจาก trusted publishers (องค์กรที่ได้รับการรับรองความสุจริตจากชุมชน) เป็นค่าเริ่มต้นเท่านั้น
หากคุณต้องการโหลด kernel จากผู้ใช้ทั่วไป คุณต้องยืนยันความประสงค์ผ่าน argument trust_remote_code ดังนี้:
from kernels import get_kernel
kernel_module = get_kernel(
"Atlas-Inference/gdn", version=1, trust_remote_code=True
)ในขณะนี้ ผู้ใช้ทั่วไปจะยังไม่สามารถเผยแพร่ kernel บน Hub ได้โดยตรง แต่ต้องส่งคำขอผ่านการตั้งค่าบัญชี (account settings) เพื่อให้ทีมงานพิจารณาเป็นรายกรณี
การลงนาม Kernel (Kernel signing)
เราใช้การลงนามโค้ดเพื่อป้องกันกรณีที่บัญชีของ trusted publisher ถูกบุกรุก โดยใช้ cosign ของ Sigstore ร่วมกับ ephemeral private keys (คีย์อายุการใช้งานสั้น) ในการลงนามผ่าน GitHub workflow ที่เชื่อถือได้
ปัจจุบัน kernel-builder รองรับการลงนามแล้ว และมีคำสั่ง kernels verify-signature สำหรับตรวจสอบความถูกต้อง แม้ว่าในตอนนี้ระบบจะยังไม่ได้ตรวจสอบลายเซ็นโดยอัตโนมัติขณะโหลด แต่คุณสามารถศึกษาวิธีการตั้งค่าได้ใน บันทึกการปล่อยเวอร์ชัน kernels 0.16.0
CLIs ที่ปรับโฉมใหม่
เราได้แยกหน้าที่การทำงาน (separation of concern) ระหว่าง kernels และ kernel-builder ให้ชัดเจนขึ้น โดยกำหนดให้ kernels ทำหน้าที่โหลดและเตรียมใช้งานเท่านั้น ส่วนงานด้านการสร้าง (building) จะย้ายไปอยู่ที่ kernel-builder ทั้งหมด
การปรับปรุงนี้ช่วยให้ทั้งสองเครื่องมือกะทัดรัดและทำงานเฉพาะทางได้ดีขึ้น:
รองรับ frameworks และ backends มากขึ้น
เราได้ขยายขอบเขตการรองรับเฟรมเวิร์กต่างๆ ดังนี้:
- Torch Stable ABI: ช่วยให้ kernel รองรับ PyTorch เวอร์ชันปัจจุบันและอนาคต (ย้อนหลังประมาณ 2 ปี) ได้โดยไม่ต้องแก้ไขโค้ดใหม่
- Apache TVM FFI: เพิ่มการรองรับ Standardized ABI เพื่อให้ kernel สามารถทำงานข้ามเฟรมเวิร์กได้ ทั้ง PyTorch, Jax และ CuPy
รากฐานสำหรับการพัฒนา kernel แบบ agentic
เครื่องมือของเราถูกออกแบบมาเพื่อรองรับเทรนด์การใช้ AI Agent เข้ามาช่วยออกแบบและปรับแต่ง kernel แบบวนซ้ำ (iteratively optimize) ตั้งแต่การวางโครงสร้าง (scaffold), การ build ไปจนถึงการวัดประสิทธิภาพ (benchmark) เพื่อให้เหมาะกับการทำงานของ Agent เราได้ออกแบบ CLI ให้เป็นรูปแบบ agent-optimized เช่น คำสั่งที่ไม่ต้องโต้ตอบ (non-interactive) และการแสดงผลที่โปรแกรมตีความง่าย นอกจากนี้ยังมีการเพิ่ม ทักษะเฉพาะด้านสำหรับ backend เพื่อให้ Agent จัดการกับ toolchains หรือการคอมไพล์ที่ซับซ้อนได้เอง
นอกจากนี้ การ ผสานรวมกับ HF Jobs ยังช่วยให้ Agent สามารถรันการทดสอบข้ามฮาร์ดแวร์หลายรุ่นเพื่อเปรียบเทียบประสิทธิภาพกับค่า baseline ได้อย่างแม่นยำ
ตัวอย่าง kernel ที่พัฒนาด้วยเวิร์กโฟลว์นี้:
จิปาถะ
การตั้งค่าสภาพแวดล้อม
สำหรับการสร้าง kernel ด้วย kernel-builder เราได้จัดเตรียม สคริปต์การติดตั้ง แบบคลิกเดียว และยังมี คู่มือการตั้งค่า Terraform สำหรับผู้ที่ใช้งาน ephemeral instances
System card สำหรับ kernels
เมื่อพุช kernel ไปยัง Hub ระบบจะสร้าง system card เพื่อแสดงข้อมูลการใช้งานและอินเทอร์เฟซต่างๆ ไว้ที่หน้าปกอัตโนมัติ:

ตัวอย่าง: kernels-community/flash-attn3
ตรวจสอบความเข้ากันได้ของระบบ
ผู้ใช้สามารถตรวจสอบว่า kernel รองรับระบบของตนหรือไม่ผ่านเมธอด has_kernel():
from kernels import has_kernel
print(has_kernel("kernels-community/activation", version=1))หากต้องการทราบเหตุผลเชิงลึกว่าทำไมบางเวอร์ชันถึงไม่รองรับ สามารถใช้ get_kernel_variants():
from kernels import get_kernel_variants, VariantAccepted
for decision in get_kernel_variants("kernels-community/activation", version=1):
name = decision.variant.variant_str
if isinstance(decision, VariantAccepted):
print(f"{name}: compatible")
else:
print(f"{name}: rejected ({decision.reason})")ปรับปรุงการรองรับ manylinux_2_28
เพื่อแก้ปัญหาอาการแฮงก์ (segfaults) จากความขัดแย้งของไลบรารี C++ (global initializations ของ libstdc++) เราได้เปลี่ยนจากการลิงก์แบบคงที่ (statically linked) มาเป็นการลิงก์แบบไดนามิกผ่าน toolchain อย่างเป็นทางการของ manylinux_2_28 แทน
สรุป
โปรเจกต์ Kernels มุ่งมั่นที่จะเป็นเครื่องมือสำคัญสำหรับทั้งนักพัฒนาและผู้ใช้ custom kernels เรายินดีรับฟังข้อเสนอแนะและเชิญชวนให้ทุกคนมีส่วนร่วมพัฒนาชุมชนนี้ต่อไป
กิตติกรรมประกาศ: ขอบคุณ Aritra สำหรับการตรวจสอบโพสต์นี้
ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
