มีอะไรในงาน Tensorflow Dev Summit 2019

Chulayuth Asawaroengchai
10 min readMar 9, 2019

--

เนื่องจากผมได้มีโอกาสไปเข้าร่วมงาน Tensorflow Dev Summit 2019 ที่จัดขึ้นโดย Google จึงอยากนำ Highlight ต่างๆในงานมาบอกต่อครับ

งานจัดขึ้นในวันที่ 6–7 มีนาคม 2019 ที่ผ่านมา สถานที่จัดงานคือ Google Event Center (อาคาร MP7) ที่ตั้งอยู่ใน Googleplex Head Quarter เมือง Sunnyvale ซึ่งอยู่ในพื้นที่ Silicon Valley ในรัฐ California นั่นเอง

ตัวงานแบ่งเป็น 2 วัน วันแรกจะเป็น General Speaking และ Demo ของต่างๆ และวันที่ 2 จะเป็น In-Depth และ Workshop

ที่ผมสนใจงานนี้เพราะคิดว่าเค้าจะเปิดตัว Tensorflow version 2.0 แน่ๆ ซึ่งจะเป็นจุดเปลี่ยนสำคัญของ Library หลักที่ใช้ในงาน AI / Machine Learning ตัวนี้เลยทีเดียว

ส่วนทำไมถึงจะเป็นจุดเปลี่ยนสำคัญนั้น ต้องขอท้าวความสิ่งที่เกิดขึ้นในปีก่อนๆหน้าก่อนครับ

เมื่อสัก 2–3 ปีก่อนหน้านี้ Tensorflow ถือได้ว่าเป็น Library มาตรฐานที่คนนิยมกันมากในงาน Machine Learning เพราะว่ามันทำงานได้ครบถ้วนครอบคลุมตั้งแต่การสร้าง Model การ Train และการ Deploy Model เพื่อใช้งานใน Production Environment จริง

เมื่อเปรียบเทียบกับ Library อื่นๆในเวลานั้น ซึ่งบางตัวอาจจะช่วยให้สร้าง Model และทำการทดลองได้ง่าย เหมาะกับนักวิจัย หรือผู้เริ่มต้น แต่ไม่เอื้ออำนวยให้ไปใช้งานในระดับ Scale ใหญ่ที่รับโหลดเยอะ ก็จะมีปัญหาว่า คิดค้น Model ที่ดีออกมาได้ แต่เวลาจะนำไปใช้จริงก็อาจต้อง Reimplement ใหม่เยอะ บางทีต้องเปลี่ยน Framework เปลี่ยนภาษา เพิ่มโอกาสเกิด Bug และทำให้ Timeline ยืดยาวออกไป…

ซึ่งด้วยความที่ Tensorflow มันครอบคลุมได้หมดแบบนีั้น ทำให้บรรดานักวิจัย นักพัฒนา Software และผู้จัดการด้าน Infrastructure สามารถใช้ภาษาเดียว Framework เดียวคุยกันได้ และลดงานที่ซ้ำซ้อนออกไป ดังนั้นมันจึงได้ถูกนำไปใช้อย่างแพร่หลายมาก

แต่ด้วยความที่มันครอบคลุมเยอะสิ่งแบบนี้ ทำให้ Tensorflow นั้นมีความซับซ้อนอย่างมาก และการที่จะเริ่มทำอะไรสักอยากกับมัน บางทีต้องไปอ่านทำความเข้าใจกับสิ่งที่จริงๆยังไม่ได้อยู่ใน Scope ของสิ่งที่เรากำลังจะทำตอนนั้นๆ จึงทำให้ Tensorflow ค่อนข้างมี Learning Curve สูงเหมือนกัน

และความที่มันกว้าง มันก็ Require document เยอะไปด้วย และ Document นั้นก็เป็นส่วนหนึ่งที่คนบ่นถึงเยอะมากใน Tensorflow (ใครเคยอ่าน Getting Start ของ Tensorflow จะรู้ดี)

ดังนั้นมันจึงมีช่องให้เกิด Library ใหม่ๆมาตีตื้นได้ ซึ่งตัวสำคัญที่ตีตื้นขึ้นมาในปี 2018 ก็คือ PyTorch

ด้วยความที่ PyTorch มันมี Paradigm ในการเขียนเหมือนการเขียนโปรแกรมปกติ ประกอบกับความ Simple อย่างมาก แถม Document ก็ยังทำออกมาได้ดี ชัดเจน และมีความ Increment เป็นอย่างดี ทำให้คนเข้าถึงได้ง่ายกว่า Tensorflow ในตอนนั้น ทำให้บรรดานักวิจัยเริ่มหันมาใช้ PyTorch กันเยอะขึ้นเรื่อยๆ และ Online Course ด้าน Deep Learning เจ้าดังอย่าง Fast.ai ก็หันมาพัฒนา Library เพิ่มเติมบน PyTorch อีกที และนำไปใช้ประกอบการสอนใน Course ของตัวเอง ทำให้นอกจากนักวิจัยเดิมเริ่มเปลี่ยนหันไปใช้ PyTorch แล้ว บรรดาคนหน้าใหม่ที่เข้ามาในวงการผ่านทาง Fast.ai นั้นก็ใช้ PyTorch เป็นหลักโดยปริยายไปด้วย ทำให้ในปี 2017-2018 สัดส่วนการใช้งาน PyTorch พุ่งขึ้นมาสูงขึ้น เฉียดใกล้เจ้าของแช้มป์อย่าง Tensorflow ดังที่เห็นได้จากกราฟด้านล่างนี้

ปล. โต้โผ Tensorflow คือ Google ส่วนโต้โผ PyTorch ก็คือ Facebook นั่นเอง

งานนี้ Google ก็คงยอมไม่ได้ เนื่องจากการที่ Opensource Library จะประสบความสำเร็จแค่ไหนนั้น จำนวนคนใน Community มีส่วนสำคัญเป็นอย่างมาก ถ้า Community ใหญ Contributor เยอะ ตัว Library ก็จะถูกปรับปรุงพัฒนาขึ้นอย่างรวดเร็วไปด้วย การที่ PyTorch มีขนาด Community ที่ใหญ่ขึ้นมากแบบนี้ย่อมไม่เป็นการดีสำหรับ Tensorflow ดังนั้น Google เลยมีการประกาศว่า Tensorflow จะมีการ Update Major version จาก 1.XX (ปัจจุบันเป็น 1.13) ไปเป็น 2.0 นั่นเอง ซึ่ง Change นี้จะยิ่งใหญ่มาก เรียกว่ารื้อกันเลยทีเดียว และมันก็ได้ถูกประกาศตัวออกมาในงาน Tensorflow Dev Summit 2019 ครั้งนี้นี่เอง

เมื่อมีการประกาศงาน Summit นี้ออกมา ผมจึงได้สมัครเข้าร่วมทางออนไลน์ไปใน website ของ Tensorflow ซึ่งงานนี้ ผู้สมัครต้องกรอกว่าตัวเองเกี่ยวข้อง ทำงาน หรือวิจัยเกี่ยวกับด้าน Machine Learning หรือ AI ในรูปแบบไหน มีประสบการณ์อะไรบ้าง แล้วทาง Google ก็จะเลือกว่าจะ Accept ให้เราเข้าร่วมงานหรือไม่ ก่อนช่วงจัดงานประมาณ 1 เดือน ตัวงานไม่มีค่าใช้จ่ายในการเข้าร่วม แต่ต้องออกเงินเดินทางไปเองนะ

เมื่อได้รับการตอบรับ ผมจึงวางแผนเดินทางไป โดยผมบินไปจากกรุงเทพถึงสนามบิน SFO ในช่วงต้นเดือนมีนาคมที่ผ่านมา และพักอยู่แถวๆสนามบิน และวันที่ 6 มีนาคมก็ขับรถไปยัง Sunnyvalue ซึ่งช่วงเช้ารถจะติดมาก ทำให้ถึง Googleplex เรียกได้ว่าเฉียดฉิวเวลาเริ่มงานตอน 9:30AM เลยทีเดียว

งานจัดที่ตึกนี้

มาถึงก็เห็นคนต่อแถวเพื่อ Register เข้างานกันเต็มไปหมด

การ Register นั้นเค้าจะขอดู Passport หรือเอกสารราชการที่ยืนยันตัวตนว่าตรงกับที่สมัครมาหรือไม่

ณ.จุดนี้มีความวุ่นวายเกิดขึ้นเล็กน้อยครับ คือพอช่วงเริ่มงาน 9:30AM แถว Register ยังไม่หมดดี ทาง Google ก็บอกว่าเราสามารถดู Live สดงานไปพลางๆก่อนได้ผ่าน Podcast ผลก็คือคนที่ยืนรอ Register อยู่นั้นก็เปิด Podcast ขึ้นมาดูโดยพร้อมเพรียงผ่าน WIFI ที่ Google มีให้ใช้ ประเด็นคือระบบ Register นี่ก็ทำงานผ่าน WIFI และ Printer ที่ใช้พิมพ์ Badge เข้างานนี้ก็ทำงานผ่าน WIFI อันเดียวกัน ผลก็คือ WIFI ล่มทันที แล้วก็เกิดอาการ Resource Thrashing คือการ Register ดำเนินต่อไปได้อย่างช้าๆ (เพราะต้องกดหลายรอบ สั่งพิมพ์หลายรอบกว่าจะได้) แล้วก็ทำให้คนมาต่อแถวรอ Register เยอะมากขึ้นเรื่อยๆพร้อมกับเปิด Podcast เพิ่มขึ้นเรื่อยๆไปด้วย ตอนจบเป็นอย่างไรผมไม่ทราบได้ เพราะผมหลุดออกมาได้ก่อนที่สถานการณ์ Thrashing จะเลวร้ายลงมากๆได้พอดี เข้ามานั่งในงานช้าไปราวๆ 15 นาทีได้ แต่โชคดีที่ไม่ได้พลาดส่วนสำคัญไป

ทันเปิดตัวพอดีนะ

Highlight ของ Tensorflow 2.0

อันแรกคาดว่าทุกคนคงเดาออกอยู่แล้ว เนื่องจากเป็นสิ่งที่คนชมกันนักหนาใน PyTorch และก็คงคิดได้ว่า Tensorflow ต้องทำบ้างแน่นอน นั่นคือการเปลี่ยน Paradigm ในการรันโมเดลจาก Graph Execution เป็น Eager Execution นั่นเอง (Graph Execution ก็ยังอยู่ให้ใช้งานได้นะ แต่ตัว Library จะทำงานแบบ Eager Execution เป็น Default Setting แทน) ซึ่งจุดนี้จะเป็นจุดเปลี่ยนที่สำคัญมาก

สำหรับใครที่อยากใช้ Feature ของ Tensorflow 1.XX ก็ยังสามารถเรียกใช้ได้จาก Package tf.compat.v1 แต่ประเด็นคือเค้าไม่ได้ port tf.contrib มาให้ด้วยนะ ใครที่ใช้ tf.contrib ต้องหาทางเปลี่ยนมาใช้ keras layer API แทน หรือไม่ก็หาดูว่าใน tf.addon มีสิ่งที่ทำงานได้เหมือนกันให้ใช้ไม้ ถ้าไม่มีก็ Good Luck ครับ

สรุปการเขียน Model ด้วย Tensorflow 2.0 นั้นมี Best Practice ที่เปลี่ยนไปจาก version ก่อนหน้ามากเลยทีเดียวคือ

  • ใช้ Eager Execution เป็นหลักไว้ก่อนเป็นดี
  • ใช้ tf.keras สำหรับการสร้าง Neural Network Layer เป็นหลัก
  • ถ้าจะสร้าง Custom Logic ก็ใช้วิธี Subclass Keras Layer นี่แหล่ะ
  • เนื่องจากเป็น Eager Execution ดังนั้นบอกลา tf.PlaceHolder ได้เลย ตอนนี้ประกาศเป็น tf.Variable แล้ว assign ค่าให้มันได้ทันที มีผลทันทีด้วย
  • บอกลา tf.Session.run ไปได้เลย เพราะมันไม่จำเป็นต้องใช้แล้ว
  • Control Flow ต่างๆก็มาใช้ Python control flow ปกติได้เลย แต่ถ้าอยากให้มันทำงานเร็วเหมือนก่อน ก็ให้สร้างเป็น function แล้ว decorate ว่าเป็น @tf.function ก็จะทำให้ Control Flow ต่างๆใน Function นั้นๆถูก Compile เป็น Graph ก่อนแล้วค่อยเอาไปใช้รัน (เค้าเรียก Auto-Graph) ซึ่งจะทำให้ได้ความเร็วของ Graph Execution กลับมา โดยที่ @tf.function จะโดย Compile แบบ Polymorphic ได้ คือถ้ามีการเรียกด้วย Parameter หลายแบบ Graph ก็จะถูกสร้างขึ้นมาหลายแบบตามชนิดของ Parameter ที่เราใส่ไปด้วย คล้ายๆกับ Template ในภาษา C
  • ไม่ต้องใช้ Variable Scope แล้ว เพราะเรา Manage Scope ของตัวแปรต่างๆด้วย Scope ของ Python ได้เลย ดังนั้นจัด OOP ได้เต็มที่.. จริงๆ Variable Scope เป็น Pattern ที่ไม่ดีนะ เพราะมัน Exploit Global Scope รุนแรงมาก
  • Naming Scope ยังมีอยู่ แต่ก็มีไว้เพื่อเติม Prefix ให้กับชื่อตัวแปรต่างๆเวลา Serialize ลงไฟล์ ไม่ได้ทำงานเกี่ยวข้องอะไรกับ Scope จริงๆ
  • ไม่มี Global Collection อีกต่อไป ดังนั้นคนที่เคยชินกับการคำนวน Regularization Loss ใส่ Collection ใน Global Scope ต้องเปลี่ยนวิธีเขียน กล่าวคือคำนวน Regularization Loss แล้วจัดการบวกเข้ากับ Loss ของ Model เองตรงๆตามวิธีเขียน Python ปกติได้เลย

สำหรับคนที่มี Code ที่เขียนไว้แล้วแบบ Tensorflow 1.XX ทาง Google ก็ใจดีทำ Script สำหรับ Convert Code จาก 1.XX ไปเป็น 2.0 ให้ โดยมันจะเปลี่ยน Function Signature ชื่อและตำแหน่ง Parameter ให้เป็นแบบใหม่ ถ้าอันไหนหาของใหม่ใส่ให้ไม่ได้ก็จะใช้ tf.compat.v1 API ให้แทน และถ้าไม่ได้จริงๆก็จะมี Error Report ออกมาให้

สำหรับ Keras ใน Tesorflow 2.0 นั้นก็มีการ Upgrade ที่ซ่อนอยู่เหมือนกัน กล่าวคือมันรันแบบ Eager Execution ได้ไปด้วย และอีกอันที่สำคัญคือ พวก Scalable Training feature ต่างๆที่แต่ก่อนมันอยู่นอกเหนือจาก Keras (เช่น Estimator API) นั้นถูกเอาเข้ามาซ่อนให้ทำงานอยู่ภายใต้ interface ของ Keras API ไปด้วยเลย นั่นหมายความว่า ไม่ว่าจะทำ Multi-GPU Training หรือ Distributed Training เราสามารถทำสิ่งเหล่านั้นได้ผ่านทางการเรียก model.fit ได้เหมือน Keras ปกติ ซึ่งผมคิดว่าเป็นสิ่งที่ดีมาก หากใครเคยทำ Distributed Training ด้วย Estimator API จะเข้าใจว่ามันมี Learning Curve สูงอยู่ และ Keras ก็ถูกทำให้รับ Data ได้ทั้งจาก numpy, Python Generator และ tf.data Feature Column ด้วย โดยรวมคือเราใช้แค่ Keras interface ก็ครอบคลุมงานที่ Estimator API เคยทำได้ใน Tensorflow 1.XX นั่นเอง

นอกจากการใช้หลาย GPU ช่วยกัน Train แบบ Data Parallel (model copy ตัวเองไปอยู่หลาย GPU แล้วแบ่ง batch ข้อมูลเป็นส่วนๆส่งไป Train ในแต่ละ GPU แล้วเอาผล, Loss มาคิดรวมกัน) แล้ว ตัวใหม่นี้ก็ยัง Support การ Train แบบ Variable Partitioning ด้วย กล่าวคือ Model instance นึงไปอยู่ในหลายๆ GPU โดยแต่ละ GPU จะทำงานให้แค่ส่วนหนึ่งของ Model ทำให้ Train model ขนาดใหญ่ๆเกิน GPU VRAM แต่ละตัวได้

สำหรับ Tensorboard นั้นก็ได้มีการเพิ่ม Tab Profiling ขึ้นมาเพื่อให้เราใช้ตรวจดูได้ว่าส่วนไหนของ Model ใช้เวลาไปเท่าไหร่ในการรัน มีประโยชน์ในการ Debug Performance ของ Model ที่เราสร้าง

Update ใน Layer อื่นๆก็มีเช่นการ Simplify RNN layer ให้เหลือ Class เดียว เช่น LSTM เมื่อก่อนแบบใช้ CPU กับ GPU จะใช้คนละตัว แต่ตอนนี้รวบเหลืออันเดียวทำให้ไม่สับสน

ในส่วนถัดไปเป็นการบรรยาย Update ของส่วนที่เกี่ยวกับ Mobile หรือ On Device ต่างๆ จริงๆส่วนนี้ผมแอบคิดว่าเป็น Highlight ใหญ่ที่สำคัญไม่แพ้การประกาศ Tensorflow 2.0 เลยนะ เพราะดูเหมือนว่าการนำ AI ไปใช้ใน Mobile, Embedded Device และอุปกรณ์ที่มีพลังงานการประมวลผลต่ำได้นี่ จะมีประโยชน์มหาศาล และ Google เองก็ดูจะเข้าใจในจุดนี้ดี จึงมีผลงานในส่วนนี้ที่น่าสนใจออกมามากมาย กล่าวโดยสังเขปดังนี้

Tensorflow Lite ได้มีการเพิ่ม GPU Delegate เข้ามาเพื่อช่วยให้รัน Model โดยใช้ GPU บน Mobile Device ได้ และมีการ integrate กับ Android Neural Network API เพื่อเพิ่มประสิทธิภาพในการรัน Model บน Android Device

ในส่วนของการทำ Graph Base Optimization ได้มีการเพิ่ม Keras Layer เพื่อทำ Connection Pruning กล่าวคือพอ Train ไป เจ้า Layer นี้ก็จะตัด Connection ของ Dense Layer เส้นที่แทบไม่ได้ใช้งานเลยออกไป ทำให้ Model ขนาดเล็กลง

ในส่วนการลดขนาด Model โดยการทำ Quantization เพื่อใช้จำนวน bit เพื่อเก็บค่า Weight ต่างๆใน Model ให้น้อยที่สุดที่เป็นไปได้นั้น สามารถทำได้ทั้งแบบตอน Train Model ด้วย Keras Layer หรือจะทำแบบ Post Training ก็ได้กรณีที่เรามี Model ที่ Train เสร็จแล้ว อย่างไรก็ตาม การทำ Quantization แบบ Post Training นั้น เราจำเป็นต้องส่งตัวอย่างข้อมูลเข้าไป (เรียกว่า Calibration Data) เพื่อทดสอบดูลักษณะของ Activation ที่เกิดขึ้นในแต่ละเส้น ถึงจะรู้ได้ว่าควรจะใช้จำนวน bit เท่าไหร่เก็บค่าดี

ถัดไปก็เป็นการโชว์งาน Tensorflow Lite ที่รันบน Micro Controller Unit (MCU) ที่มี memory/processing power ต่ำมากๆ โดยทาง Google ร่วมกับ Sparkfun ได้ทำบอร์ด MCU ขึ้นมาโดยใช้ CPU ARM Cortex M4 และมี RAM 100KB และ Flash ROM ขนาด 80KB และแสดงให้เห็นว่า Tensorflow Lite สามารถรัน Model Detect เสียงพูดของคำที่กำหนดไว้ได้บน MCU Board ดังกล่าว ตัว Model หลัง Optimize แล้วมีขนาดแค่ 20KB เท่านั้นเอง ตัว Board มีขายใน website Sparkfun ในราคาแค่ $15

150K RAM แต่ก็ Run Voice Recognition ได้นะ

ถัดมาเป็น Embedded Device ที่สามารถ Train Model ได้ด้วย (เค้าเรียก Teachable Device) ซึ่งการ Train Model ได้นี่จะต้องการพลังงานการประมวลผลมากกว่าการ Run Model (เพราะโดยปกติเราต้อง Train ข้อมูลเป็น batch ที่ใหญ่พอที่จะไม่เกิดปัญหากับ Stability ของการลู่เข้า) ซึ่ง Google ก็ประกาศเปิดตัว Edge TPU Device ภายใต้ Brand Coral โดยวางขายใน 2 รูปแบบคือ

  • Coral Accelerator เป็น Edge TPU มาในรูปแบบ USB Interface ให้เราต่อกับ Embedded Device หรือ Computer ที่ใช้ OS เป็น Linux แล้วเราจะสามารถส่ง Tensorflow Lite model ไปรันบนมันได้ ตัวนี้ออกมาชนกับ Intel Neural Compute Stick ที่เป็น VPU (Visual Processing Unit) แบบ USB Interface เหมือนกัน ผมคิดว่า Coral มีข้อได้เปรียบตรงที่เราสามารถรัน model Tensorflow Lite ได้ตรงๆ ในขณะที่ ของ Intel มีนจะรันได้ด้วย OpenVino framework ทำให้เราต้องแปลง model ให้เป็น OpenVino format ก่อนถึงจะส่งไปรันใน Neural Compute Stick ได้ (ไม่งั้นก็ต้องเขียน model ใหม่เป็นภาษา C ไปเลย)
  • Coral Development Board เป็น TPU + Computer Board + Linux เอามาพัฒนาได้เลย จริงๆมันคล้ายๆ Coral Accelerator + Raspberry Pi + Raspbian น่ะแหล่ะ Spec ของ Computer Board ก็คล้ายๆ Raspberry Pi 3 Model B แถมยังมีขายอุปกรณ์เสริมเป็นกล้องคล้ายๆ Pi Camera ซะด้วย
เปิดตัว Coral Development Board

ใครสนใจก็สั่งซื้อกันได้ในหน้า website Coral นะครับ

ข้อสังเกตคือการ Train Model บน Embedded Device มักจะไม่ได้ Train กันแบบเต็มขั้นตั้งแต่ต้น ส่วนใหญ่จะเป็นการนำ Pretain Model มา Finetune มากกว่า อย่าง ImageNet นี่ก็อาจจะเป็นแค่ Last Layer Training เท่านั้นเอง

ในส่วนของ Dataset นั้น ทาง Google ก็ได้ทำ package tf.data ใหม่โดยเราสามารถเรียกใช้ Standard Data Set ต่างๆโดยไม่ต้องไป Download มาเองมาทำการ Preprocess เอง แค่เรียก Fuction ก็ได้ Data Generator ที่เอามาใส่เข้า Training Function Pipeline ได้เลย สำหรับ Data Set ใหม่ๆนั้น เราก็สามารถ Extend tf.data เข้าไปได้โดยผ่าน Interface DataBuilder เพื่อใช้ Training Pipeline ให้เหมือนกันได้ด้วย

จากนั้นก็เป็นการบรรยายเกี่ยวกับ Swift for Tensorflow โดยใครที่เคยลองใช้ภาษา Swift จะรู้ว่ามัน Powerful กว่า Python ในเรื่องความเสถียรและความเร็ว โดย Swift นั้นจะทำงานได้เร็วใกล้เคียงภาษา C และมี Feature อย่าง Just in Time Compiling (JIT) นอกจากนั้น Swift ยังสามารถ Import Library ทั้งจาก C และ Python มาใช้ได้ด้วย Google ได้ทำการ Implement Tensorflow Library บน Swift ให้เราสามารถเรียกใช้ได้โดยไม่ต้อง Interface ผ่าน Python ซึ่งการที่เราใช้ Swift กับ Tensorflow ด้วยกันก็จะเหมาะกับงานที่ต้องการรีดพลังออกมาให้ได้มากที่สุด

Swift for Tensorflow นั้นแลดูเป็นความหวังของ Google ระดับนึงในการพยายามโค่น PyTorch ดูได้จากการที่ Fast.ai สัญญาว่าจะทำ Swift Library ให้สำหรับ Course เรียนของเค้าด้วยอีกอันนอกจาก PyTorch Library ที่ทำให้คนที่มาเรียน Fast.ai ใช้งานเป็นไปด้วยโดยปริยาย

ถัดมาเป็นการบรรยายเกี่ยวกับ Community ของ Tensorflow โดยทาง Google ได้ประกาศว่าจะแผ่ขยาย Scope ของ Community ให้กว้างและครอบคลุมหลาย Area ขึ้นไปอีก ทำให้ผู้คนสามารถ Contribute ให้กับ Tensorflow ได้มากขึ้นจากการ Contribute ด้าน Code มาเป็นการ Contribute ด้าน Document หรือแม้แต่การเป็น Tester ให้กับ Tensorflow ด้วย

นอกจากนี้ ยังมีการตั้ง Special Interest Group (SIG) ขึ้นมาเพื่อให้ผู้คนสามารถ Contribute ในลักษณะที่เป็น High Level เช่นการ Design และวาง Architect ได้ด้วย ตัวอย่างที่มีการตั้งขึ้นมาแล้วก็เช่น

  • SIG Build ดูแลเรื่อง Build System ของ Tensorflow
  • SIG IO ดูแลเรื่องการเชื่อม IO กับระบบอื่นๆเช่น ffmpeg, LMDB, AWS Kinesis เป็นต้น
  • SIG Networking ดูแลเรื่องการ Support Network Protocol ใหม่ๆ
  • SIG Rust ดูแลเรื่องการทำ Tensorflow Library ให้กับภาษา Rust
  • SIG Tensorboard ตรงตามชื่อคือดูแลเรื่องเกี่ยวกับ Tensorboard

จะเห็นได้ว่า Google นั้นเข้าใจถึงความสำคัญของ Community เป็นอย่างดีใน Ecosystem ของ Opensource Project อย่าง Tensorflow จึงได้พยายามจะขยายฐาน Community ในแนวกว้างไปด้วย

จบ Session ตอนเช้าแล้วครับ ต่อจากนี้ก็เป็นช่วงกินข้าวเที่ยงและช่วงโชว์ของ พร้อมกับให้เราได้ Discuss กับคนใน Team Tensorflow จริงๆใน Google ด้วย

อาหารเที่ยงในวันแรกค่อนข้างมีปัญหาไม่เพียงพอ ถึงขนาดที่ต้องประกาศให้คนที่ตักอาหารไปแล้วช่วยหลีกทางให้คนที่ยังไม่ได้ตักได้ตักก่อนเลยทีเดียว คิดว่าทาง Google น่าจะประเมินความสามารถในการกินของเหล่า Technical Guys ต่ำเกินไป

ของโชว์ต่างๆที่ได้ถูกเอามาโชว์ก็เช่น

TPU Version 1

TPU Version 2

TPU Version 3

ใหญ่ขึ้นเรื่อยๆเลยทีเดียว สำหรับใครที่ยังไม่รู้ TPU (Tensor Processing Unit) เป็น Hardware ที่สามารถทำ Matrix Multiplication โดยเฉพาะได้อย่างรวดเร็ว ถูกพัฒนาขึ้นมาโดย Google เพื่อมาใช้ในงาน Deep Learning โดยเฉพาะ ส่วนใหญ่จะใช้งานบน Cloud กัน มันจะมีความแตกต่างระหว่าง TPU และ GPU (Graphic Processing Unit) อยู่ที่ว่า TPU จะ Support เฉพาะสิ่งที่เกี่ยวข้องกับการทำ Deep Learning อย่างเดียว แต่ GPU จริงๆแล้วมันถูกออกแบบมาให้ทำงานด้าน 3D Rendering แต่เผอิญงาน 3D Rendering มันต้องทำพวก Matrix Multiplication ได้เหมือนกัน มันเลยถูกเอามาใช้ในงาน Deep Learning ได้ด้วย แต่ไม่ได้เฉพาะเจาะจงเท่า TPU… จริงๆแล้วนอกจาก TPU กับ GPU ทางผู้ผลิตอื่นๆก็มีการพัฒนา Co-Processing Unit เพื่อมาให้งานลักษณะนี้เหมือนกัน เช่น Intel ก็มีการนำ VPU (Visual Processing Unit) ที่ใช้ทำงานด้าน Video Processing เยอะๆในพวก Drone และยานพาหะ มาทำเป็น Neural Compute Stick เพื่อเอามาใช้ในงาน Deep Learning เช่นกัน

คนนี้บรรยายเรื่อง Project GANN Breed ซึ่งเป็นระบบเก็บข้อมูลมาช่วย Train Generative Adversarial Network ให้สามารถสร้างรูปภาพของสิ่งของต่างๆตามที่เราต้องการได้ โดยสามารถเลือกได้ว่าอยากให้สร้างรูปภาพของสิ่งของที่มี Feature แบบไหน เช่นต้องการให้มันสร้างรูปเตาผิง ที่คล้ายเตาผิงแบบนี้ หรือให้แตกต่างจากแบบนี้แต่ยังคงเป็นเตาผิง ตัว AI ก็จะสามารถ Generate ได้ตามนั้น (เรื่อง Generative Adversarial Network จริงๆเป็นหัวข้อใหญ่ที่จะยาวมากถ้าจะพูดถึงในนี้ เอาเป็นว่ามันถูกได้รับความสนใจเป็นอย่างมากในปีที่ผ่านมา มีงานวิจัยหลายชิ้นถูกตีพิมพ์ออกมาเกี่ยวกับมัน ถ้ามีโอกาสจะทำ Blog เรื่องเกี่ยวกับมันโดนเฉพาะครับ)

GANN Breeder

คนนี้เอา Coral Development Board มาทำกล้อง Detect ทิศทางการมองของคนแบบ Realtime

มาต่อที่ Session บ่าย เปิดมาเป็นการพูดถึงเรื่อง TFX (Tensorflow Extended) ซึ่งมันเป็น Platform ที่ทำให้เราทำงานด้าน Machine Learning ได้ครบ Loop ตั้งแต่การเตรียม Data, การ Validate / Transform Data การ Train Model กับทำ versioning การ Validate และ Compare Model และการ Push Model ออกสู่ระบบ Production ตัวระบบสร้างขึ้นเพิ่มมาจาก Tensorflow Library และใช้ Orchestration Engine ของ Airflow หรือ Kubeflow ได้ ตอนแรกคิดว่ามันจะคล้ายๆ Estimation API แต่จริงๆแล้วมันเหมือนจะครอบคลุม Process ที่กว้างกว่า ทาง Google ได้อธิบายไว้ว่า ภายในของ Google เองก็ใช้เจ้า TFX นี่แหล่ะเป็นตัวคุม Process การทำ Machine Learning เรียกได้ว่าใช้กันเป็น Best Practice เลยก็ว่าได้ ในวันที่ 2 ของ Summit จะมี Workshop เกี่ยวกับเรื่องนี้ ผมจึงไม่รอช้าลงชื่อสมัครเข้า Workshop เพื่อเก็บความรู้กลับมา เรื่องเกี่ยวกับ TFX เดี๋ยวจะขอเขียนเป็น Blog แยกอีกอันครับ

ในช่วงบ่ายก็มีบรรยายประเด็นอื่นอีก ซึ่งผมได้สรุปสิ่งที่น่าสนใจไว้ตามนี้ครับ

Tensorflow Serving ซึ่งเป็น Application ที่ทำหน้าที่ Expose Model ที่ Train มาจาก Tensorflow ออกมาในลักษณะ API ได้มีการ Upgrade ใน Tensorflow 2.0 เพื่อให้ทำงานได้ดีขึ้น ที่น่าสนใจคือการทำ Request Batching ซึ่งคือการรวบ Request ที่เข้ามาพร้อมๆกันให้อยู่รูปลักษณะ Batch แล้วเรียกใช้งาน Model ไปด้วยกันทีเดียว ซึ่งทำให้สามารถรับ Load เพิ่มได้เยอะกว่ากว่า Serving Request แบบทีละ Request เรียงกันไป ทาง Google ได้ Recommend ว่า Best Practice ในการใช้ TF Serving คือใช้งานผ่าน Docker Image หรือใช้ Kubernetes เพื่อทำ Orchrestration Service

Tensorflow Hub 2.0 เป็นการประกาศ Repository เก็บ Pretrained Model ตัวใหม่ แบบเดียวกับที่ใครที่เคยใช้ Slim Library ก็น่าจะรู้จัก Model Zoo กันเป็นอย่างดี โดย Tensorflow Hub 2.0 นั้นก็มี Pretrained Model ตัวที่เพิ่งถูกตีพิมพ์ใหม่ๆเช่น Elmo, BERT และตัวอื่นๆอีกมากมาย

Tensorflow Probability Library เป็นอีกอันที่ผมคิดว่าน่าสนใจมาก เพราะมันสามารถทำให้เราสามารถ Model Uncertainty เข้ามาใน Model ของ Tensorflow ได้ โดยวิธีการใช้งานก็ง่ายมาก เพราะมันเป็นเพียง Layer ที่เราใส่เข้าไปเพิ่มใน Model ซึ่ง Layer เหล่านั้นก็จะ Represent ความไม่แน่นอนในระบบ (เรียกว่า Bayesian Weight Layer) และมี Learn-able Parameter เพื่อปรับ Probability Distribution Function ของมันด้วย ซึ่งเราสามารถใส่ความไม่แน่นอนที่ว่าเข้าไปในทั้งในส่วนของ Weight ใน Model, Output หรือ Loss โดยที่มี Layer ที่ Model Probability Function ให้เลือกใช่้งานได้หลายตัวเช่น Normal Distribution หรือ Gaussian Distribution เป็นต้น (เวลา Train Model พวก Parameter ของ Distribution ก็จะถูกปรับให้ Represent Training Data มากขึ้นเรื่อยๆ เช่นกรณีของ Normal Distribution ก็จะมีการเรียนรู้ค่า Mean และ Variance ของความไม่แน่นอนนั้นๆนั่นเอง) ในส่วนของการ Train ระบบก็จะใช้วิธีการเรียนรู้ที่ถูกต้่องสำหรับแต่ละส่วนเช่นถ้าเป็นส่วนที่ไม่มีความไม่แน่นอนก็จะใช้ Gradient Descent และส่วนที่เป็น Probability ก็จะใช้ Monte Carlo Method ต่างๆ หรือ Variational Method มาใช้ในการปรับปรุง Model ใครเคยเล่นกับ Optimization Algorithm สาย Probabilistic จะรู้ว่ามันสามารถลู่เข้าได้เร็วกว่า Gradient Descent มากๆ แต่เราไม่สามารถการันตีว่ามันจะลู่เข้าได้ บางทีมันก็จะไม่ลู่เข้าเลยเหมือนกัน การนำ Probabilistic Model เข้ามารวมกับ Deep Learning จะเหมาะกับงานที่ข้อมูลมีความไม่แน่นอนในธรรมชาติจริงๆ หรืองานที่ Training Data Sample ที่เป็น Positive เกิดขึ้นได้ยากมากๆ เช่นการทำนายภัยพิบัติ การทำนายความเสี่ยงด้านเศรษฐศาสตร์ ทำนายอุบัติเหตุ และโรคระบาดเป็นต้น

เค้าเรียกการ Learn ความไม่แน่นอนใน Model ว่า “Learn unknown unknowns”

Tensorflow Agent เป็น Library สำหรับการทำ Reinforcement Learning โดยเฉพาะ เรื่อง Reinforcement Learning นี่ก็เป็นอีกหัวข้อใหญ่ที่เขียนได้อีกยาว แต่โดยสรุปคือ Reinforcement Learning นั้นจะใช้ในงานที่เราไม่สามารถสร้างหรือหา Training Data ที่ครอบคลุมทุกเหตการณ์ที่เป็นไปได้ ดังนั้นเราจึงสร้างสิ่งที่เรียกว่า Policy คือกรรมวิธีที่ระบบใช้เลือกว่าจะ Take Action อะไร ในสถานการณ์ (State) หนึ่งๆ และเราก็ Optimize Policy ที่เป็น Function ที่ Map จาก State ไปยัง Action แทนที่จะ Optimize Function ที่ Map จาก Input ไปยัง Output เหมือนการ Train Model ปกติ ซึ่งการ Optimize Policy ก็มีวิธีการหลายแบบเช่นการทำ Policy Gradient, การใช้ Q-Learning ซึ่งจะใช้ท่าไหนก็ขึ้นอยู่กับว่าเราตั้ง Assumption เกี่ยวกับ State, Action และ Reward ไว้อย่างไร (ไม่ขอพูดถึงใน Blog นี้) และปกติในการ Train Reinforcement Model นั้น เราจะต้องมี Series ของ State และ Action ตั้งแต่ต้นจนจบว่าระบบทำงานได้สำเร็จหรือไม่สำเร็จตามเป้าหมายในตอนท้าย เรียกว่า Training Episode นึกอารมณ์ว่าถ้าเรา Train ให้ AI เล่นเกมได้นั้น ในแต่ละ Training Episode โดยปกติก็คือตั้งแต่เริ่มเล่นจนถึงตอนท้ายว่าผ่านด่านหรือไม่นั่นเอง โดย State ก็คือข้อมูลบนหน้าจอในแต่ละ Frame และ Action ก็คือปุ่มที่ถูกกดลงบน Controller ซึ่ง Tensorflow Agent นั้นก็จะ Facilitate การสร้างและ Train Model ในลักษณะนี้ได้เป็นอย่างดี และ Compatible กับทั้ง Tensorflow 2.0 และ Tensorflow 1.XX ด้วย

ปิดท้ายของวันด้วย Tensorflow.js ซึ่งถูก Update ให้ทำงานได้ทั้งบน Browser แบบไม่ต้องลงโปรแกรมอะไรเพิ่มเติม และยังทำงานกับ Node.js ในฝั่ง Server ได้ด้วย โดยเราสามารถใช้งานโดย Include JAVAScript Tag ตรงๆ หรือใช้ npm ก็ได้ ซึ่งนอกจากการ Run Model แล้ว ทั้ง Browser / Node.js version ก็ Support การ Train ด้วย ซึ่งใน Browser ก็จะเร็วสู้การ Train กับ GPU ไม่ได้ แต่ถ้าเป็นใน Node.js แล้ว เราสามารถใช้ GPU Train Model ได้ด้วย หลังจาก Train Model เสร็จก็เก็บ Model ลง Local Storage ของ Browser ได้อีกด้วย ในอนาคต Google จะทำให้ Tensorflow.js ใช้งานกับ Desktop Application ที่เขียนด้วยภาษา JAVAScript อย่าง Electron ได้อีกด้วย และหากในอนาคตอันใกล้ พวกบรรดา Browser อณุญาติให้ JAVAScript Runtime สามารถเข้าถึงพลังการประมาลผลของ GPU เช่น WebML หรือ WebGPU แล้ว การใช้ Tensorflow.js ก็จะสามารถใช้งาน GPU ผ่านทาง Web Browser ได้เลยด้วย นับว่าเป็นสิ่งที่น่าจับตามองในอนาคตอันใกล้

จบงานวันแรกเพียงเท่านี้ครับ ในส่วนของงานวันที่สองซึ่งเป็น Technical ลงลึกนั้น ผมจะไม่ขอลงรายละเอียด คร่าวๆคือมีการพูดเปิดด้วย Speaker จากบริษัทต่างๆที่มีการนำ Tensorflow ไปใช้ในงาน Production Scale ใหญ่ ที่น่าสนใจก็มี

Youdao ซึ่งทำเกี่ยวกับ Translation, OCR และ E-Learning ในจีน

Alibaba ก็มาโชว์ PAI (Platform of AI) เหมือนกัน ซึ่งเค้าได้ทำการ Customize Tensorflow และเพิ่ม Feature หลายอย่างให้ดีกว่าเดิม เช่นการทำ Distributed Training

Tech Stack ของ Alibaba PAI

จากนั้นก็แยก Session กัน โดยมีให้เลือกเข้าฟัง Tensorflow on Mobile, Tensorflow at Scale และ Migrate to Tensorflow 2.0 ซึ่งผมเลือกเข้า Tensorflow 2.0 ซึ่งใน Session ก็จะพูดถึงการ Migrate code จาก Tensorflow 1.XX ไปเป็นแบบ 2.0 แบบลงลึก

ต่อมาก็พักทานข้าวเที่ยง รอบนี้เค้าไม่ให้ตักเองเหมือนเมื่อวานแล้วนะ แต่ใช้วิธีแจก Sandwich คนละห่อแทน น่าจะเพื่อแก้ไขปัญหาเมื่อวาน

จากนั้นผมก็มาเข้า Workshop TFX ที่ได้ลงชื่อไว้ ซึ่งเค้าสอนตั้งแต่การ Setup, การสร้าง Lineage Pipeline จนถึงการอ่านผลและปรับปรุง ถ้ามีโอกาส ผมจะเขียนเกี่ยวกับ TFX อย่างละเอียดอีกทีนะครับ

สุดท้ายของวันที่สอง ก็เป็นการกล่าวปิดงาน เป็นการจบ Summit อย่างเป็นทางการ

ก่อนจะออกจากงาน ทาง Google ได้แจกของมาให้ด้วย โดยมีถ้วย Mug กาแฟ Micro-Controller ของ Sparkfun ที่บรรยายในวันแรก และที่ขาดไม่ได้ก็คือ Coral Accelerator Edge TPU นั่นเอง เรียกว่ามางานนี้แค่ได้ของแจกก็คุ้มแล้วล่ะ

ของแจกสุดคุ้ม

ข้อสังเกตที่ได้มาจากการมาร่วมงาน Tensorflow Dev Summit 2019 นี้

  1. รถตอนช่วงเช้าแถวๆ Googleplex ติดมาก
  2. ไม่เจอคนไทยเลย ส่วนตัวคิดว่าน่าจะมีมา แต่แค่ไม่เจอ ที่เจอเยอะคือคนจีน พูดจีนกันเยอะอยู่ หลายสิบคนได้เลยนะ
  3. ตัวเก่งๆใน Google แต่งตัวกันสบายมากแฮะ อย่างนายคนนี้ที่ใส่เสื้อส้ม ขาสั้น คีบแตะ ขึ้นเวทีงาน Summit นี่ เป็นคนที่ตอบคำถามยากๆในส่วน Technical ได้เยอะมาก น่าจะเป็น Key คนนึงเลยทีเดียว

4. คนที่เดินเข้ามาคุยกับเรา ส่วนใหญ่สนใจคอมเรามากกว่าเรา > <… มาถึงถามว่าใช้ GPU อะไร

5. ได้คุยกับคนอื่น ได้รู้เกี่ยวกับงานที่เค้าทำก็ได้เปิดหูเปิดตาขึ้นเยอะ

6. Tensorflow 2.0 แล้ว สิ่งที่น่าจับตามองมากๆคือ AI บน Edge Computing นี่แหล่ะ

สุดท้ายก็ขอให้ Tensorflow 2.0 Release Candidate 1 คลอดได้ทัน Spring ตามแผน เพราะรู้สึกว่าน่าใช้งานมากและหลายคนก็รอมานานแล้ว

--

--

Responses (2)