MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจธเจพเจฐเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเจคเจฟ เจธเจผเฉเจฐเฉ€ เจ…เจ•เจพเจฒ! เจฎเฉˆเจ‚ CROC เจตเจฟเจ–เฉ‡ เจ‡เฉฑเจ• CV เจกเจฟเจตเฉˆเจฒเจชเจฐ เจนเจพเจ‚เฅค เจ…เจธเฉ€เจ‚ เจนเฉเจฃ 3 เจธเจพเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจธเฉ€เจตเฉ€ เจฆเฉ‡ เจ–เฉ‡เจคเจฐ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚เฅค เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจฆเฉŒเจฐเจพเจจ, เจ…เจธเฉ€เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจšเฉ€เจœเจผเจพเจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚, เจ‰เจฆเจพเจนเจฐเจฃ เจตเจœเฉ‹เจ‚: เจ…เจธเฉ€เจ‚ เจกเจฐเจพเจˆเจตเจฐเจพเจ‚ เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เฉ€เจคเฉ€ เจคเจพเจ‚ เจœเฉ‹ เจ‰เจน เจกเจฐเจพเจˆเจตเจฟเฉฐเจ— เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจธเจผเจฐเจพเจฌ เจจเจพ เจชเฉ€เจ‚เจฆเฉ‡ เจนเฉ‹เจฃ, เจธเจฟเจ—เจฐเจŸ เจจเจนเฉ€เจ‚ เจชเฉ€เจ‚เจฆเฉ‡ เจนเฉ‹เจฃ, เจซเจผเฉ‹เจจ 'เจคเฉ‡ เจ—เฉฑเจฒ เจจเจพ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจฃ, เจธเฉœเจ• เจตเฉฑเจฒ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเฉ‹เจฃ, เจจเจพ เจ•เจฟ เจธเฉเจชเจจเจฟเจ†เจ‚ เจœเจพเจ‚ เจฌเฉฑเจฆเจฒเจพเจ‚ เจตเฉฑเจฒเฅค ; เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจฒเฉ‹เจ•เจพเจ‚ เจจเฉ‚เฉฐ เจฐเจฟเจ•เจพเจฐเจก เจ•เฉ€เจคเจพ เจœเฉ‹ เจธเจฎเจฐเจชเจฟเจค เจฒเฉ‡เจจเจพเจ‚ เจตเจฟเฉฑเจš เจ—เฉฑเจกเฉ€ เจšเจฒเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจ•เจˆ เจชเจพเจฐเจ•เจฟเฉฐเจ— เจฅเจพเจตเจพเจ‚ เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจจ; เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจ•เจฟ เจ•เจพเจฎเจฟเจ†เจ‚ เจจเฉ‡ เจนเฉˆเจฒเจฎเฉ‡เจŸ, เจฆเจธเจคเจพเจจเฉ‡ เจ†เจฆเจฟ เจชเจนเจฟเจจเฉ‡ เจนเฉ‹เจฃ; เจ‡เฉฑเจ• เจ•เจฐเจฎเจšเจพเจฐเฉ€ เจฆเฉ€ เจชเจ›เจพเจฃ เจ•เฉ€เจคเฉ€ เจœเฉ‹ เจธเจนเฉ‚เจฒเจค เจตเจฟเฉฑเจš เจฆเจพเจ–เจฒ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเฉˆ; เจ…เจธเฉ€เจ‚ เจธเจญ เจ•เฉเจ เจ—เจฟเจฃเจฟเจ† เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจธเฉ€.

เจฎเฉˆเจ‚ เจ‡เจน เจธเจญ เจ•เจฟเจธ เจฒเจˆ เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚?

เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจฐเฉเจ•เจพเจตเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจพเจฐเจฆเฉ‡ เจนเจพเจ‚, เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจฐเฉเจ•เจพเจตเจŸเจพเจ‚, เจ•เฉเจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจœเจฟเจจเฉเจนเจพเจ‚ เจคเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจœเจพเจ‚ เจคเจพเจ‚ เจœเจพเจฃเฉ‚ เจนเฉ‹ เจœเจพเจ‚ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจœเจพเจฃเฉ‚ เจนเฉ‹เจตเฉ‹เจ—เฉ‡เฅค

เจ†เจ“ เจธเจฅเจฟเจคเฉ€ เจฆเฉ€ เจจเจ•เจฒ เจ•เจฐเฉ€เจ

เจšเจฒเฉ‹ เจ•เจฒเจชเจจเจพ เจ•เจฐเฉ€เจ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเฉŒเจœเจตเจพเจจ เจ•เฉฐเจชเจจเฉ€ "N" เจตเจฟเฉฑเจš เจจเฉŒเจ•เจฐเฉ€ เจฎเจฟเจฒเฉ€ เจนเฉˆ, เจœเจฟเจธ เจฆเฉ€เจ†เจ‚ เจ—เจคเฉ€เจตเจฟเจงเฉ€เจ†เจ‚ ML เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจนเจจเฅค เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• ML (DL, CV) เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจซเจฟเจฐ เจ•เจฟเจธเฉ‡ เจ•เจพเจฐเจจ เจ•เจฐเจ•เฉ‡ เจ…เจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจจเฉŒเจ•เจฐเฉ€ 'เจคเฉ‡ เจธเจตเจฟเจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฌเฉเจฐเฉ‡เจ• เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ†เจชเจฃเฉ‡ เจœเจพเจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจฆเฉ‡ เจจเจฟเจŠเจฐเฉ‹เจจ 'เจคเฉ‡ เจตเจพเจชเจธ เจ†เจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค

  1. เจธเฉฑเจšเจพเจˆ เจฆเจพ เจชเจฒ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจ‡เจน เจฏเจพเจฆ เจฐเฉฑเจ–เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเฉฑเจฅเฉ‡ เจฐเฉเจ•เฉ‡, เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจนเฉœเฉ‡ เจนเจพเจˆเจชเจฐเจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เฉ€เจคเฉ€ เจ…เจคเฉ‡, เจธเจญ เจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ, เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจ•เจฟเจนเฉœเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจจเจฟเจ•เจฒเฉ‡. เจธเจพเจฐเฉ‡ เจฒเจพเจ‚เจšเจพเจ‚ 'เจคเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจฒเจˆ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจตเจฟเจ•เจฒเจช เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจ: เจนเฉˆเฉฑเจก, เจ•เฉŒเจ‚เจซเจฟเจ—เจธ, เจจเฉ‹เจŸเจชเฉˆเจก, เจ•เจฒเจพเจ‰เจก เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจšเฅค เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจช เจฆเฉ‡เจ–เจฟเจ† เจœเจฆเฉ‹เจ‚ เจนเจพเจˆเจชเจฐเจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจŸเจฟเฉฑเจชเจฃเฉ€ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจฒเจพเจˆเจจเจพเจ‚ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจซเฉˆเจ‚เจธเฉ€ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจกเจพเจฃ. เจนเฉเจฃ เจ•เจฒเจชเจจเจพ เจ•เจฐเฉ‹ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ 'เจคเฉ‡ เจจเจนเฉ€เจ‚, เจชเจฐ เจ‰เจธ เจตเจฟเจ…เจ•เจคเฉ€ เจฆเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ 'เจคเฉ‡ เจตเจพเจชเจธ เจ†เจ เจนเฉ‹ เจœเจฟเจธ เจจเฉ‡ เจ•เฉฐเจชเจจเฉ€ เจ›เฉฑเจก เจฆเจฟเฉฑเจคเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เฉ‹เจก เจ…เจคเฉ‡ เจฎเจพเจกเจฒ_1.pb เจจเจพเจฎเจ• เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจตเจฟเจฐเจพเจธเจค เจตเจฟเฉฑเจš เจฎเจฟเจฒเจฟเจ† เจนเฉˆเฅค เจคเจธเจตเฉ€เจฐ เจจเฉ‚เฉฐ เจชเฉ‚เจฐเจพ เจ•เจฐเจจ เจ…เจคเฉ‡ เจธเจพเจฐเฉ‡ เจฆเจฐเจฆ เจจเฉ‚เฉฐ เจฌเจฟเจ†เจจ เจ•เจฐเจจ เจฒเจˆ, เจ†เจ“ เจ•เจฒเจชเจจเจพ เจ•เจฐเฉ€เจ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจฎเจพเจนเจฐ เจตเฉ€ เจนเฉ‹เฅค
  2. เจฒเฉฐเจ— เจœเจพเจ“. เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจ…เจคเฉ‡ เจนเจฐ เจ•เฉ‹เจˆ เจœเฉ‹ เจ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเฉ‡เจ—เจพ, เจ‡เฉฑเจ• เจฎเจพเจนเฉŒเจฒ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ‡เจน เจ…เจ•เจธเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‰เจน เจ•เจฟเจธเฉ‡ เจ•เจพเจฐเจจ เจ•เจฐเจ•เฉ‡ เจ‰เจธ เจจเฉ‚เฉฐ เจธเจพเจกเฉ€ เจตเจฟเจฐเจพเจธเจค เจตเจœเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจ›เฉฑเจกเจฆเฉ‡ เจธเจจ. เจ‡เจน เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจฎเจพเจฎเฉ‚เจฒเฉ€ เจ•เฉฐเจฎ เจตเฉ€ เจฌเจฃ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจ•เจฆเจฎ 'เจคเฉ‡ เจธเจฎเจพเจ‚ เจฌเจฐเจฌเจพเจฆ เจจเจนเฉ€เจ‚ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡, เจ•เฉ€ เจคเฉเจธเฉ€เจ‚?
  3. เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจจเฉ‚เฉฐ เจธเจฟเจ–เจฒเจพเจˆ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจ•เจพเจฐ เจกเจฟเจŸเฉˆเจ•เจŸเจฐ)เฅค เจ…เจธเฉ€เจ‚ เจ‰เจธ เจฌเจฟเฉฐเจฆเฉ‚ เจคเฉ‡ เจชเจนเฉเฉฐเจšเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเฉฑเจฅเฉ‡ เจ‡เจน เจฌเจนเฉเจค เจตเจงเฉ€เจ† เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ - เจ‡เจน เจจเจคเฉ€เจœเจพ เจฌเจšเจพเจ‰เจฃ เจฆเจพ เจธเจฎเจพเจ‚ เจนเฉˆ. เจšเจฒเฉ‹ เจ‡เจธเจจเฉ‚เฉฐ car_detection_v1.pb เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจซเจฟเจฐ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจจเฉ‚เฉฐ เจธเจฟเจ–เจฒเจพเจˆ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ - car_detection_v2.pb. เจ•เฉเจ เจธเจฎเฉ‡เจ‚ เจฌเจพเจ…เจฆ, เจธเจพเจกเฉ‡ เจธเจนเจฟเจฏเฉ‹เจ—เฉ€ เจœเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ–เฉเจฆ เจตเฉฑเจ–-เจตเฉฑเจ– เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจธเจฟเจ–เจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจ•เจฒเจพเจคเจฎเจ• เจšเฉ€เจœเจผเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจฌเจฃเจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฌเจนเฉเจค เจฎเจฟเจนเจจเจค เจจเจพเจฒ เจ‡เจ•เฉฑเจ เฉ€ เจ•เฉ€เจคเฉ€ เจœเจพเจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ (เจชเจฐ เจ…เจธเฉ€เจ‚ เจ‡เจน เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจ•เจฐเจพเจ‚เจ—เฉ‡, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจนเฉเจฃ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจตเจงเฉ‡เจฐเฉ‡ เจคเจฐเจœเฉ€เจนเฉ€ เจฎเจพเจฎเจฒเฉ‡ เจนเจจ)เฅค
  4. เจ เฉ€เจ• เจนเฉˆ เจนเฉเจฃ เจ‡เจน เจธเจญ เจ–เจคเจฎ เจนเฉ‹ เจ—เจฟเจ† เจนเฉˆ! เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจนเฉˆ! เจ•เฉ€ เจ…เจธเฉ€เจ‚ เจ…เจ—เจฒเฉ‡ เจฎเจพเจกเจฒ เจฆเฉ€ เจธเจฟเจ–เจฒเจพเจˆ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจ†เจฐเจ•เฉ€เจŸเฉˆเจ•เจšเจฐ เจตเจฟเจ•เจธเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจœเจพเจ‚ เจ•เฉ€ เจ…เจธเฉ€เจ‚ เจ•เฉเจ เจšเจพเจน เจชเฉ€ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚? เจ…เจคเฉ‡ เจ•เฉŒเจฃ เจคเจพเจ‡เจจเจพเจค เจ•เจฐเฉ‡เจ—เจพ?

เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเฉ€ เจชเจ›เจพเจฃ เจ•เจฐเจจเจพ

เจ•เจฟเจธเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจœเจพเจ‚ เจ‰เจคเจชเจพเจฆ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฒเฉ‹เจ•เจพเจ‚ เจฆเจพ เจ•เฉฐเจฎ เจนเฉˆเฅค เจ…เจคเฉ‡ เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจฒเฉ‹เจ• เจšเจฒเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจ†เจ‰เจ‚เจฆเฉ‡ เจนเจจ, เจนเฉ‹เจฐ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจนเจจ, เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ†เจชเจฃเฉ‡ เจ†เจช เจนเฉ‹เจฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจฌเจฃ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ. เจ‡เฉฑเจ• เจœเจพเจ‚ เจฆเฉ‚เจœเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ, เจ‰เฉฑเจชเจฐ เจฆเฉฑเจธเฉ‡ เจ—เจ เจšเฉฑเจ•เจฐ เจฆเฉ€เจ†เจ‚ เจธเจฅเจฟเจคเฉ€เจ†เจ‚ (เจ…เจคเฉ‡ เจจเจพ เจธเจฟเจฐเจซ) เจ•เฉเจ เจธเฉฐเจœเฉ‹เจ—เจพเจ‚ เจตเจฟเฉฑเจš เจฆเฉเจนเจฐเจพเจ“ เจคเฉ‹เจ‚ เจฆเฉเจนเจฐเจพเจ… เจคเฉฑเจ• เจตเจพเจชเจฐเจจเจ—เฉ€เจ†เจ‚เฅค เจ‡เจธ เจธเจญ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจธเจฎเจพเจ‚ เจฌเจฐเจฌเจพเจฆ เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ‰เจฒเจเจฃ, เจคเฉฐเจคเฉ‚เจ†เจ‚, เจธเฉฐเจญเจต เจคเฉŒเจฐ 'เจคเฉ‡ เจ—เจพเจนเจ•เจพเจ‚ เจฆเฉ€ เจ…เจธเฉฐเจคเฉเจธเจผเจŸเฉ€, เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจชเฉˆเจธเจพ เจ—เฉเจ†เจš เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ…เจธเฉ€เจ‚ เจธเจพเจฐเฉ‡ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‰เจธเฉ‡ เจชเฉเจฐเจพเจฃเฉ‡ เจฐเฉˆเจ• เจฆเฉ€ เจชเจพเจฒเจฃเจพ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจฎเฉ‡เจฐเจพ เจฎเฉฐเจจเจฃเจพ เจนเฉˆ เจ•เจฟ เจ•เฉ‹เจˆ เจตเฉ€ เจ‡เจจเฉเจนเจพเจ‚ เจชเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจตเจพเจฐ-เจตเจพเจฐ เจฎเฉเฉœ เจธเฉเจฐเจœเฉ€เจค เจจเจนเฉ€เจ‚ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจ‡เจธ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเจฟเจ•เจพเจธ เจฆเฉ‡ เจšเฉฑเจ•เจฐ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœ เจนเฉˆ:

  • เจ•เฉฐเจฎ เจฆเฉ‡ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจธเจŸเฉ‹เจฐ เจ•เจฐเฉ‹;
  • เจจเจตเฉ‡เจ‚ เจ•เจฐเจฎเจšเจพเจฐเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเจผเจพเจฎเจฒ เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‰เจฃเจพ;
  • เจ‡เฉฑเจ• เจตเจฟเจ•เจพเจธ เจตเจพเจคเจพเจตเจฐเจฃ เจจเฉ‚เฉฐ เจคเจพเจ‡เจจเจพเจค เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‰เจฃเจพ;
  • เจฎเจพเจกเจฒ เจตเจฐเจœเจจเจฟเฉฐเจ— เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเฉ‹;
  • เจฎเจพเจกเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจ•เจฐเจจ เจฆเจพ เจ‡เฉฑเจ• เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจคเจฐเฉ€เจ•เจพ เจนเฉˆ;
  • เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจธเจŸเฉ‡เจŸ เจฎเฉˆเจจเฉ‡เจœเจฎเฉˆเจ‚เจŸ เจŸเฉ‚เจฒ เจฒเฉฑเจญเฉ‹;
  • เจฎเจพเจกเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ‰เจคเจชเจพเจฆเจจ เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจพเจ‰เจฃ เจฆเจพ เจคเจฐเฉ€เจ•เจพ เจฒเฉฑเจญเฉ‹เฅค

เจœเจผเจพเจนเจฐ เจนเฉˆ เจ•เจฟ เจ‡เจน เจ‡เฉฑเจ• เจตเจฐเจ•เจซเจฒเฉ‹ เจฆเฉ‡ เจจเจพเจฒ เจ†เจ‰เจฃเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธ เจœเฉ€เจตเจจ เจšเฉฑเจ•เจฐ เจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจ…เจคเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจขเฉฐเจ— เจจเจพเจฒ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจตเฉ‡เจ—เจพ? เจ‡เจธ เจ…เจญเจฟเจ†เจธ เจจเฉ‚เฉฐ MLOps เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ

เจฎเจธเจผเฉ€เจจ เจธเจฟเจ–เจฒเจพเจˆ เจฒเจˆ MLOps, เจœเจพเจ‚ DevOps, เจกเจพเจŸเจพ เจตเจฟเจ—เจฟเจ†เจจ เจ…เจคเฉ‡ IT เจŸเฉ€เจฎเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจธเจผเฉ€เจจ เจธเจฟเจ–เจฒเจพเจˆ เจฎเจพเจกเจฒเจพเจ‚ เจฒเจˆ เจจเจฟเจ—เจฐเจพเจจเฉ€, เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ, เจ…เจคเฉ‡ เจชเฉเจฐเจธเจผเจพเจธเจจ เจฆเฉเจ†เจฐเจพ เจฎเจพเจกเจฒ เจตเจฟเจ•เจพเจธ เจ…เจคเฉ‡ เจคเฉˆเจจเจพเจคเฉ€ เจฆเฉ€ เจ—เจคเฉ€ เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจฃ เจ…เจคเฉ‡ เจธเจนเจฟเจฏเฉ‹เจ— เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจคเฉเจธเฉ€เจ‚ เจ•เจฐ เจธเฉฑเจ•เจฆเฉ‡ เจนเฉ‹ เจชเฉœเฉเจนเฉ‹เจ—เฉ‚เจ—เจฒ เจตเจพเจฒเฉ‡ เจ‡เจธ เจธเจญ เจฌเจพเจฐเฉ‡ เจ•เฉ€ เจธเฉ‹เจšเจฆเฉ‡ เจนเจจ? เจฒเฉ‡เจ– เจคเฉ‹เจ‚ เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ เจ•เจฟ MLOps เจ‡เฉฑเจ• เจฌเจนเฉเจค เจตเฉฑเจกเฉ€ เจšเฉ€เจœเจผ เจนเฉˆ.

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจฎเฉ‡เจฐเฉ‡ เจฒเฉ‡เจ– เจตเจฟเจš เจ…เฉฑเจ—เฉ‡ เจฎเฉˆเจ‚ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉ‡ เจธเจฟเจฐเจซ เจนเจฟเฉฑเจธเฉ‡ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจพเจ‚เจ—เจพ. เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฒเจˆ, เจฎเฉˆเจ‚ MLflow เจŸเฉ‚เจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ ... เจ‡เจน เจ‡เฉฑเจ• เจ“เจชเจจ-เจธเฉ‹เจฐเจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจนเฉˆ, เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเจจ เจฒเจˆ เจฅเฉ‹เฉœเฉเจนเฉ‡ เจœเจฟเจนเฉ‡ เจ•เฉ‹เจก เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจชเฉเจฐเจธเจฟเฉฑเจง เจเจฎเจเจฒ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจจเจพเจฒ เจเจ•เฉ€เจ•เจฐเจฃ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจฆเฉ‚เจœเฉ‡ เจŸเฉ‚เจฒเจธ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ•เฉเจฌเฉ‡เจซเจฒเฉ‹, เจธเฉ‡เจœเจฎเฉ‡เจ•เจฐ, เจŸเฉเจฐเฉ‡เจจเจพเจ‚, เจ†เจฆเจฟ เจฒเจˆ เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ เจธเจผเจพเจ‡เจฆ เจ‡เฉฑเจ• เจ…เจœเจฟเจนเจพ เจฒเฉฑเจญ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเฉ‹ เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจœเจผเจฐเฉ‚เจฐเจคเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒ เจนเฉ‹เจตเฉ‡เฅค

MLFlow เจŸเฉ‚เจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ "เจฌเจฟเจฒเจกเจฟเฉฐเจ—" MLOps

MLFlow ml เจฎเจพเจกเจฒเจพเจ‚ เจฆเฉ‡ เจœเฉ€เจตเจจ เจšเฉฑเจ•เจฐ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฒเจˆ เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจนเฉˆ (https://mlflow.org/).

MLflow เจตเจฟเฉฑเจš เจšเจพเจฐ เจญเจพเจ— เจธเจผเจพเจฎเจฒ เจนเจจ:

  • MLflow เจŸเจฐเฉˆเจ•เจฟเฉฐเจ— - เจฐเจฟเจ•เจพเจฐเจกเจฟเฉฐเจ— เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจ…เจคเฉ‡ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฆเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจตเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เจธ เจจเจคเฉ€เจœเฉ‡ เจตเฉฑเจฒ เจฒเฉˆ เจ—เจ เจนเจจ;
  • MLflow เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ - เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจชเฉˆเจ•เฉ‡เจœ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ 'เจคเฉ‡ เจฆเฉเจฌเจพเจฐเจพ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ;
  • MLflow เจฎเจพเจกเจฒ - เจ‰เจคเจชเจพเจฆเจจ เจฒเจˆ เจฎเจพเจกเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจจ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ;
  • MLflow เจฐเจœเจฟเจธเจŸเจฐเฉ€ - เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเจพเจกเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ•เฉ‡เจ‚เจฆเจฐเฉ€เจ•เฉเจฐเจฟเจค เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

MLflow เจฆเฉ‹ เจธเฉฐเจธเจฅเจพเจตเจพเจ‚ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ:

  • เจฒเจพเจ‚เจš เจธเจฟเจ–เจฒเจพเจˆ, เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจ…เจคเฉ‡ เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ เจฆเจพ เจ‡เฉฑเจ• เจชเฉ‚เจฐเจพ เจšเฉฑเจ•เจฐ เจนเฉˆ เจœเจฟเจธ เจฆเฉเจ†เจฐเจพ เจ…เจธเฉ€เจ‚ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚;
  • เจ‡เฉฑเจ• เจชเฉเจฐเจฏเฉ‹เจ— เจ‡เฉฑเจ• "เจตเจฟเจธเจผเจพ" เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เจ•เฉฑเจ เฉ‡ เจšเฉฑเจฒเจฆเจพ เจนเฉˆเฅค

เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจชเฉœเจพเจ… เจ‰เจฌเฉฐเจŸเฉ‚ 18.04 เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎ 'เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค

1. เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเฉ‹

เจธเจพเจกเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐเจจ เจ…เจคเฉ‡ เจธเจพเจฐเฉ€ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจฐเจตเจฐ เจคเจพเจ‡เจจเจพเจค เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค MLflow เจŸเจฐเฉˆเจ•เจฟเฉฐเจ— เจธเจฐเจตเจฐ เจฆเฉ‡ เจฆเฉ‹ เจฎเฉเฉฑเจ– เจญเจพเจ— เจนเจจ:

  • เจฌเฉˆเจ•เจเจ‚เจก เจธเจŸเฉ‹เจฐ - เจฐเจœเจฟเจธเจŸเจฐเจก เจฎเจพเจกเจฒเจพเจ‚ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ (4 DBMSs เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ: mysql, mssql, sqlite, เจ…เจคเฉ‡ postgresql);
  • เจ†เจฐเจŸเฉ€เจซเฉˆเจ•เจŸ เจธเจŸเฉ‹เจฐ - เจ•เจฒเจพเจคเจฎเจ• เจšเฉ€เจœเจผเจพเจ‚ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ (7 เจธเจŸเฉ‹เจฐเฉ‡เจœ เจตเจฟเจ•เจฒเจชเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ: Amazon S3, Azure Blob Storage, Google Cloud Storage, FTP เจธเจฐเจตเจฐ, SFTP เจธเจฐเจตเจฐ, NFS, HDFS)เฅค

เจนเฉ‹เจฃ เจฆเฉ‡ เจจเจพเจคเฉ‡ เจ•เจฒเจพเจคเจฎเจ• เจธเจŸเฉ‹เจฐ เจธเจฐเจฒเจคเจพ เจฒเจˆ, เจ†เจ“ เจ‡เฉฑเจ• sftp เจธเจฐเจตเจฐ เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค

  • เจ‡เฉฑเจ• เจ—เจฐเฉเฉฑเจช เจฌเจฃเจพเจ“
    $ sudo groupadd sftpg
  • เจ‡เฉฑเจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจœเฉ‹เฉœเฉ‹ เจ…เจคเฉ‡ เจ‰เจธเจฆเฉ‡ เจฒเจˆ เจ‡เฉฑเจ• เจชเจพเจธเจตเจฐเจก เจธเฉˆเจŸ เจ•เจฐเฉ‹
    $ sudo useradd -g sftpg mlflowsftp
    $ sudo passwd mlflowsftp 
  • เจ•เฉเจ เจชเจนเฉเฉฐเจš เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจตเจฟเจตเจธเจฅเจฟเจค เจ•เจฐเจจเจพ
    $ sudo mkdir -p /data/mlflowsftp/upload
    $ sudo chown -R root.sftpg /data/mlflowsftp
    $ sudo chown -R mlflowsftp.sftpg /data/mlflowsftp/upload
  • /etc/ssh/sshd_config เจตเจฟเฉฑเจš เจ•เฉเจ เจฒเจพเจˆเจจเจพเจ‚ เจœเฉ‹เฉœเฉ‹
    Match Group sftpg
     ChrootDirectory /data/%u
     ForceCommand internal-sftp
  • เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ‹
    $ sudo systemctl restart sshd

เจนเฉ‹เจฃ เจฆเฉ‡ เจจเจพเจคเฉ‡ เจฌเฉˆเจ•เจเจ‚เจก เจธเจŸเฉ‹เจฐ เจšเจฒเฉ‹ postgresql เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค

$ sudo apt update
$ sudo apt-get install -y postgresql postgresql-contrib postgresql-server-dev-all
$ sudo apt install gcc
$ pip install psycopg2
$ sudo -u postgres -i
# Create new user: mlflow_user
[postgres@user_name~]$ createuser --interactive -P
Enter name of role to add: mlflow_user
Enter password for new role: mlflow
Enter it again: mlflow
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
# Create database mlflow_bd owned by mlflow_user
$ createdb -O mlflow_user mlflow_db

เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ python เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ (เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ เจตเจฐเจšเฉเจ…เจฒ เจตเจพเจคเจพเจตเจฐเจฃ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚):

pip install mlflow
pip install pysftp

เจ†เจ‰ เจธเจพเจกเจพ เจธเจฐเจตเจฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจ

$ mlflow server  
                 --backend-store-uri postgresql://mlflow_user:mlflow@localhost/mlflow_db 
                 --default-artifact-root sftp://mlflowsftp:mlflow@sftp_host/upload  
                --host server_host 
                --port server_port

2. เจŸเจฐเฉˆเจ•เจฟเฉฐเจ— เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

เจธเจพเจกเฉ€ เจธเจฟเจ–เจฒเจพเจˆ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจ—เฉเฉฐเจฎ เจจเจพ เจนเฉ‹เจฃ, เจตเจฟเจ•เจพเจธเจ•เจพเจฐเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจ†เจ‰เจฃ เจตเจพเจฒเฉ€เจ†เจ‚ เจชเฉ€เฉœเฉเจนเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ‡เจน เจธเจฎเจเจฃ เจฒเจˆ เจ•เจฟ เจ•เฉ€ เจนเฉ‹ เจฐเจฟเจนเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจชเฉเจฐเจพเจฃเฉ‡ เจธเจพเจฅเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ เจธเจฟเฉฑเจ–เจฃ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเจพ เจธเจผเจพเจ‚เจคเฉ€ เจจเจพเจฒ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹เจฃ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ เจŸเจฐเฉˆเจ•เจฟเฉฐเจ— เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจŸเฉเจฐเฉˆเจ•เจฟเฉฐเจ— เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚, เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ, เจ•เจฒเจพเจคเจฎเจ• เจšเฉ€เจœเจผเจพเจ‚ เจ…เจคเฉ‡ เจธเจฟเจ–เจฒเจพเจˆ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจฌเจพเจฐเฉ‡ เจ•เฉ‹เจˆ เจตเจพเจงเฉ‚ เจœเจพเจฃเจ•เจพเจฐเฉ€, เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจธเจฐเจตเจฐ 'เจคเฉ‡ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจจเจพเฅค

เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจ›เฉ‹เจŸเจพ เจฌเจฃเจพเจ‡เจ† github 'เจคเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจนเจฐ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจตเฉฐเจกเจฃ เจฒเจˆ Keras 'เจคเฉ‡ COCO เจกเฉ‡เจŸเจพเจธเฉˆเจŸ. เจŸเจฐเฉˆเจ•เจฟเฉฐเจ— เจœเฉ‹เฉœเจจ เจฒเจˆ, เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ mlflow_training.py เจฌเจฃเจพเจˆ เจนเฉˆเฅค

เจ‡เฉฑเจฅเฉ‡ เจ‰เจน เจฒเจพเจˆเจจเจพเจ‚ เจนเจจ เจœเจฟเฉฑเจฅเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจฆเจฟเจฒเจšเจธเจช เจšเฉ€เจœเจผเจพเจ‚ เจตเจพเจชเจฐเจฆเฉ€เจ†เจ‚ เจนเจจ:

def run(self, epochs, lr, experiment_name):
        # getting the id of the experiment, creating an experiment in its absence
        remote_experiment_id = self.remote_server.get_experiment_id(name=experiment_name)
        # creating a "run" and getting its id
        remote_run_id = self.remote_server.get_run_id(remote_experiment_id)

        # indicate that we want to save the results on a remote server
        mlflow.set_tracking_uri(self.tracking_uri)
        mlflow.set_experiment(experiment_name)

        with mlflow.start_run(run_id=remote_run_id, nested=False):
            mlflow.keras.autolog()
            self.train_pipeline.train(lr=lr, epochs=epochs)

        try:
            self.log_tags_and_params(remote_run_id)
        except mlflow.exceptions.RestException as e:
            print(e)

เจ‡เฉฑเจฅเฉ‡ self.remote_server mlflow.tracking เจตเจฟเจงเฉ€เจ†เจ‚ เจ‰เฉฑเจคเฉ‡ เจ‡เฉฑเจ• เจ›เฉ‹เจŸเจพ เจฐเฉˆเจชเจฐ เจนเฉˆเฅค MlflowClient (เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเจนเฉ‚เจฒเจค เจฒเจˆ เจฌเจฃเจพเจ‡เจ† เจนเฉˆ), เจœเจฟเจธเจฆเฉ€ เจฎเจฆเจฆ เจจเจพเจฒ เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจชเฉเจฐเจฏเฉ‹เจ— เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฐเจตเจฐ เจคเฉ‡ เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเจพเจ‚. เจ…เฉฑเจ—เฉ‡, เจฎเฉˆเจ‚ เจธเฉฐเจ•เฉ‡เจค เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจฒเจพเจ‚เจš เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจฟเฉฑเจฅเฉ‡ เจฎเจฟเจฒเจพเจ‡เจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ (mlflow.set_tracking_uri(self.tracking_uri))เฅค เจฎเฉˆเจ‚ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจฒเฉŒเจ—เจฟเฉฐเจ— เจจเฉ‚เฉฐ เจธเจฎเจฐเฉฑเจฅ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเจพเจ‚ mlflow.keras.autolog(). เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš MLflow เจŸเจฐเฉˆเจ•เจฟเฉฐเจ— TensorFlow, Keras, Gluon XGBoost, LightGBM, Spark เจฒเจˆ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจฒเฉŒเจ—เจฟเฉฐเจ— เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจชเจฃเจพ เจซเจฐเฉ‡เจฎเจตเจฐเจ• เจœเจพเจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจจเจนเฉ€เจ‚ เจฎเจฟเจฒเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจนเจฎเฉ‡เจธเจผเจพ เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเฉŒเจ— เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ…เจธเฉ€เจ‚ เจธเจฟเจ–เจฒเจพเจˆ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚เฅค เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ 'เจคเฉ‡ เจŸเฉˆเจ— เจ…เจคเฉ‡ เจ‡เจจเจชเฉเจŸ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเฉ‹เฅค

เจ•เฉเจ เจฒเจพเจˆเจจเจพเจ‚ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ, เจนเจฐ เจ•เจฟเจธเฉ‡ เจฆเฉ€ เจคเจฐเฉเจนเจพเจ‚, เจธเจพเจฐเฉ‡ เจฒเจพเจ‚เจšเจพเจ‚ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจนเฉˆเฅค เจ เฉฐเจกเจพ?

3. เจ…เจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚

เจ†เจ‰ เจนเฉเจฃ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจ•เจฐเฉ€เจเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, MLproject เจ…เจคเฉ‡ conda.yaml เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฐเฉ‚เจŸ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹เฅค
ML เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ

name: flow_segmentation
conda_env: conda.yaml

entry_points:
  main:
    parameters:
        categories: {help: 'list of categories from coco dataset'}
        epochs: {type: int, help: 'number of epochs in training'}

        lr: {type: float, default: 0.001, help: 'learning rate'}
        batch_size: {type: int, default: 8}
        model_name: {type: str, default: 'Unet', help: 'Unet, PSPNet, Linknet, FPN'}
        backbone_name: {type: str, default: 'resnet18', help: 'exampe resnet18, resnet50, mobilenetv2 ...'}

        tracking_uri: {type: str, help: 'the server address'}
        experiment_name: {type: str, default: 'My_experiment', help: 'remote and local experiment name'}
    command: "python mlflow_training.py 
            --epochs={epochs}
            --categories={categories}
            --lr={lr}
            --tracking_uri={tracking_uri}
            --model_name={model_name}
            --backbone_name={backbone_name}
            --batch_size={batch_size}
            --experiment_name={experiment_name}"

MLflow เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ€เจ†เจ‚ เจ•เจˆ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจนเจจ:

  • เจจเจพเจฎ - เจคเฉเจนเจพเจกเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเจพ เจจเจพเจฎ;
  • เจตเจพเจคเจพเจตเจฐเจฃ - เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, conda_env เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจเจจเจพเจ•เจพเจ‚เจกเจพ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจจเจฟเจฐเจญเจฐเจคเจพ เจตเจฐเจฃเจจ conda.yaml เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจนเฉˆ;
  • เจเจ‚เจŸเจฐเฉ€ เจชเฉเจ†เจ‡เฉฐเจŸเจธ - เจ‡เจน เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เจฟเจนเฉœเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจ…เจคเฉ‡ เจ•เจฟเจนเฉœเฉ‡ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจจเจพเจฒ เจ…เจธเฉ€เจ‚ เจšเจฒเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ (เจธเจฟเจ–เจฒเจพเจˆ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจธเจพเจฐเฉ‡ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจฒเฉŒเจ— เจนเฉ‹ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ)

conda.yaml

name: flow_segmentation
channels:
  - defaults
  - anaconda
dependencies:
  - python==3.7
  - pip:
    - mlflow==1.8.0
    - pysftp==0.2.9
    - Cython==0.29.19
    - numpy==1.18.4
    - pycocotools==2.0.0
    - requests==2.23.0
    - matplotlib==3.2.1
    - segmentation-models==1.0.1
    - Keras==2.3.1
    - imgaug==0.4.0
    - tqdm==4.46.0
    - tensorflow-gpu==1.14.0

เจคเฉเจธเฉ€เจ‚ เจกเฉŒเจ•เจฐ เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจฐเจจเจŸเจพเจˆเจฎ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจœเฉ‹เจ‚ เจตเจฐเจค เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจตเจงเฉ‡เจฐเฉ‡ เจตเฉ‡เจฐเจตเจฟเจ†เจ‚ เจฒเจˆ เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจตเฉ‡เจ–เฉ‹ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

4. เจ†เจ“ เจธเจฟเจ–เจฒเจพเจˆ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจ

เจ…เจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจ•เจฒเฉ‹เจจ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ 'เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจพเจ‚:

git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/

เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ

pip install mlflow
pip install pysftp

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ conda_env เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเจพเจ‚, เจเจจเจพเจ•เจพเจ‚เจกเจพ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ 'เจคเฉ‡ เจ‡เฉฐเจธเจŸเจพเจฒ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ (เจชเจฐ เจคเฉเจธเฉ€เจ‚ เจธเจพเจฐเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจจเฉ‚เฉฐ เจ–เฉเจฆ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจ•เฉ‡ เจ…เจคเฉ‡ เจฒเจพเจ‚เจš เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจจเจพเจฒ เจ–เฉ‡เจก เจ•เฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹)เฅค

เจธเจพเจฐเฉ‡ เจคเจฟเจ†เจฐเฉ€ เจฆเฉ‡ เจ•เจฆเจฎ เจชเฉ‚เจฐเฉ‡ เจนเฉ‹ เจ—เจ เจนเจจ เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจธเจฟเจ–เจฒเจพเจˆ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฐเฉ‚เจŸ เจคเฉ‹เจ‚:

$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .

เจ•เจฎเจพเจ‚เจก เจฆเจพเจ–เจฒ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เฉฑเจ• เจ•เฉŒเจ‚เจกเจพ เจตเจพเจคเจพเจตเจฐเจฃ เจ†เจชเจฃเฉ‡ เจ†เจช เจฌเจฃ เจœเจพเจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจธเจฟเจ–เจฒเจพเจˆ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เฉ€เฅค
เจ‰เจชเจฐเฉ‹เจ•เจค เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจธเจฟเจ–เจฒเจพเจˆ เจฒเจˆ เจฏเฉเฉฑเจ—เจพเจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ† เจชเจพเจธ เจ•เฉ€เจคเฉ€, เจ‰เจน เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจœเจฟเจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจญเจพเจ— เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚ (เจคเฉเจธเฉ€เจ‚ เจชเฉ‚เจฐเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‡เฉฑเจฅเฉ‡) เจ…เจคเฉ‡ เจธเจพเจกเฉ‡ เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจฆเจพ เจชเจคเจพเฅค
เจธเฉฐเจญเจต เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจชเฉ‚เจฐเฉ€ เจธเฉ‚เจšเฉ€ MLproject เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฒเฉฑเจญเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

5. เจธเจฟเฉฑเจ–เจฃ เจฆเฉ‡ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเจพ เจฎเฉเจฒเจพเจ‚เจ•เจฃ เจ•เจฐเฉ‹

เจธเจฟเจ–เจฒเจพเจˆ เจชเฉ‚เจฐเฉ€ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ…เจธเฉ€เจ‚ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจตเจฟเฉฑเจš เจ†เจชเจฃเฉ‡ เจธเจฐเจตเจฐ เจฆเฉ‡ เจชเจคเฉ‡ 'เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ http://server_host:server_port

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจ‡เฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจธเจพเจฐเฉ‡ เจชเฉเจฐเจฏเฉ‹เจ—เจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจตเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚ (เจ‰เฉฑเจชเจฐ เจ–เฉฑเจฌเฉ‡), เจ…เจคเฉ‡ เจจเจพเจฒ เจนเฉ€ เจฆเฉŒเฉœเจพเจ‚ (เจตเจฟเจšเจ•เจพเจฐ) เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€เฅค เจ…เจธเฉ€เจ‚ เจนเจฐเฉ‡เจ• เจฒเจพเจ‚เจš เจฒเจˆ เจตเจงเฉ‡เจฐเฉ‡ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจœเจพเจฃเจ•เจพเจฐเฉ€ (เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ, เจฎเฉˆเจŸเฉเจฐเจฟเจ•เจธ, เจ•เจฒเจพเจคเจฎเจ• เจšเฉ€เจœเจผเจพเจ‚ เจ…เจคเฉ‡ เจ•เฉเจ เจตเจพเจงเฉ‚ เจœเจพเจฃเจ•เจพเจฐเฉ€) เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจนเจฐเฉ‡เจ• เจฎเฉˆเจŸเฉเจฐเจฟเจ• เจฒเจˆ เจ…เจธเฉ€เจ‚ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฆเฉ‡ เจ‡เจคเจฟเจนเจพเจธ เจจเฉ‚เฉฐ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจ‰เจน. เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจ…เจธเฉ€เจ‚ "เจฎเฉˆเจจเฉเจ…เจฒ" เจฎเฉ‹เจก เจตเจฟเฉฑเจš เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจคเฉเจธเฉ€เจ‚ MLflow API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจตเฉ€ เจธเฉˆเฉฑเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

6. เจฎเจพเจกเจฒ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเฉ‹

เจธเจพเจกเฉ‡ เจฎเจพเจกเจฒ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจน เจซเฉˆเจธเจฒเจพ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ•เจฟ เจ‡เจน เจฒเฉœเจพเจˆ เจฒเจˆ เจคเจฟเจ†เจฐ เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจฒเจˆ เจ…เฉฑเจ—เฉ‡ เจตเจงเจฆเฉ‡ เจนเจพเจ‚, เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‰เจธ เจฒเจพเจ‚เจš เจจเฉ‚เฉฐ เจšเฉเจฃเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธเจฆเฉ€ เจธเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœ เจนเฉˆ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจชเจฟเจ›เจฒเฉ‡ เจชเฉˆเจฐเฉ‡ เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ) เจ…เจคเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจšเจฒเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจพเจ‚.

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจธเจพเจกเฉ‡ เจฎเจพเจกเจฒ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจพเจฎ เจฆเฉ‡เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เจธเจฆเจพ เจ‡เฉฑเจ• เจธเฉฐเจธเจ•เจฐเจฃ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‰เจธเฉ‡ เจจเจพเจฎ เจฆเฉ‡ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจฎเจพเจกเจฒ เจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจ†เจชเจฃเฉ‡ เจ†เจช เจ…เฉฑเจชเจ—เฉเจฐเฉ‡เจก เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพเฅค

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจนเจฐเฉ‡เจ• เจฎเจพเจกเจฒ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเจฐเจฃเจจ เจœเฉ‹เฉœ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจคเจฟเฉฐเจจ เจฐเจพเจœเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• (เจธเจŸเฉ‡เจœเจฟเฉฐเจ—, เจ‰เจคเจชเจพเจฆเจจ, เจชเฉเจฐเจพเจฒเฉ‡เจ–) เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚; เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš, API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡, เจ…เจธเฉ€เจ‚ เจ‡เจนเจจเจพเจ‚ เจฐเจพเจœเจพเจ‚ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจ•เจฟ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ, เจตเจพเจงเฉ‚ เจฒเจšเจ•เจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจธเจพเจฐเฉ‡ เจฎเจพเจกเจฒเจพเจ‚ เจคเฉฑเจ• เจ†เจธเจพเจจ เจชเจนเฉเฉฐเจš เจตเฉ€ เจนเฉˆ

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ

MLOps - เจ•เฉเฉฑเจ• เจ•เจฟเจคเจพเจฌ, เจ…เจงเจฟเจ†เจ‡ 1

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจชเจฟเจ›เจฒเฉ‡ เจชเฉˆเจฐเฉ‡ เจตเจฟเฉฑเจš, เจธเจพเจฐเฉ‡ เจ“เจชเจฐเฉ‡เจธเจผเจจ API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เฉ€เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

7. เจฎเจพเจกเจฒ เจคเฉˆเจจเจพเจค เจ•เจฐเฉ‹

เจ‡เจธ เจชเฉœเจพเจ… 'เจคเฉ‡, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ‡เฉฑเจ• เจธเจฟเจ–เจฒเจพเจˆ เจชเฉเจฐเจพเจชเจค (เจ•เฉ‡เจฐเจพ) เจฎเจพเจกเจฒ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจตเจฐเจค เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ‡เจธเจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ:

class SegmentationModel:
    def __init__(self, tracking_uri, model_name):

        self.registry = RemoteRegistry(tracking_uri=tracking_uri)
        self.model_name = model_name
        self.model = self.build_model(model_name)

    def get_latest_model(self, model_name):
        registered_models = self.registry.get_registered_model(model_name)
        last_model = self.registry.get_last_model(registered_models)
        local_path = self.registry.download_artifact(last_model.run_id, 'model', './')
        return local_path

    def build_model(self, model_name):
        local_path = self.get_latest_model(model_name)

        return mlflow.keras.load_model(local_path)

    def predict(self, image):
        image = self.preprocess(image)
        result = self.model.predict(image)
        return self.postprocess(result)

    def preprocess(self, image):
        image = cv2.resize(image, (256, 256))
        image = image / 255.
        image = np.expand_dims(image, 0)
        return image

    def postprocess(self, result):
        return result

เจ‡เฉฑเจฅเฉ‡ self.registry เจธเฉเจตเจฟเจงเจพ เจฒเจˆ, mlflow.tracking.MlflowClient เจ‰เฉฑเจคเฉ‡ เจฆเฉเจฌเจพเจฐเจพ เจ‡เฉฑเจ• เจ›เฉ‹เจŸเจพ เจฐเฉˆเจชเจฐ เจนเฉˆเฅค เจฌเจฟเฉฐเจฆเฉ‚ เจ‡เจน เจนเฉˆ เจ•เจฟ เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจฐเจฟเจฎเฉ‹เจŸ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจเจ•เจธเฉˆเจธ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‰เฉฑเจฅเฉ‡ เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจจเจพเจฎ เจ…เจคเฉ‡ เจจเจตเฉ€เจจเจคเจฎ เจ‰เจคเจชเจพเจฆเจจ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจฒเฉฑเจญเจฆเจพ เจนเจพเจ‚. เจ…เฉฑเจ—เฉ‡, เจฎเฉˆเจ‚ เจ†เจฐเจŸเฉ€เจซเฉˆเจ•เจŸ เจจเฉ‚เฉฐ เจธเจฅเจพเจจเจ• เจคเฉŒเจฐ 'เจคเฉ‡ ./model เจซเฉ‹เจฒเจกเจฐ เจตเจฟเฉฑเจš เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ mlflow.keras.load_model(local_path) เจคเฉ‹เจ‚ เจฎเจพเจกเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเจพเจ‚เฅค เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจฎเจพเจกเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค CV (ML) เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจฎเจพเจกเจฒ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจจเจตเฉ‡เจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

เจ…เฉฐเจค เจตเจฟเฉฑเจš

เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจธเจฟเจธเจŸเจฎ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเจพ เจœเฉ‹ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

  • เจ•เฉ‡เจ‚เจฆเจฐเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ ML เจฎเจพเจกเจฒเจพเจ‚, เจธเจฟเจ–เจฒเจพเจˆ เจฆเฉ€ เจชเฉเจฐเจ—เจคเฉ€ เจ…เจคเฉ‡ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเจŸเฉ‹เจฐ เจ•เจฐเฉ‹;
  • เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ‡เฉฑเจ• เจตเจฟเจ•เจพเจธ เจตเจพเจคเจพเจตเจฐเจฃ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค;
  • เจฎเจพเจกเจฒเจพเจ‚ 'เจคเฉ‡ เจ•เฉฐเจฎ เจฆเฉ€ เจชเฉเจฐเจ—เจคเฉ€ เจฆเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ…เจคเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ;
  • เจฎเจพเจกเจฒเจพเจ‚ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเจพ เจธเฉฐเจธเจ•เจฐเจฃ เจ…เจคเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐเจจเจพ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆ;
  • เจจเจคเฉ€เจœเฉ‡ เจตเจพเจฒเฉ‡ เจฎเจพเจกเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉˆเฅค

เจ‡เจน เจ‰เจฆเจพเจนเจฐเจจ เจ‡เฉฑเจ• เจ–เจฟเจกเฉŒเจฃเจพ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ‡ เจ†เจชเจฃเฉ‡ เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจฌเจฟเฉฐเจฆเฉ‚ เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเฉ‡ เจฎเฉเจฒเจพเจ‚เจ•เจฃ เจฆเจพ เจธเจตเฉˆเจšเจพเจฒเจจ เจ…เจคเฉ‡ เจฎเจพเจกเจฒเจพเจ‚ เจฆเฉ€ เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจ (เจ•เฉเจฐเจฎเจตเจพเจฐ เจ…เฉฐเจ• 5 เจ…เจคเฉ‡ 6) เจธเจผเจพเจฎเจฒ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ เจœเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจกเฉ‡เจŸเจพเจธเฉˆเจŸเจพเจ‚ เจฆเจพ เจธเฉฐเจธเจ•เจฐเจฃ เจœเฉ‹เฉœเฉ‹เจ—เฉ‡, เจœเจพเจ‚ เจธเจผเจพเจ‡เจฆ เจ•เฉเจ เจนเฉ‹เจฐ? เจœเฉ‹ เจฌเจฟเฉฐเจฆเฉ‚ เจฎเฉˆเจ‚ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐ เจฐเจฟเจนเจพ เจธเฉ€ เจ‰เจน เจ‡เจน เจนเฉˆ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฎเฉเฉฑเจšเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ MLOps เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ, MLflow เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจ…เฉฐเจค เจฆเจพ เจธเจพเจงเจจ เจนเฉˆ.

เจฒเจฟเจ–เฉ‹ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจฟเจนเฉœเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจ†เจˆเจ†เจ‚ เจœเฉ‹ เจฎเฉˆเจ‚ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚?
เจธเจฟเจธเจŸเจฎ เจจเฉ‚เฉฐ เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจฒเฉ‹เฉœเจพเจ‚ เจชเฉ‚เจฐเฉ€เจ†เจ‚ เจ•เจฐเจจ เจฒเจˆ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจตเจฟเฉฑเจš เจ•เฉ€ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹เจ—เฉ‡?
เจธเจพเจฐเฉ€เจ†เจ‚ เจœเจพเจ‚ เจ•เฉเจ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจนเฉœเฉ‡ เจธเจพเจงเจจ เจ…เจคเฉ‡ เจชเจนเฉเฉฐเจš เจตเจฐเจคเจฆเฉ‡ เจนเฉ‹?

PS เจฎเฉˆเจ‚ เจ•เฉเจ เจฒเจฟเฉฐเจ• เจ›เฉฑเจกเจพเจ‚เจ—เจพ:
github เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ - https://github.com/simbakot/mlflow_example
MLflow - https://mlflow.org/
เจธเจตเจพเจฒเจพเจ‚ เจฒเจˆ เจฎเฉ‡เจฐเฉ‡ เจ•เฉฐเจฎ เจฆเฉ€ เจˆเจฎเฉ‡เจฒ - [เจˆเจฎเฉ‡เจฒ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค]

เจธเจพเจกเฉ€ เจ•เฉฐเจชเจจเฉ€ เจธเจฎเฉ‡เจ‚-เจธเจฎเฉ‡เจ‚ 'เจคเฉ‡ IT เจฎเจพเจนเจฟเจฐเจพเจ‚ เจฒเจˆ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฎเจพเจ—เจฎเจพเจ‚ เจฆเฉ€ เจฎเฉ‡เจœเจผเจฌเจพเจจเฉ€ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ: 8 เจœเฉเจฒเจพเจˆ เจจเฉ‚เฉฐ 19:00 เจฎเจพเจธเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจ‡เฉฑเจ• เจ”เจจเจฒเจพเจˆเจจ เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• CV เจฎเฉ€เจŸเจฟเฉฐเจ— เจนเฉ‹เจตเฉ‡เจ—เฉ€, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจนเจฟเฉฑเจธเจพ เจฒเฉˆ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจ เจ‡เฉฑเจฅเฉ‡ .

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹