顯示具有 DevOps 標籤的文章。 顯示所有文章
顯示具有 DevOps 標籤的文章。 顯示所有文章

2021年2月18日 星期四

學習筆記|Machine learning DevOps的五個關鍵思考點


 


因為近幾年手頭上的專案多和machine learning 相關最近趁著過年期間,沈澱思緒,整理一下學習心得。

管理專案需要考量一向很多,Machine learning DevOps 相關的專案也不例外。

雖然該考量的面向很多,不過再三思考過後,特別點出Peggy認為特別必需優先思考的五個關鍵點,提供給有需要或有興趣的朋友參考。

本文為個人經驗談,也歡迎交流討論。☺️


1.  What problem you want to solve? What value you want to deliver?

也許有朋友看到這個放在第一個關鍵點會有些疑問,覺得這也太普通了吧,似乎和其他種專案沒兩樣。

Yes!  Yes! You are right! 這邊Peggy想強調的是,machine learning 的 Dev 與 Ops ,也是和其他研發專案一樣,最優先的是要好好思考與確認要解決什麼問題?更甚至是對客戶的價值是什麼?

不要太興奮,馬上jump進入一些很 fashion 的 Machine learning term/algorithm。例如當時 Deep learning 當紅,就想著一定要用Deep learning,但卻沒有思考到要解決什麼問題,又這問題適合用Deep learning 來解決嗎?

以幾年前,Peggy 手上的一個專案 TrendX,用machine learning 來偵測malware。在專案初期,就很快確認最主要的價值是要偵測 Ransomware (勒索軟體), 而非一般的 malware 。

又以另一個專案Writing style 為例,最初也是花了一些時間定義要解決的問題— BEC ( Business Email Compromise) 。主要是用machine learning 學出寫信者的寫作DNAs,當有人假冒組織內重要人物(例如 CEO) 發信給組織成員,寫作風格一改變,就會被這個偵測到。 且第一版本專注於支援英文,之後才是其他重要語系。

當把要解決的問題/範圍/情境事先定義得越清楚,對之後的 Data pipeline 以及判定哪些machine learning solution 較適合都很有幫助。

另外,Value 這部分,不只單純指多賺的營收、也可能是提升品牌價值、提供differentiation 的功能辨識度等等。
帶來多少 Value 這點,建議早點初步了解,進階更是去計劃如何驗證,最晚POC 完成後,也要開始。
如果公司分工較明確與細緻,那同一個team 的成員或leader 可能不一定可以回答這個問題。但,建議至少要嘗試往PM / marketing 相關的stakeholders 那邊請教一下。

2. Data is king


Data pipeline: Data -> Features -> Algorithms -> Models

一聊到 machine learning,很容易馬上聯想到最 sexy 的部分— Algorithm,也有些人會花很多effort在嘗試各種不同演算法。

然而,在real practice 中,Data is the king! 

大神 Andrew Ng(曾任VP & Chief Scientist of Baidu, Co-Chairman and Co-Founder of Coursera, 與 Professor at Stanford University and Co-founder of Google Brain的) 也曾說 

"it's not who has the best algorithm who wins, it's who has the most data". 


在實務上也是,最棒的data 是兼具quantity 與 quality。
我們也常遇到,solution 的precision 和recall 不如預期時,除了增加data 的量之外,對 data 做些 purify,把quality提升後,常就會有所改善。



3. Operation 


是的,Machine learning solution 也是有Operation 的,除非在POC 階段就掰了。
只要是有上線、有on production 的 ML solution,幾乎都會面臨到Operation 的階段。

以下是 ML solution 上線前常思考的幾個問題:

- 是放事先 train 好的 model 上去,還是要作 on-line 的training?
- ML solution 同一個model 的有效性是多久? 需要rolling model 嗎?
- 如果需要rolling model ,多久需要rolling? 怎麼rolling ?
- 怎麼 monitor 上線後的成效和異常狀況?
- 當異常狀況發生時,如何handle? 如何做urgent 處理以減少business impact?
- 需要多少 Engineer 來作這個operation? 怎麼分工?
...



4. Performance 


因為手上經手過的這幾個machine learning projects都是在 public cloud 上,有AWS的也有Azure的。
這時候,我們通常會用QPS 來衡量model 的 performance.

QPS :Queries Per Second,每秒查詢數。每一個特定的server 在每秒能夠支援的查詢次數,也即是最大吞吐能力。
這邊進一步要思考的點在於,model 的 Response time (ms)。一個query 從進service 到solution 到回應客戶端,共要花多少時間?可以接受花多少時間?
以我們提供的其中一個服務為例,我們的 criteria 是500 ms 含 ML model 300 ms 以及Process time 低消。
比較常用語言是python and Golang,以實務經驗來說,通常要快快做ML solution POC 和 data analyzing , python 還蠻適合的。
然而,對上線(非internal POC) 的版本,建議盡量用Golang。Golang 有內建支援 concurrent process channeling ,效能會好很多。


5. Cost 


一個machine learning solution 可帶來多少效益?需要花多少成本?

關於成本,上述提到的operation 就不重複提了。最基本又直接的問法是,需要開多少instance? 規格是什麼? ex,T2.large 就好嗎?還是要開到更高規格?

以每天的query量,以及model 的回應速度,需要多少機器power 去支持?
每個月花這些錢與前面提的operation efforts有帶來足夠的效益嗎?

畢竟若一個ML solution 花數十萬、甚至數百萬以上,又要不少 Ops effort ,但卻沒有帶來應有的Value,那就太傷了。


Machine Learning DevOps 還有其他蠻多需要考慮的點,不過Peggy認為以上五點是蠻關鍵的思考面向,提供給有需要的朋友參考。

另外對相關主題有興趣的朋友,也可以到Andrew 大神的網站下載他的著作—“MACHINE LEARNING YEARNING”,閱讀後會很有收穫。



以下是手上版本的 Table of Content給您參考囉。Enjoy :-)

1 Why Machine Learning Strategy
2 How to use this book to help your team
3 Prerequisites and Notation
4 Scale drives machine learning progress
5 Your development and test sets
6 Your dev and test sets should come from the same distribution
7 How large do the dev/test sets need to be?
8 Establish a single-number evaluation metric for your team to optimize
9 Optimizing and satisficing metrics
10 Having a dev set and metric speeds up iterations
11 When to change dev/test sets and metrics
12 Takeaways: Setting up development and test sets
13 Build your first system quickly, then iterate
14 Error analysis: Look at dev set examples to evaluate ideas
15 Evaluating multiple ideas in parallel during error analysis
16 Cleaning up mislabeled dev and test set examples
17 If you have a large dev set, split it into two subsets, only one of which you look at
18 How big should the Eyeball and Blackbox dev sets be?
19 Takeaways: Basic error analysis
20 Bias and Variance: The two big sources of error
21 Examples of Bias and Variance
22 Comparing to the optimal error rate
23 Addressing Bias and Variance
24 Bias vs. Variance tradeoff
25 Techniques for reducing avoidable bias 
26 Error analysis on the training set
27 Techniques for reducing variance
28 Diagnosing bias and variance: Learning curves
29 Plotting training error
30 Interpreting learning curves: High bias
31 Interpreting learning curves: Other cases
32 Plotting learning curves
33 Why we compare to human-level performance
34 How to define human-level performance
35 Surpassing human-level performance
36 When you should train and test on different distributions
37 How to decide whether to use all your data
38 How to decide whether to include inconsistent data
39 Weighting data
40 Generalizing from the training set to the dev set
41 Identifying Bias, Variance, and Data Mismatch Errors
42 Addressing data mismatch
43 Artificial data synthesis
44 The Optimization Verification test
45 General form of Optimization Verification test
46 Reinforcement learning example
47 The rise of end-to-end learning
48 More end-to-end learning examples
49 Pros and cons of end-to-end learning
50 Choosing pipeline components: Data availability
51 Choosing pipeline components: Task simplicity 
52 Directly learning rich outputs
53 Error analysis by parts
54 Attributing error to one part
55 General case of error attribution
56 Error analysis by parts and comparison to human-level performance
57 Spotting a flawed ML pipeline
58 Building a superhero team - Get your teammates to read this

/

圖出自 :

reference: 



歡迎轉貼,禁止商業使用,請註明原文標題、連結以及作者。

2021年1月6日 星期三

學習筆記 | 一分鐘秒懂AWS 與 Azure常用服務對照

 

AWS 和Azure 有不少services 有著接近的功能和concept,之前看過Azure官網的對照表,資訊十分豐富,實在是很難快快地把常見的功能mapping起來。


最近和同事聊天剛好也聊到這個,就想著可以順手做個簡表,把常用幾個熱門服務來個簡約的對照,讓有需要的朋友可以很快速的抓個關鍵字來了解一下,以下僅供參考囉。





另外,詳細項目比較表在這 https://docs.microsoft.com/zh-tw/azure/architecture/aws-professional/services


/

小提醒,實際要上production時,還是有些細節功能與 support 程度是不同的,需要多花點時間進一步了解。

這邊就隨意聊聊最近遇到的幾個case,希望對您有點幫助。


1.  AKS and EKS 雖然相近, 但還是有差異,如support 的 image 格式種類、launch cluster 的時間等等。

2. Azure 有些site 是沒有 available zone (or coming soon) 

/
Update on 2021.01.08

這篇在DevOps Taiwan 社群也獲得的好幾個蠻有價值的回饋,先記錄一下。
之後業務碰到更多服務時,再一併把這個常用服務進版XD。
  • 有些使用情境讓user 覺得Azure Data Explorer 和 Athene 很像。( thanks for Kaoru Chen's feedback)
  • 建議 big data processing 重寫,研究一下 aws glue, athena, redshift, redshift spectrum vs azure data factory, databricks, hdinsights, data explorer.Serverless 考慮step functions.  ( thanks for Ming Xie's feeback)



若有您轉貼需求,請來信討論。 轉貼時禁止修改內容及標題且保持所有連結。禁止商業使用,請註明原文標題、連結以及作者。

2020年12月13日 星期日

心得筆記 | 2020 DevOps Journey of Star Trek Competition

 

公司從去年開始大力推動DevOps 文化, 今年更是大手筆舉辦了獎金百萬等級的 Star Trek 內部競賽,以加速 DevOps 轉型與實踐。


整個遊戲化競賽設計分為一個主路線和一個副本。主路線為從七到十一月需submit 四個HDD (hypothesis driven development) ,把每個 iteration 的假設、驗證和結果分享出來。副本為30+以上不同成熟程度的DevOps Practice 的關卡,參賽團隊如果認為有符合的practice, 可以依照主辦單位提供的template 盡可能描述清楚且提供證據。 

本團隊成績從一開始在九十多隊中只位居四十多名,到最後可以從這麼多優秀又努力的團隊中脫穎而出拿到第九名。

成績比預想的outstanding 很多啊,真心覺得團隊可以走到這個階段真的滿不容易的,可以小小驕傲一下(笑)。

另外最難得的是,這整個的過程幾乎都是整個團隊的自主的累積與進化,真心覺得厲害。

偷偷老實說,當初抱著是來陪榜學習的心態參賽的....XD


Achievement 


先總結一下累積的成果,No 9 of 94 Teams,太空船也升級到最高級的Level 。拿到 Tickets to the Expo。


Selected Good Practices:


1 HDD in M5 submission

5 DevOps practices...

      1. Establish a Live-Site culture 
      2. Write the automation test at the lowest possible level  
      3. Automated security updates prevent vulnerable dependencies 
      4. Prevent hard-coded secrets from getting into the code repository
      5. Telemetry is built and visible for incident detection and problem-solving  






What we enhanced in this Journey 

  • 在進行 M 系列的時候,建立了 case template 紀錄 case 發生的處理步驟,也可以藉以測量 Jaguar case resolve and response 的速度。
  • M4與M5: Define criteria for model, 開始拉友team的 log以得到更即時的客戶 FP feedback
  • M6: 開始拉友team log 過來,查看客戶close case率。另外,因為寫了M6,想到要再出一個新的model
  • DGN-02 幫助 static code scan of fortify 整入 CircleCI 完成自動化最後一步。
  • DRN-02 引入 safety 來檢測 python libraries 的 vulnerabilities dependency 的檢查。
  • GM01 幫助了 application deployment 工作完成後,自動確認部署正確。
  • GM01-03 幫助 release.sh 工具可依憑 dev -> stg -> prod 的佈署相依性確保部署品質。
  • GG-01: 要至少一人review, PR才能進(比賽期間因團隊的共識主動進行調整的,不完全是因為比賽)
  • GG-01: CI 沒跑過PR不能merge


整個旅程可分為三個階段




1. 組隊:四月~五月


當初其實對於要不要參加有些struggle。 
因為考量到專案超級忙碌,趕feature都覺得時間不夠用了....
但另一方面,覺得不參加蠻可惜的,畢竟團隊內部也在討論 DevOps practice,也在往那方向前進。
後來我自己內心小劇場了一下,就在一次sprint plan meeting後的空擋,直接問問團隊要不要組隊參加,一起進來學習。
看起來大家沒有反對的樣子(?)就幫忙組隊了XD。

接下來幾個 manager 討論了一下,選出覺得蠻好的隊長人選 A 同事,很棒的是她也願意幫忙。

如同一開始說的,當初抱著是來陪榜學習的心態參賽的。(我也是這樣跟隊長說XD)
隨緣學習的心態,大概是那種看看能走多遠就走。


2. 默默耕耘 :六月到十月中


這中間,考量到團隊忙碌的程度,基本上我都沒有push與過問成績和progress。但是常看到隊長 A 和後來進來幫忙的副隊長 V主動擔起和團隊溝通的任務,完成一個個的DevOps打怪任務。

我中間偶而問一下需不需要幫忙,有沒有卡住的地方,對卡住的地方稍微提供一點建議給他們參考。

看到很棒的地方是,團隊在其中會討論如何在趕新功能開發時,盡量也往優化 DevOps Practice 的方向靠近。

在大概十月份時,公司高層 Oscar 也很關心這個 tranfer 過程,特地找仍然 active地參與比賽的團隊代表們聊聊。當被問到「為什麼你/妳們還可以持續下去?」,我們的隊長A說,「既然參加了就覺得要堅持下去啊!」。當下聽到時,真是內心有被感動到...


3. 衝刺期 : 十月底到十一月中


在一次問問隊長需不需要幫忙時,多聊了一下。了解到目前大概是二三十名,是看得到 2021 Expo 門票(前15名)的車尾燈的! 

也赫然發現其實團隊在忙碌趕feature 這段期間,也儘量的進化,默默間也累積一些不錯的DevOps practice。

但是,就是缺乏小編花時間去把一個個要submit的任務釐清範圍和定義,評估看離要求的 practice 差距多少?是不是RD可加把勁就達到了?還是已經可以花時間整理出來投稿了?

思考了一下,內心升起在最後一兩個sprint 衝刺一下的念頭。有想法後,很快的找了 leaders 討論一下,取得共識。將目標具體定為「進入前15名,拿到2021 Expo ticket 」,手段為「拿到星球#1 的分數加速器」,且把這個任務升級為正式的feature。

一方面,快速盤點之前累積下來的資產。有一些已經可以啟動小編模式來寫。另外一些是差一點點,就決定加快腳步把它們完成。

另一方面,也在這時候開啟war room模式,每一個war room 時段,有具體的打怪目標,把相對應的成員圈進來一起完成。

這時候兼職斜槓的小編群有四位,除了原有的隊長副隊長外,我也拉了另一位manager C 下海一起加速XDD。

衝刺了近兩個sprint ,穩拿了加數器分數後,總算稍微放心些,等最後的成績結算了。

/

整個旅程從今年4、5月組隊, 到11月底比賽結束。
回想起來,覺得是一段難得也有意思的團隊合作經驗,雖然也蠻辛苦、蠻挑戰的,趁著記憶猶新,紀錄一下。


The Team ^ ^



若有您轉貼需求,請來信討論。 轉貼時禁止修改內容及標題且保持所有連結。禁止商業使用,請註明原文標題、連結以及作者。

Peggy的實驗空間| 小書庫 Index card ( 讀書筆記總目錄/書單 )

  一直很喜歡閱讀,也常從閱讀好書中與讀書會得到許多的力量與啟發,不管是在人生的低潮抑或是順遂的時候。在閱讀之路上,這幾年也保持一個習慣。當閱讀到喜歡的書籍,且那陣子時間允許,就會提醒自己閱讀完後整理出心得筆記。一方面藉機鍛鍊寫作肌肉與思路,方便之後的複習和查閱。另一方面,也可以...