วิธีรัน Jupyter Notebook, ปิด browser แล้วระบบส่ง LINE บอกพร้อมภาพ เมื่อเสร็จแล้ว ค่อยกลับมาดูผล

ปัจจุบัน งานด้าน Data Science ก็มักจะใช้ Jupyter Notebook เพราะสะดวกในการทดลอง ทดสอบ ทำทีละบรรทัด ดูผล ปรับแต่งไปได้เรื่อย ๆ แถมสามารถซื้อ Server ส่วนกลาง ลงทุน GPU แล้วใช้พร้อม ๆ กันหลาย ๆ คนทั้งทีมก็ได้ ปัญหาอยู่ตรงที่ การสร้าง Model มักจะใช้เวลานาน (มาก) แล้ว Jupyter มันเป็น Web-based จะปิด Browser ก็ได้ แต่หลายคนคงเคยเจอว่า พอกลับมาเปิด URL เดิม ก็ไม่เห็นผลที่รันแล้ว จริง ๆ แล้วคือ Jupyter Notebook นั้น ทำงานต่อไป จนเสร็จแล้วแหล่ะ แต่ เว็บ Browser น่าจะไม่สามารถต่อ Session ได้ (หวังว่าจะนึกภาพออก) ที่สำคัญ มันรันนานมาก เสร็จเมื่อไหร่ก็ไม่รู้ แล้วจะรู้ได้อย่างไรว่าเสร็จ เสร็จแล้วผลเป็นอย่างไร ในบทความนี้ จะนำเสนอวิธีการที่ทำให้ สั่งรันงานที่ใช้เวลานาน (ขอยกตัวอย่าง 100 วินาที) แล้วปิด Browser ไปทำอย่างอื่นต่อได้เลย เมื่อระบบทำงานเสร็จ จะแจ้ง LINE Notify พร้อมแนบภาพ Graph ผลลัพธ์ ส่งมาด้วย พอกลับมาเปิด Browser กลับมาใน Jupyter Notebook เดิม สามารถดูผลการรันอื่น ๆ ได้อีกครั้งเหมือนกับไม่ได้ปิด Browser เริ่มต้นจาก Import Function ในการส่ง LINE Notify เป็นส่วนของ LINE TOKEN และ function “jobdone” ไว้ส่ง LINE Notify สามารถกำหนดข้อความ และกำหนดภาพที่จะแนบได้ Function สำหรับ Plot รับข้อมูล และ สร้างภาพเพื่อประกอบการส่ง Line ส่วนที่ใช้เวลานาน ตรงนี้ต้องอธิบายเพิ่ม ใน Jupyter จะมีสิ่งที่เรียกว่า “magic cell” ในที่นี้คือ โดยที่ %%capture คือคำสั่งที่จะเก็บผลลัพธ์ทุกอย่าง ที่ส่งออกจาก stdout, stderr รวมถึงภาพด้วย ในคำสั่งข้างต้น จะส่งออกไปยัง capture_output ซึ่งจะนำไปใช้ในภายหลัง ต่อมา จะจำลองการทำงานที่ยาวนาน คือ random ค่าระหว่าง 1-100 เอาไปใส่ใน array “data” จากนั้น ก็ sleep 1 วินาที รวมแล้ว ขั้นตอนนี้จะทำงาน 100 วินาที หรือ 1 นาที 40 วินาที (ในการทำงานจริง ยาวนานกว่านั้นมาก ๆ) เมื่อเสร็จแล้ว plot_something จะเอาข้อมูล data ไป plot แล้วแสดงผล และ save เป็นไฟล์ตามที่กำหนด คือ result.png คำสั่งต่อมา เป็นการแสดง วันเวลาปัจจุบัน โดยแสดงเป็น Timezone ของไทย สุดท้าย function jobdone กำหนดข้อความ และภาพที่จะส่ง Let’s go! รอไป 1 นาที 40 วินาที ก็จะได้ LINE Notify (อ่านขั้นตอนการได้มาซึ่ง LINE Token ได้จาก วิธีแจ้งเตือนจาก Google Forms เข้า LINE ) กลับมาใน

Read More »

วิธี Word Wrap ใน Jupyter Notebook / Jupiter Lab

มีคำถามมา หาคำตอบเจอ คิดว่าเป็นประโยชน์​เลยบันทึกไว้ ปัญหาของคนใช้ Jupyter Notebook / Jupyter Lab คือ ถ้ามีโค๊ดยาว ๆ จะไม่ขึ้นบันทัดใหม่ให้ จริง ๆ ต้องบอกว่า ไม่ Word Wrap ตามภาพที่ 1 ไปค้นหามา พบข้อมูลจาก Alex Ioannides ตอบที่ https://stackoverflow.com/questions/48202340/enable-word-wrap-in-jupyterlab-code-editor เค้าแนะนำให้เอาแก้ไขโดยใส่สิ่งนี้ใน Settings แต่มันอยู่ตรงไหนหล่ะ มันอยู่ตรงนี้นะ Settings > Advanced Settings Editor แล้วก็คลิกที่ Notebook จากนั้นเอาโค๊ดข้างต้นไปแปะที่ User Preferences แล้วกดปุ่ม Save ด้านขวามือบน (รูปแผ่น Disk) ผล หวังว่าจะเป็นประโยชน์นะครับ

Read More »