ตอนนี้ Streamlit รองรับ chabot application แล้วครับโดยเราสามารถเพิ่ม input dialogue และ chat message ผ่าน
st.chat_input และ st.chat_message
ดูรายละเอียดที่ https://docs.streamlit.io/knowledge-base/tutorials/build-conversational-apps
ตัวอย่างเพิ่มเติมมากมายในการเชื่อม streamlit กับ Langchain https://github.com/langchain-ai/streamlit-agent/tree/main/streamlit_agent
--
โดยการจำ chat history เราจะใช้ความสามารถของ streamlit ที่สามารถจำ state ของ session ของ user แต่ละคน https://docs.streamlit.io/library/api-reference/session-state
โน้ตย่อ Huggingface Ecosystem 6 กลุ่ม 20 โมดูล
Thaikeras & Kaggle - เมษายน 2023
แม้ว่าแรกเริ่ม Huggingface จะเป็นที่รู้จักในฐานะผู้พัฒนา library ของ Transformers ที่ใช้งานง่ายที่สุด, ในรอบ 1-2 ปีที่ผ่านมานั้น Huggingface ได้แผ่ขยาย Ecosystem ของตัวเองไปไกลมากและแทบจะครอบคลุมทุก subfield ของ Machine Learning และผงาดขึ้นมาเป็น 1 ใน startup ที่มาแรงทีสุด
ในบทความนี้จะสำรวจ Ecosystem นี้แบบรวบรัด อธิบายจุดมุ่งหมายหลักของแต่ละส่วนสั้นๆ รวมทั้งลิงก์เพื่อเข้าใช้งาน เพื่อเป็นจุดเริ่มต้นให้เราๆได้ใช้งานและศึกษาได้ง่ายขึ้น รวมทั้งเข้าใจเวลายักษ์ใหญ่แห่งวงการ startup นี้เคลื่อนไหวในแต่ละด้านครับ
.
Huggingface (HF) Ecosystem อาจพอแบ่งเป็นกลุ่มใหญ่ๆ ได้ 6 กลุ่มดังนี้
- กลุ่มโมเดล 2. กลุ่มTrainer 3. กลุ่ม ModelOpimizer
- กลุ่มTools 5. กลุ่มProduction 6. กลุ่มEducation&Research
โดย Ecosystem จะสนับสนุนโมเดล Pytorch 100% ส่วนโมเดล TF-Keras และ Flax-Jax จะถูกสนับสนุนเพียงบางส่วนใน Ecosystem เท่านั้นครับ
.
** 1.กลุ่มโมเดล **
มีเป้าหมายคือ เพียงผู้ใช้พิมพ์โค้ดแค่ 1-2 บรรทัดก็สามารถนำโมเดล AI ใดๆ จากนักวิจัยทั่วโลกที่สร้างและสอนมาแล้ว (pretrained) มาใช้อย่างง่ายดาย
(สมัยก่อนหน้า การเรียกใช้งานโมเดลแต่ละชิ้น จะต้องเตรียม environment ที่แตกต่างไปตามนักวิจัยแต่ละกลุ่ม และมักมีความซับซ้อนอย่างมากในการจะเรียกใช้งานแต่ละครั้ง)
ในกลุ่มโมเดลนี้ HF มี 3 repos หลักคือ transformers, timm และ diffusers
1.1 transformers (กลุ่มโมเดลเข้าใจภาษา ทั้งจาก text และ เสียง)
1.2 timm (กลุ่มโมเดลเข้าใจรูปภาพ)
1.3 diffusers (กลุ่มโมเดลสร้าง/วาดรูปภาพ)
ทั้งสามกลุ่มนี้รวมกันแทบจะคลอบคลุมโมเดล AI ที่มีชื่อเสียงแทบทั้งหมดในโลก และเป็นที่รู้จักกันดีอยู่แล้ว
เริ่มหัดใช้งาน Text-model Transformers ดูที่นี่ :
(แบบ course)
https://huggingface.co/course/chapter1/1
(แบบสารานุกรม)
https://huggingface.co/docs/transformers/index
เริ่มหัดใช้งาน timm ดูที่นี่ : https://huggingface.co/docs/timm/index
เริ่มหัดใช้งาน Diffusers ดูที่นี่ : https://huggingface.co/docs/diffusers/index
.
** 2.กลุ่ม Trainer **
2.1 Trainer
2.2 Accelerate
2.3 TRL
มีจุดหมายคือ เพื่อสอนโมเดลให้ฉลาดขึ้นจากข้อมูลสอนที่ผู้ใช้เตรียมไว้
แม้โมเดลจากนักวิจัยจะได้รับการสอนมาก่อนแล้ว แต่ก็อาจยังฉลาดมากขึ้นได้จากข้อมูลสอนเพิ่มเติมของผู้ใช้งานจริง การ "สอนเพิ่มเติม" นี้มักเรียกว่า "fine-tuning"
2.1 &2.2 Trainer และ Accelerate (Gradient-based optimization tool)
แม้ทุกโมเดลใน HF จะสามารถ train/finetune กับ standard tools เช่น Lightning ได้อย่างง่ายดาย ทีมงาน HF นั้นเลือกที่จะสร้าง “Trainer” และ ‘’Accelerate“ ขึ้นมาใช้งานเองเพื่อ optimize การสอนให้มีคุณภาพสูงสุด
Trainer เป็น high-level API ใช้ง่ายทำนองเดียวกับ Keras หรือ Lightning ส่วน Accelerate จะเหมาะสำหรับผู้ที่ชอบเขียน custom training loop เอง โดยเราสามารถใช้เทคนิคชั้นสูงอย่าง DeepSpeed-Zero-Offload ได้ด้วย Accelerate
Trainer/Accelerate สามารถทำงานบน multi-GPUs, TPUs และ mixed-precision ได้ และอีกหลายๆ ส่วนขยายของ HF เช่น Optimum’s BetterTransformers (ดู 3.2) และ PEFT (3.1) ใช้งานได้กับ Trainer/Accelerate ทันที แต่ไม่สามารถใช้กับ library มาตรฐานเช่น Lightning ได้ (ณ เวลาปัจจุบันที่เขียนบทความ 16-04-2023)
เริ่มใช้งาน Trainer และ Accelerate:
https://huggingface.co/blog/pytorch-ddp-accelerate-transformers
ใช้งาน Accelerate ชั้นสูง:
https://huggingface.co/docs/accelerate/index
.
2.3 TRL (Reinforcement-learning-based optimization tool)
หลายคนคงได้ยินมาว่าโมเดลอย่าง ChatGPT นอกจากจะถูกสอนด้วยวิธี Supervised Learning แบบมาตรฐานแล้ว ยังถูก “สอนต่อ” ด้วย Reinforcement Learning หรือ Feedback จากมนุษย์เราอีกด้วย ซึ่งทำให้คำตอบของ ChatGPT นั้นเป็นธรรมชาติ กว่า ChatBot อื่นๆ ที่ผ่านมา
TRL หรือ ”Transformers Reinforcement Learning” เป็นโมดูลที่ HF สร้างขึ้นมาเพื่อสอนโมเดล Text Transformers ใดๆ ด้วยเทคนิค Reinforcement Learning เพื่อตอบโจทย์นี้โดยเฉพาะ ด้วยโค้ดไม่กี่บรรทัด
เริ่มหัดใช้งาน TRL:
https://github.com/lvwerra/trl
.
**3. กลุ่ม ModelOptimizer **
ปรับปรุงโมเดลหรือกระบวนการสอนให้เร็วขึ้นหรือประหยัดขึ้น
3.1 PEFT
3.2 BnB
3.3 Optimum
.
3.1 PEFT คือโมเดลขนาดจิ๋ว ที่สามารถนำไปเชื่อมหรือ Plugin กับโมเดล Transformers ใดก็ได้
ในการทำ finetuning เมื่อเชื่อมต่อแล้ว เราสามารถ fix weights ของ Transformers ซึ่งมักมีขนาดใหญ่ (ไม่ต้องสอน/เปลี่ยนแปลง parameters กลุ่มนี้) และสอนเพียง parameters ของ PEFT ซึ่งมีขนาดจิ๋ว ทำให้ประหยัด memory ไปได้อย่างมหาศาล ทำให้เราสามารถสอนโมเดลใหญ่ๆ ได้ด้วย GPU ราคาถูกนั่นเอง
PEFT ถูกออกแบบให้ใช้งานง่ายเพียงไม่กีบรรทัด ดูที่ : https://huggingface.co/blog/peft
.
3.2 BnB คือโมดูลที่จะเปลี่ยน parameters ของโมเดลให้เหลือเพียง 8bits (จากเดิมที่ประหยัดที่สุดที่เป็นไปได้คือ 16bits) ซึ่งทำให้โมเดลใช้หน่วยความจำลดลง 50%
BnB แม้จะไม่ใช่ official HF module แต่ก็มีทีมงาน HF ร่วมพัฒนาอย่างใกล้ชิด ทำให้ใช้งานร่วมกับ Accelerate ได้อย่างไร้รอยต่อ
ความมหัศจรรย์ของ HF Ecosystem คือ เราสามารถเรียกใช้ทั้ง PEFT, BnB, Accelerate หรือ TRL ได้พร้อมกันเพื่อ Optimize/Train โมเดลตามที่เราต้องการ
ใช้งาน BnB พร้อม PEFT ดูที่นี่ : https://colab.research.google.com/drive/1jCkpikz0J2o20FBQmYmAGdiKmJGOMo-o?usp=sharing
ใช้ BnB, PEFT และ TRL : https://huggingface.co/blog/trl-peft
.
3.3 Optimum คือ tool ที่จะ optimize โมเดลให้เข้ากับ Hardware ใหม่ๆ ที่ออกแบบมาเพื่อ Deep Learning เช่น Graphcore IPU และ Habana Gaudi
หรือ optimize โมเดลเพื่อ Deployment เช่น ONNX-TFLite และ BetterTransformers ที่เป็น official implementation ใหม่ของ Transformers บน pytorch ตั้งแต่เวอร์ชัน1.12 ที่ทำให้ประสิทธิภาพการ inference เร็วขึ้นราว 50% (อ้างอิงจาก https://pytorch.org/blog/a-better-transformer-for-fast-transformer-encoder-inference/ )
ศึกษาใช้งาน Optimum : https://huggingface.co/docs/optimum/index
.
** 4.กลุ่ม tools**
มีจุดประสงค์คือ “รวบรวม basic tools” ที่มีหลากหลายมารวมไว้ที่เดียว และเรียกใช้ง่ายด้วยโค้ดไม่กี่บรรทัดตามสไตล์ Huggingface
4.1 Datasets
4.2 Evaluate
4.3 Tokenizers
Datasets มีจุดประสงค์ที่จะรวบรวม datasets ที่เป็นมาตรฐานและหลากหลายมาไว้ที่เดียว ทำให้นักวิจัยและนักพัฒนาสามารถเข้าถึงชุดข้อมูลใดๆ ก็ได้ที่ต้องการอย่างง่ายดาย (คล้าย Kaggle ซึ่งเป็นแหล่งรวม Datasets ชั้นนำอีกแหล่ง)
ในสมัยก่อน การจะโหลด Dataset แต่ละชุดมาใช้งาน อาจต้องเขียน email ไปขอเจ้าของข้อมูล และต้องทำกระบวนการ pre-processing มากมายก่อนที่จะใช้งานได้จริง
เมื่อเราเรียกขอ datasets ต่างๆ ผ่าน Huggingface datasets เราก็ลัดขั้นตอนเหล่านี้และได้ข้อมูลมาใช้งานทันที ด้วยคำสั่งเดียวกันสำหรับทุก datasets
นอกจากนี้ HF ได้กำหนด format มาตรฐานสำหรับ datasets ประเภทต่างๆ คือ ข้อความ text, เสียง, รูปภาพ และข้อมูลตารางไว้ ทำให้ datasets ทั้งหมดอยู่ในมาตรฐานเดียวกัน แทบไม่ต้อง preprocess เพิ่มเติม
เริ่มใช้งาน datasets บน HF ที่ : https://huggingface.co/docs/datasets/index
.
Evaluate รวบรวม "metrics" หรือ "การวัดผล" (ความถูกต้อง ความแม่นยำ ความฉลาด ฯลฯ) ไว้ในที่เดียว
Metric บางตัวเป็นโมเดลเสียเอง (เช่น BertScore) และเดิมเราก็จำเป็นต้อง set environment ให้เหมาะสมก่อนจะใช้ metric ได้ .. "Evaluate" ทำให้ความจำเป็นนั้นหมดไป
เช่นเดียวกับ Datasets, Evaluate เปลี่ยนทุก metric ให้อยู่ในมาตรฐานเดียวกัน มีวิธีการเรียกใช้เหมือนกัน และง่ายภายในโค้ดไม่กี่บรรทัด
เริ่มใช้งาน Evaluate : https://huggingface.co/docs/evaluate/index
.
Tokenizers คือ library ที่รวบรวม "โปรแกรมการเรียนรู้การตัดคำ" ซึ่งเป็น preprocessing step ที่ขาดไม่ได้ในการใช้งาน Transformers
Library นี้ได้รวม Tokenizers ที่เป็นมาตรฐานในวงการทุกแบบไว้เช่น และยังได้ implement ด้วย Rust (มี Python API ครอบ) ทำให้ทั้งใช้งานง่ายและทำงานเร็ว
เริ่มใช้งาน Tokenizers: https://huggingface.co/docs/tokenizers/index
.
** 5. กลุ่ม Education & Research **
5.1 HF Blog & Courses (NLP, Reinforcement learning)
5.2 BigScience-Petals Community
ถ้าคุณต้องการติดตาม update technology ใหม่ล่าสุดในวงการ AI พร้อมทั้งวิธีการใช้งานอย่างง่าย HF Blog คือหนึ่งใน blog ชั้นนำที่คุณควรตาม ดูที่ : https://huggingface.co/blog
ส่วน HF courses ปัจจุบันมี 2 courses คือ NLP/Reinforcement Learning โดยเป็น course เน้นสอนภาคปฏิบัติให้ใช้งาน แก้ปัญหาได้จริง รวมทั้งสอดแทรกทฤษฎีความรู้พอสมควร เรียนได้ตั้งแต่ความรู้เป็น 0:
NLP : https://huggingface.co/course/
RL : https://huggingface.co/deep-rl-course/
.
BigScience คือ กลุ่มวิจัยอิสระที่ HF เป็นผู้ริเริ่มขึ้น และร่วมมือกับนักวิจัยชั้นนำจากมหาวิทยาลัยและบริษัทเอกชน เพื่อทำ projects ต่างๆ ร่วมกัน
ตัวอย่างผลงานที่ได้เผยแพร่สู่สาธารณะคือ Bloom ซึ่งเป็นโมเดล LLMs ที่ประสิทธิภาพน้องๆ GPT3 และได้ opensource สมบูรณ์แบบ
https://bigscience.huggingface.co/
.
**6. กลุ่ม Production **
6.1 Hub
6.2 Space & Gradio
6.3 Inference Endpoints
6.4 HF x SageMaker
6.5 skops
Hub คือ storage ที่อนุญาตให้เราสามารถเก็บโมเดลทีฝึกสอนมาแล้วได้ฟรี นอกจากนี้เรายังสามารถเข้าถึงโมเดลที่คนอื่นสอนมาแล้วได้ง่ายๆ อีกด้วย
เราสามารถเข้าถึง Hub ผ่าน HF website หรือจะผ่าน Python API library ก็ได้ ดูได้ที่ : https://huggingface.co/docs/huggingface_hub/index
.
Space แท้จริงแล้วเป็นส่วนหนึ่งของ Hub โดยเป็นพื้นที่ที่ให้เรา “โชว์” ตัวอย่างของการใช้งานจริงของโมเดลเราแบบ web application ได้ฟรี
(ไม่ต้องเสียค่าใช้จ่ายทั้ง web server และ/หรือ compute server แต่สามารถจ่ายเงินเพิ่มเพื่อใช้ GPU ในการคำนวนได้)
เราสามารถนำโมเดลใน Hub มาทำ demo บน web applications ได้ง่ายๆ
โดยในการสร้าง web app demo นั้นเราสามารถสร้างโดยใช้ Python ได้เลยโดยไม่ต้องใช้ภาษาอื่น
HF มี library เพื่อสร้าง webapp โดยเฉพาะชื่อว่า Gradio
(ทว่า HF spaces ก็สนับสนุน streamlit ซึ่งเป็นคู่แข่งของ Gradio ให้ใช้งานได้บน space 100% เช่นเดียวกัน)
Space : https://huggingface.co/docs/hub/spaces
Gradio : https://www.gradio.app/docs/
.
Space และ Gradio ให้เราสร้าง web demo ง่ายๆ ทว่าถ้าเราต้องการใช้งาน (deploy) จริงสำหรับธุรกิจ เราย่อมต้องการ server ที่มีความ secure สูงสุด และสามารถ scale ได้ถ้าปริมาณลูกค้าหรือการใช้งานของเราเพิ่มขึ้น
Inference Endpoint เข้ามาตอบโจทย์นี้ โดย Huggingface จะบริหารจัดการฝั่ง Server เราสามารถระบุ model ของเราใดๆ บน hub และ HF จะจัดการเรื่อง security และ auto scaling ให้ตามปริมาณการใช้งาน
บริการ Inference Endpoint นั้นสามารถใช้ได้ทั้งโมเดล transformers และ diffusers
ดูการใช้งาน inference endpoint (มีค่าใช้จ่าย) : https://huggingface.co/docs/inference-endpoints/
.
HF x SageMaker
HF ได้ร่วมมือกับ AWS เป็น strategic partner และ HF จึงได้สร้าง “Deep Learning Container” เพื่อให้ user สามารถทั้ง พัฒนา และ deploy โมเดลของ HF ได้อย่างง่ายดายบน Amazon Sagemaker
ดูรายละเอียดเพิ่มเติมได้ที่
https://huggingface.co/docs/sagemaker/index
.
Skops เป็น library ที่ทำให้เราสามารถ upload โมเดลของ scikit-learn ขึ้นไปยัง HF Hub ได้ ทำให้ Hub นั้นสามารถมีทั้งโมเดลของ transformers, diffusers และ scikit-learn
ใช้ skops:
https://huggingface.co/blog/skops