diff --git a/404.html b/404.html index 062664f6..dcee6163 100644 --- a/404.html +++ b/404.html @@ -7,13 +7,13 @@ - - + +
본문으로 건너뛰기

페이지를 찾을 수 없습니다.

원하는 페이지를 찾을 수 없습니다.

사이트 관리자에게 링크가 깨진 것을 알려주세요.

- - + + \ No newline at end of file diff --git a/assets/js/01a9496d.793c20d4.js b/assets/js/01a9496d.793c20d4.js deleted file mode 100644 index fe194040..00000000 --- a/assets/js/01a9496d.793c20d4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2416],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var a=r.createContext({}),s=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(a.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,a=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(n),f=i,m=d["".concat(a,".").concat(f)]||d[f]||u[f]||o;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=f;var p={};for(var a in t)hasOwnProperty.call(t,a)&&(p[a]=t[a]);p.originalType=e,p[d]="string"==typeof e?e:i,l[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var r=n(7462),i=(n(7294),n(3905));const o={title:"1. What is MLOps?",description:"Introduction to MLOps",sidebar_position:1,date:'2021-1./img to MLOps"',lastmod:new Date("2022-03-05T00:00:00.000Z"),contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"introduction/intro",id:"introduction/intro",title:"1. What is MLOps?",description:"Introduction to MLOps",source:"@site/docs/introduction/intro.md",sourceDirName:"introduction",slug:"/introduction/intro",permalink:"/docs/introduction/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/introduction/intro.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. What is MLOps?",description:"Introduction to MLOps",sidebar_position:1,date:'2021-1./img to MLOps"',lastmod:"2022-03-05T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",next:{title:"2. Levels of MLOps",permalink:"/docs/introduction/levels"}},a={},s=[{value:"Machine Learning Project",id:"machine-learning-project",level:2},{value:"Devops",id:"devops",level:2},{value:"DevOps",id:"devops-1",level:3},{value:"Silo Effect",id:"silo-effect",level:3},{value:"CI/CD",id:"cicd",level:3},{value:"MLOps",id:"mlops",level:2},{value:"1) ML+Ops",id:"1-mlops",level:3},{value:"Rule Based",id:"rule-based",level:4},{value:"Machine Learning",id:"machine-learning",level:4},{value:"Deep Learning",id:"deep-learning",level:4},{value:"2) ML -> Ops",id:"2-ml---ops",level:3},{value:"3) \uacb0\ub860",id:"3-\uacb0\ub860",level:3}],c={toc:s},d="wrapper";function u(e){let{components:t,...o}=e;return(0,i.kt)(d,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"machine-learning-project"},"Machine Learning Project"),(0,i.kt)("p",null,"2012\ub144 Alexnet \uc774\ud6c4 CV, NLP\ub97c \ube44\ub86f\ud558\uc5ec \ub370\uc774\ud130\uac00 \uc874\uc7ac\ud558\ub294 \ub3c4\uba54\uc778\uc774\ub77c\uba74 \uc5b4\ub514\uc11c\ub4e0 \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc744 \ub3c4\uc785\ud558\uace0\uc790 \ud558\uc600\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ub525\ub7ec\ub2dd\uacfc \uba38\uc2e0\ub7ec\ub2dd\uc740 AI\ub77c\ub294 \ub2e8\uc5b4\ub85c \ubb36\uc774\uba70 \ubd88\ub838\uace0 \ub9ce\uc740 \ub9e4\uccb4\uc5d0\uc11c AI\uc758 \ud544\uc694\uc131\uc744 \uc678\ucce4\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ubb34\uc218\ud788 \ub9ce\uc740 \uae30\uc5c5\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \uc218\ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\ub97c \uc9c4\ud589\ud558\uc600\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uadf8 \uacb0\uacfc\ub294 \uc5b4\ub5bb\uac8c \ub418\uc5c8\uc744\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uc5d8\ub9ac\uba3c\ud2b8 AI\uc758 \uc74c\ubcd1\ucc2c \ub3d9\ubd81\uc544 \uc9c0\uc5ed \ucd1d\uad04\ucc45\uc784\uc790\ub294 ",(0,i.kt)("a",{parentName:"p",href:"https://zdnet.co.kr/view/?no=20200611062002"},(0,i.kt)("em",{parentName:"a"},'"10\uac1c \uae30\uc5c5\uc5d0 AI \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud55c\ub2e4\uba74 \uadf8\uc911 9\uac1c\ub294 \ucee8\uc149\uac80\uc99d(POC)\ub9cc \ud558\ub2e4 \ub05d\ub09c\ub2e4"')),"\uace0 \ub9d0\ud588\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ucc98\ub7fc \ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc740 \uc774 \ubb38\uc81c\ub97c \ud480 \uc218 \uc788\uc744 \uac83 \uac19\ub2e4\ub294 \uac00\ub2a5\uc131\ub9cc\uc744 \ubcf4\uc5ec\uc8fc\uace0 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774 \uc2dc\uae30\ucbe4\uc5d0 ",(0,i.kt)("a",{parentName:"p",href:"https://www.aifutures.org/2021/ai-winter-is-coming/"},"AI\uc5d0 \ub2e4\uc2dc \uaca8\uc6b8"),"\uc774 \ub2e4\uac00\uc624\uace0 \uc788\ub2e4\ub294 \uc804\ub9dd\ub3c4 \ub098\uc624\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc65c \ud504\ub85c\uc81d\ud2b8 \ub300\ubd80\ubd84\uc774 \ucee8\uc149\uac80\uc99d(POC) \ub2e8\uacc4\uc5d0\uc11c \ub05d\ub0ac\uc744\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd \ucf54\ub4dc\ub9cc\uc73c\ub85c\ub294 \uc2e4\uc81c \uc11c\ube44\uc2a4\ub97c \uc6b4\uc601\ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc2e4\uc81c \uc11c\ube44\uc2a4 \ub2e8\uacc4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc758 \ucf54\ub4dc\uac00 \ucc28\uc9c0\ud558\ub294 \ubd80\ubd84\uc740 \uc0dd\uac01\ubcf4\ub2e4 \ud06c\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ub2e8\uc21c\ud788 \ubaa8\ub378\uc758 \uc131\ub2a5\ub9cc\uc774 \uc544\ub2cc \ub2e4\ub978 \ub9ce\uc740 \ubd80\ubd84\uc744 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uad6c\uae00\uc740 \uc774\ub7f0 \ubb38\uc81c\ub97c 2015\ub144 ",(0,i.kt)("a",{parentName:"p",href:"https://proceedings.neurips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf"},"Hidden Technical Debt in Machine Learning Systems"),"\uc5d0\uc11c \uc9c0\uc801\ud55c \ubc14 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \uc774 \ub17c\ubb38\uc774 \ub098\uc62c \ub2f9\uc2dc\uc5d0\ub294 \uc544\uc9c1 \ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \ub525\ub7ec\ub2dd\uacfc \uba38\uc2e0\ub7ec\ub2dd\uc758 \uac00\ub2a5\uc131\uc744 \uc785\uc99d\ud558\uae30 \ubc14\uc05c \uc2dc\uae30\uc600\uae30 \ub54c\ubb38\uc5d0, \ub17c\ubb38\uc774 \uc9c0\uc801\ud558\ub294 \ubc14\uc5d0 \ub9ce\uc740 \uc8fc\uc758\ub97c \uae30\uc6b8\uc774\uc9c0\ub294 \uc54a\uc558\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub9ac\uace0 \uba87 \ub144\uc774 \uc9c0\ub09c \ud6c4 \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc740 \uac00\ub2a5\uc131\uc744 \uc785\uc99d\ud574\ub0b4\uc5b4, \uc774\uc81c \uc0ac\ub78c\ub4e4\uc740 \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0 \uc801\uc6a9\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \uace7 \ub9ce\uc740 \uc0ac\ub78c\uc774 \uc2e4\uc81c \uc11c\ube44\uc2a4\ub294 \uc27d\uc9c0 \uc54a\ub2e4\ub294 \uac83\uc744 \uae68\ub2ec\uc558\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"devops"},"Devops"),(0,i.kt)("p",null,"MLOps\ub294 \uc774\uc804\uc5d0 \uc5c6\ub358 \uc0c8\ub85c\uc6b4 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c DevOps\ub77c\uace0 \ubd88\ub9ac\ub294 \uac1c\ubc1c \ubc29\ubc95\ub860\uc5d0\uc11c \ud30c\uc0dd\ub41c \ub2e8\uc5b4\uc785\ub2c8\ub2e4. \uadf8\ub807\uae30\uc5d0 DevOps\ub97c \uc774\ud574\ud55c\ub2e4\uba74 MLOps\ub97c \uc774\ud574\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"devops-1"},"DevOps"),(0,i.kt)("p",null,"DevOps\ub294 Development(\uac1c\ubc1c)\uc640 Operations(\uc6b4\uc601)\uc758 \ud569\uc131\uc5b4\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc758 \uac1c\ubc1c(Development)\uacfc \uc6b4\uc601(Operations)\uc758 \ud569\uc131\uc5b4\ub85c\uc11c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc790\uc640 \uc815\ubcf4\uae30\uc220 \uc804\ubb38\uac00 \uac04\uc758 \uc18c\ud1b5, \ud611\uc5c5 \ubc0f \ud1b5\ud569\uc744 \uac15\uc870\ud558\ub294 \uac1c\ubc1c \ud658\uacbd\uc774\ub098 \ubb38\ud654\ub97c \ub9d0\ud569\ub2c8\ub2e4.\nDevOps\uc758 \ubaa9\uc801\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \uc870\uc9c1\uacfc \uc6b4\uc601 \uc870\uc9c1\uac04\uc758 \uc0c1\ud638 \uc758\uc874\uc801 \ub300\uc751\uc774\uba70 \uc870\uc9c1\uc774 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uacfc \uc11c\ube44\uc2a4\ub97c \ube60\ub978 \uc2dc\uac04\uc5d0 \uac1c\ubc1c \ubc0f \ubc30\ud3ec\ud558\ub294 \uac83\uc744 \ubaa9\uc801\uc73c\ub85c \ud569\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"silo-effect"},"Silo Effect"),(0,i.kt)("p",null,"\uadf8\ub7fc \uac04\ub2e8\ud55c \uc0c1\ud669 \uc124\uba85\uc744 \ud1b5\ud574 DevOps\uac00 \uc65c \ud544\uc694\ud55c\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc11c\ube44\uc2a4 \ucd08\uae30\uc5d0\ub294 \uc9c0\uc6d0\ud558\ub294 \uae30\ub2a5\uc774 \ub9ce\uc9c0 \uc54a\uc73c\uba70 \ud300 \ub610\ub294 \ud68c\uc0ac\uc758 \uaddc\ubaa8\uac00 \uc791\uc2b5\ub2c8\ub2e4. \uc774\ub54c\uc5d0\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc758 \uad6c\ubd84\uc774 \uc5c6\uac70\ub098 \uc791\uc740 \uaddc\ubaa8\uc758 \ud300\uc73c\ub85c \uad6c\ubd84\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ud575\uc2ec\uc740 \uaddc\ubaa8\uac00 \uc791\ub2e4\ub294 \uac83\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub54c\ub294 \uc11c\ub85c \uc18c\ud1b5\ud560 \uc218 \uc788\ub294 \uc811\uc810\uc774 \ub9ce\uace0, \uc9d1\uc911\ud574\uc57c \ud558\ub294 \uc11c\ube44\uc2a4\uac00 \uc801\uae30 \ub54c\ubb38\uc5d0 \ube60\ub974\uac8c \uc11c\ube44\uc2a4\ub97c \uac1c\uc120\ud574 \ub098\uac08 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \uc11c\ube44\uc2a4\uc758 \uaddc\ubaa8\uac00 \ucee4\uc9c8\uc218\ub85d \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc740 \ubd84\ub9ac\ub418\uace0 \uc11c\ub85c \uc18c\ud1b5\ud560 \uc218 \uc788\ub294 \ucc44\ub110\uc758 \ubb3c\ub9ac\uc801\uc778 \ud55c\uacc4\uac00 \uc624\uac8c \ub429\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\ub978 \ud300\uacfc \ud568\uaed8\ud558\ub294 \ubbf8\ud305\uc5d0 \ud300\uc6d0 \uc804\uccb4\uac00 \ubbf8\ud305\uc744 \ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \uac01 \ud300\uc758 \ud300\uc7a5 \ud639\uc740 \uc18c\uc218\uc758 \uc2dc\ub2c8\uc5b4\ub9cc \ucc38\uc11d\ud558\uc5ec \ubbf8\ud305\uc744 \uc9c4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7f0 \uc18c\ud1b5 \ucc44\ub110\uc758 \ud55c\uacc4\ub294 \ud544\uc5f0\uc801\uc73c\ub85c \uc18c\ud1b5\uc758 \ubd80\uc7ac\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4. \uadf8\ub7ec\ub2e4 \ubcf4\uba74 \uac1c\ubc1c\ud300\uc740 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\ub4e4\uc744 \uacc4\uc18d\ud574\uc11c \uac1c\ubc1c\ud558\uace0 \uc6b4\uc601\ud300 \uc785\uc7a5\uc5d0\uc11c\ub294 \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \uae30\ub2a5\uc774 \ubc30\ud3ec \uc2dc \uc7a5\uc560\ub97c \uc77c\uc73c\ud0a4\ub294 \ub4f1 \uc5ec\ub7ec \ubb38\uc81c\uac00 \uc0dd\uae30\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc704\uc640 \uac19\uc740 \uc0c1\ud669\uc774 \ubc18\ubcf5\ub418\uba74 \uc870\uc9c1 \uc774\uae30\uc8fc\uc758\ub77c\uace0 \ubd88\ub9ac\ub294 \uc0ac\uc77c\ub85c \ud604\uc0c1\uc774 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"silo",src:n(6651).Z,width:"892",height:"498"})),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\uc0ac\uc77c\ub85c(silo)\ub294 \uace1\uc2dd\uc774\ub098 \uc0ac\ub8cc\ub97c \uc800\uc7a5\ud558\ub294 \uad74\ub69d \ubaa8\uc591\uc758 \ucc3d\uace0\ub97c \uc758\ubbf8\ud55c\ub2e4. \uc0ac\uc77c\ub85c\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc874\uc7ac\ud558\uba70 \uc800\uc7a5\ub418\ub294 \ubb3c\ud488\uc774 \uc11c\ub85c \uc11e\uc774\uc9c0 \uc54a\ub3c4\ub85d \ucca0\uc800\ud788 \uad00\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc900\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc0ac\uc77c\ub85c \ud6a8\uacfc(Organizational Silos Effect)\ub294 \uc870\uc9c1 \ubd80\uc11c \uac04\uc5d0 \uc11c\ub85c \ud611\ub825\ud558\uc9c0 \uc54a\uace0 \ub0b4\ubd80 \uc774\uc775\ub9cc\uc744 \ucd94\uad6c\ud558\ub294 \ud604\uc0c1\uc744 \uc758\ubbf8\ud55c\ub2e4. \uc870\uc9c1 \ub0b4\uc5d0\uc11c \uac1c\ubcc4 \ubd80\uc11c\ub07c\ub9ac \uc11c\ub85c \ub2f4\uc744 \uc313\uace0 \uac01\uc790\uc758 \uc774\uc775\uc5d0\ub9cc \ubab0\ub450\ud558\ub294 \ubd80\uc11c \uc774\uae30\uc8fc\uc758\ub97c \uc77c\uceeb\ub294\ub2e4.")),(0,i.kt)("p",null,"\uc0ac\uc77c\ub85c \ud604\uc0c1\uc740 \uc11c\ube44\uc2a4 \ud488\uc9c8\uc758 \uc800\ud558\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc0ac\uc77c\ub85c \ud604\uc0c1\uc744 \ud574\uacb0\ud558\uae30 \uc704\ud574 \ub098\uc628 \uac83\uc774 \ubc14\ub85c DevOps\uc785\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"cicd"},"CI/CD"),(0,i.kt)("p",null,"Continuous Integration(CI) \uc640 Continuous Delivery (CD)\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc758 \uc7a5\ubcbd\uc744 \ud574\uc81c\ud558\uae30 \uc704\ud55c \uad6c\uccb4\uc801\uc778 \ubc29\ubc95\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cicd",src:n(7430).Z,width:"1400",height:"299"})),(0,i.kt)("p",null,"\uc774 \ubc29\ubc95\uc744 \ud1b5\ud574\uc11c \uac1c\ubc1c\ud300\uc5d0\uc11c\ub294 \uc6b4\uc601\ud300\uc758 \ud658\uacbd\uc744 \uc774\ud574\ud558\uace0 \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c \uc911\uc778 \uae30\ub2a5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\uae4c\uc9c0 \uc774\uc5b4\uc9c8 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc6b4\uc601\ud300\uc740 \uac80\uc99d\ub41c \uae30\ub2a5 \ub610\ub294 \uac1c\uc120\ub41c \uc81c\ud488\uc744 \ub354 \uc790\uc8fc \ubc30\ud3ec\ud574 \uace0\uac1d\uc758 \uc81c\ud488 \uacbd\ud5d8\uc744 \uc0c1\uc2b9\uc2dc\ud0b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \uc885\ud569\ud558\uc790\uba74 DevOps\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300 \uac04\uc758 \ubb38\uc81c\uac00 \uc788\uc5c8\uace0 \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ubc29\ubc95\ub860\uc785\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"mlops"},"MLOps"),(0,i.kt)("h3",{id:"1-mlops"},"1) ML+Ops"),(0,i.kt)("p",null,"MLOps\ub294 Machine Learning \uacfc Operations\uc758 \ud569\uc131\uc5b4\ub85c DevOps\uc5d0\uc11c Dev\uac00 ML\ub85c \ubc14\ub00c\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uc55e\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 DevOps\ub97c \ud1b5\ud574 MLOps\uac00 \ubb34\uc5c7\uc778\uc9c0 \uc9d0\uc791\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\u201cMLOps\ub294 \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300\uc758 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ubc29\ubc95\uc785\ub2c8\ub2e4.\u201d\n\uc774 \ub9d0\uc740 \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300 \uc0ac\uc774\uc5d0 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \uadf8\ub7fc \uc65c \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300\uc5d0\ub294 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc744\uae4c\uc694? \ub450 \ud300 \uac04\uc758 \ubb38\uc81c\ub97c \uc54c\uc544\ubcf4\uae30 \uc704\ud574\uc11c \ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc744 \uc608\uc2dc\ub85c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"rule-based"},"Rule Based"),(0,i.kt)("p",null,"\ucc98\uc74c \ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc744 \ub9cc\ub4dc\ub294 \uacbd\uc6b0 \uac04\ub2e8\ud55c \uaddc\uce59\uc744 \uae30\ubc18\uc73c\ub85c \uc544\uc774\ud15c\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c 1\uc8fc\uc77c\uac04 \ud310\ub9e4\ub7c9\uc774 \uac00\uc7a5 \ub9ce\uc740 \uc21c\uc11c\ub300\ub85c \ubcf4\uc5ec\uc8fc\ub294 \uc2dd\uc758 \ubc29\uc2dd\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc774 \ubc29\uc2dd\uc73c\ub85c \ubaa8\ub378\uc744 \uc815\ud55c\ub2e4\uba74 \ud2b9\ubcc4\ud55c \uc774\uc720\uac00 \uc5c6\ub294 \uc774\uc0c1 \ubaa8\ub378\uc758 \uc218\uc815\uc774 \ud544\uc694 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"machine-learning"},"Machine Learning"),(0,i.kt)("p",null,"\uc11c\ube44\uc2a4\uc758 \uaddc\ubaa8\uac00 \uc870\uae08 \ucee4\uc9c0\uace0 \ub85c\uadf8 \ub370\uc774\ud130\uac00 \ub9ce\uc774 \uc313\uc778\ub2e4\uba74 \uc774\ub97c \uc774\uc6a9\ud574 \uc544\uc774\ud15c \uae30\ubc18 \ud639\uc740 \uc720\uc800 \uae30\ubc18\uc758 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774\ub54c \ubaa8\ub378\uc740 \uc815\ud574\uc9c4 \uc8fc\uae30\uc5d0 \ub530\ub77c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5 \ud6c4 \uc7ac\ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"deep-learning"},"Deep Learning"),(0,i.kt)("p",null,"\uac1c\uc778\ud654 \ucd94\ucc9c\uc5d0 \ub300\ud55c \uc694\uad6c\uac00 \ub354 \ucee4\uc9c0\uace0 \ub354 \uc88b\uc740 \uc131\ub2a5\uc744 \ub0b4\ub294 \ubaa8\ub378\uc744 \ud544\uc694\ud574\uc9c8 \uacbd\uc6b0 \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \uc774\ub54c \ub9cc\ub4dc\ub294 \ubaa8\ub378\uc740 \uba38\uc2e0\ub7ec\ub2dd\uacfc \uac19\uc774 \uc815\ud574\uc9c4 \uc8fc\uae30\uc5d0 \ub530\ub77c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5 \ud6c4 \uc7ac\ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"graph",src:n(2994).Z,width:"752",height:"582"})),(0,i.kt)("p",null,"\uc704\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uc744 x\ucd95\uc744 \ubaa8\ub378\uc758 \ubcf5\uc7a1\ub3c4, y\ucd95\uc744 \ubaa8\ub378\uc758 \uc131\ub2a5\uc73c\ub85c \ub450\uace0 \uadf8\ub798\ud504\ub85c \ud45c\ud604\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf5\uc7a1\ub3c4\uac00 \uc62c\ub77c\uac08 \ub54c \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \uc62c\ub77c\uac00\ub294 \uc0c1\uc2b9 \uad00\uacc4\ub97c \uac16\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c \ub525\ub7ec\ub2dd\uc73c\ub85c \ub118\uc5b4\uac08 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc774 \uc0c8\ub85c \uc0dd\uae30\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ub9cc\uc57d \uad00\ub9ac\ud574\uc57c\ud560 \ubaa8\ub378\uc774 \uc801\ub2e4\uba74 \uc11c\ub85c \ud611\uc5c5\uc744 \ud1b5\ud574\uc11c \ucda9\ubd84\ud788 \ud574\uacb0\ud560 \uc218 \uc788\uc9c0\ub9cc \uac1c\ubc1c\ud574\uc57c \ud560 \ubaa8\ub378\uc774 \ub9ce\uc544\uc9c4\ub2e4\uba74 DevOps\uc758 \uacbd\uc6b0\uc640 \uac19\uc774 \uc0ac\uc77c\ub85c \ud604\uc0c1\uc774 \ub098\ud0c0\ub098\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"DevOps\uc758 \ubaa9\ud45c\uc640 \ub9de\ucdb0\uc11c \uc0dd\uac01\ud574\ubcf4\uba74 MLOps\uc758 \ubaa9\ud45c\ub294 \uac1c\ubc1c\ud55c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \uae30\ub2a5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 DevOps\uc758 \ubaa9\ud45c\uc600\ub2e4\uba74, MLOps\uc758 \ubaa9\ud45c\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"2-ml---ops"},"2) ML -> Ops"),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \ucd5c\uadfc \ub098\uc624\uace0 \uc788\ub294 MLOps \uad00\ub828 \uc81c\ud488\uacfc \uc124\uba85\uc744 \ubcf4\uba74 \uaf2d \uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ubaa9\ud45c\ub9cc\uc744 \ub300\uc0c1\uc73c\ub85c \ud558\uace0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uc5b4\ub5a4 \uacbd\uc6b0\uc5d0\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \ub9cc\ub4e0 \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \uc9c1\uc811 \uc6b4\uc601\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub824\uace0 \ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ub2c8\uc988\ub294 \ucd5c\uadfc \uba38\uc2e0\ub7ec\ub2dd \ud504\ub85c\uc81d\ud2b8\uac00 \uc9c4\ud589\ub418\ub294 \uacfc\uc815\uc5d0\uc11c \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc758 \uacbd\uc6b0 \uc6b4\uc601\uc5d0\uc11c \uac04\ub2e8\ud55c \ubaa8\ub378\ubd80\ud130 \uc2dc\uc791\ud574 \uc6b4\uc601\ud560 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc790\uc5f0\uc5b4, \uc774\ubbf8\uc9c0\uc640 \uac19\uc740 \uacf3\uc5d0\uc11c\ub294 \uaddc\uce59 \uae30\ubc18\uc758 \ubaa8\ub378\ubcf4\ub2e4\ub294 \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud574 \uc8fc\uc5b4\uc9c4 \ud0dc\uc2a4\ud06c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\ub294\uc9c0 \uac80\uc99d(POC)\ub97c \uc120\ud589\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uac80\uc99d\uc774 \ub05d\ub09c \ud504\ub85c\uc81d\ud2b8\ub294 \uc774\uc81c \uc11c\ube44\uc2a4\ub97c \uc704\ud55c \uc6b4\uc601 \ud658\uacbd\uc744 \uac1c\ubc1c\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uba38\uc2e0\ub7ec\ub2dd \ud300 \ub0b4\uc758 \uc790\uccb4 \uc5ed\ub7c9\uc73c\ub85c\ub294 \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc27d\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574\uc11c MLOps\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"3-\uacb0\ub860"},"3) \uacb0\ub860"),(0,i.kt)("p",null,"\uc694\uc57d\ud558\uc790\uba74 MLOps\ub294 \ub450 \uac00\uc9c0 \ubaa9\ud45c\uac00 \uc788\uc2b5\ub2c8\ub2e4.\n\uc55e\uc5d0\uc11c \uc124\uba85\ud55c MLOps\ub294 ML+Ops \ub85c \ub450 \ud300\uc758 \uc0dd\uc0b0\uc131 \ud5a5\uc0c1\uc744 \uc704\ud55c \uac83\uc774\uc600\uc2b5\ub2c8\ub2e4.\n\ubc18\uba74, \ub4a4\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uc740 ML->Ops \ub85c \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \uc9c1\uc811 \uc6b4\uc601\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 \uac83\uc744 \ub9d0\ud569\ub2c8\ub2e4."))}u.isMDXComponent=!0},7430:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cicd-775808741b1fa127eadb1fce55de3dab.png"},2994:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/graph-7329fb49fdf8c0b00d3c186386b5860e.png"},6651:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/silo-3cd9f9bdf17c846f82fd0dde78e01052.png"}}]); \ No newline at end of file diff --git a/assets/js/01a9496d.b86e06da.js b/assets/js/01a9496d.b86e06da.js new file mode 100644 index 00000000..5b69d5fc --- /dev/null +++ b/assets/js/01a9496d.b86e06da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2416],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var a=r.createContext({}),s=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(a.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,a=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(n),f=i,m=d["".concat(a,".").concat(f)]||d[f]||u[f]||l;return n?r.createElement(m,o(o({ref:t},c),{},{components:n})):r.createElement(m,o({ref:t},c))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,o=new Array(l);o[0]=f;var p={};for(var a in t)hasOwnProperty.call(t,a)&&(p[a]=t[a]);p.originalType=e,p[d]="string"==typeof e?e:i,o[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var r=n(7462),i=(n(7294),n(3905));const l={title:"1. What is MLOps?",description:"Introduction to MLOps",sidebar_position:1,date:'2021-1./img to MLOps"',lastmod:new Date("2022-03-05T00:00:00.000Z"),contributors:["Jongseob Jeon"]},o=void 0,p={unversionedId:"introduction/intro",id:"introduction/intro",title:"1. What is MLOps?",description:"Introduction to MLOps",source:"@site/docs/introduction/intro.md",sourceDirName:"introduction",slug:"/introduction/intro",permalink:"/docs/introduction/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/introduction/intro.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. What is MLOps?",description:"Introduction to MLOps",sidebar_position:1,date:'2021-1./img to MLOps"',lastmod:"2022-03-05T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",next:{title:"2. Levels of MLOps",permalink:"/docs/introduction/levels"}},a={},s=[{value:"Machine Learning Project",id:"machine-learning-project",level:2},{value:"Devops",id:"devops",level:2},{value:"DevOps",id:"devops-1",level:3},{value:"Silo Effect",id:"silo-effect",level:3},{value:"CI/CD",id:"cicd",level:3},{value:"MLOps",id:"mlops",level:2},{value:"1) ML+Ops",id:"1-mlops",level:3},{value:"Rule Based",id:"rule-based",level:4},{value:"Machine Learning",id:"machine-learning",level:4},{value:"Deep Learning",id:"deep-learning",level:4},{value:"2) ML -> Ops",id:"2-ml---ops",level:3},{value:"3) \uacb0\ub860",id:"3-\uacb0\ub860",level:3}],c={toc:s},d="wrapper";function u(e){let{components:t,...l}=e;return(0,i.kt)(d,(0,r.Z)({},c,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"machine-learning-project"},"Machine Learning Project"),(0,i.kt)("p",null,"2012\ub144 Alexnet \uc774\ud6c4 CV, NLP\ub97c \ube44\ub86f\ud558\uc5ec \ub370\uc774\ud130\uac00 \uc874\uc7ac\ud558\ub294 \ub3c4\uba54\uc778\uc774\ub77c\uba74 \uc5b4\ub514\uc11c\ub4e0 \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc744 \ub3c4\uc785\ud558\uace0\uc790 \ud558\uc600\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ub525\ub7ec\ub2dd\uacfc \uba38\uc2e0\ub7ec\ub2dd\uc740 AI\ub77c\ub294 \ub2e8\uc5b4\ub85c \ubb36\uc774\uba70 \ubd88\ub838\uace0 \ub9ce\uc740 \ub9e4\uccb4\uc5d0\uc11c AI\uc758 \ud544\uc694\uc131\uc744 \uc678\ucce4\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ubb34\uc218\ud788 \ub9ce\uc740 \uae30\uc5c5\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \uc218\ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\ub97c \uc9c4\ud589\ud558\uc600\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uadf8 \uacb0\uacfc\ub294 \uc5b4\ub5bb\uac8c \ub418\uc5c8\uc744\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uc5d8\ub9ac\uba3c\ud2b8 AI\uc758 \uc74c\ubcd1\ucc2c \ub3d9\ubd81\uc544 \uc9c0\uc5ed \ucd1d\uad04\ucc45\uc784\uc790\ub294 ",(0,i.kt)("a",{parentName:"p",href:"https://zdnet.co.kr/view/?no=20200611062002"},(0,i.kt)("em",{parentName:"a"},'"10\uac1c \uae30\uc5c5\uc5d0 AI \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud55c\ub2e4\uba74 \uadf8\uc911 9\uac1c\ub294 \ucee8\uc149\uac80\uc99d(POC)\ub9cc \ud558\ub2e4 \ub05d\ub09c\ub2e4"')),"\uace0 \ub9d0\ud588\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ucc98\ub7fc \ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc740 \uc774 \ubb38\uc81c\ub97c \ud480 \uc218 \uc788\uc744 \uac83 \uac19\ub2e4\ub294 \uac00\ub2a5\uc131\ub9cc\uc744 \ubcf4\uc5ec\uc8fc\uace0 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774 \uc2dc\uae30\ucbe4\uc5d0 ",(0,i.kt)("a",{parentName:"p",href:"https://www.aifutures.org/2021/ai-winter-is-coming/"},"AI\uc5d0 \ub2e4\uc2dc \uaca8\uc6b8"),"\uc774 \ub2e4\uac00\uc624\uace0 \uc788\ub2e4\ub294 \uc804\ub9dd\ub3c4 \ub098\uc624\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc65c \ud504\ub85c\uc81d\ud2b8 \ub300\ubd80\ubd84\uc774 \ucee8\uc149\uac80\uc99d(POC) \ub2e8\uacc4\uc5d0\uc11c \ub05d\ub0ac\uc744\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd \ucf54\ub4dc\ub9cc\uc73c\ub85c\ub294 \uc2e4\uc81c \uc11c\ube44\uc2a4\ub97c \uc6b4\uc601\ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc2e4\uc81c \uc11c\ube44\uc2a4 \ub2e8\uacc4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc758 \ucf54\ub4dc\uac00 \ucc28\uc9c0\ud558\ub294 \ubd80\ubd84\uc740 \uc0dd\uac01\ubcf4\ub2e4 \ud06c\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ub2e8\uc21c\ud788 \ubaa8\ub378\uc758 \uc131\ub2a5\ub9cc\uc774 \uc544\ub2cc \ub2e4\ub978 \ub9ce\uc740 \ubd80\ubd84\uc744 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uad6c\uae00\uc740 \uc774\ub7f0 \ubb38\uc81c\ub97c 2015\ub144 ",(0,i.kt)("a",{parentName:"p",href:"https://proceedings.neurips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf"},"Hidden Technical Debt in Machine Learning Systems"),"\uc5d0\uc11c \uc9c0\uc801\ud55c \ubc14 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \uc774 \ub17c\ubb38\uc774 \ub098\uc62c \ub2f9\uc2dc\uc5d0\ub294 \uc544\uc9c1 \ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \ub525\ub7ec\ub2dd\uacfc \uba38\uc2e0\ub7ec\ub2dd\uc758 \uac00\ub2a5\uc131\uc744 \uc785\uc99d\ud558\uae30 \ubc14\uc05c \uc2dc\uae30\uc600\uae30 \ub54c\ubb38\uc5d0, \ub17c\ubb38\uc774 \uc9c0\uc801\ud558\ub294 \ubc14\uc5d0 \ub9ce\uc740 \uc8fc\uc758\ub97c \uae30\uc6b8\uc774\uc9c0\ub294 \uc54a\uc558\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub9ac\uace0 \uba87 \ub144\uc774 \uc9c0\ub09c \ud6c4 \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc740 \uac00\ub2a5\uc131\uc744 \uc785\uc99d\ud574\ub0b4\uc5b4, \uc774\uc81c \uc0ac\ub78c\ub4e4\uc740 \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0 \uc801\uc6a9\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \uace7 \ub9ce\uc740 \uc0ac\ub78c\uc774 \uc2e4\uc81c \uc11c\ube44\uc2a4\ub294 \uc27d\uc9c0 \uc54a\ub2e4\ub294 \uac83\uc744 \uae68\ub2ec\uc558\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"devops"},"Devops"),(0,i.kt)("p",null,"MLOps\ub294 \uc774\uc804\uc5d0 \uc5c6\ub358 \uc0c8\ub85c\uc6b4 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c DevOps\ub77c\uace0 \ubd88\ub9ac\ub294 \uac1c\ubc1c \ubc29\ubc95\ub860\uc5d0\uc11c \ud30c\uc0dd\ub41c \ub2e8\uc5b4\uc785\ub2c8\ub2e4. \uadf8\ub807\uae30\uc5d0 DevOps\ub97c \uc774\ud574\ud55c\ub2e4\uba74 MLOps\ub97c \uc774\ud574\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"devops-1"},"DevOps"),(0,i.kt)("p",null,"DevOps\ub294 Development(\uac1c\ubc1c)\uc640 Operations(\uc6b4\uc601)\uc758 \ud569\uc131\uc5b4\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc758 \uac1c\ubc1c(Development)\uacfc \uc6b4\uc601(Operations)\uc758 \ud569\uc131\uc5b4\ub85c\uc11c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc790\uc640 \uc815\ubcf4\uae30\uc220 \uc804\ubb38\uac00 \uac04\uc758 \uc18c\ud1b5, \ud611\uc5c5 \ubc0f \ud1b5\ud569\uc744 \uac15\uc870\ud558\ub294 \uac1c\ubc1c \ud658\uacbd\uc774\ub098 \ubb38\ud654\ub97c \ub9d0\ud569\ub2c8\ub2e4.\nDevOps\uc758 \ubaa9\uc801\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \uc870\uc9c1\uacfc \uc6b4\uc601 \uc870\uc9c1\uac04\uc758 \uc0c1\ud638 \uc758\uc874\uc801 \ub300\uc751\uc774\uba70 \uc870\uc9c1\uc774 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uacfc \uc11c\ube44\uc2a4\ub97c \ube60\ub978 \uc2dc\uac04\uc5d0 \uac1c\ubc1c \ubc0f \ubc30\ud3ec\ud558\ub294 \uac83\uc744 \ubaa9\uc801\uc73c\ub85c \ud569\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"silo-effect"},"Silo Effect"),(0,i.kt)("p",null,"\uadf8\ub7fc \uac04\ub2e8\ud55c \uc0c1\ud669 \uc124\uba85\uc744 \ud1b5\ud574 DevOps\uac00 \uc65c \ud544\uc694\ud55c\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc11c\ube44\uc2a4 \ucd08\uae30\uc5d0\ub294 \uc9c0\uc6d0\ud558\ub294 \uae30\ub2a5\uc774 \ub9ce\uc9c0 \uc54a\uc73c\uba70 \ud300 \ub610\ub294 \ud68c\uc0ac\uc758 \uaddc\ubaa8\uac00 \uc791\uc2b5\ub2c8\ub2e4. \uc774\ub54c\uc5d0\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc758 \uad6c\ubd84\uc774 \uc5c6\uac70\ub098 \uc791\uc740 \uaddc\ubaa8\uc758 \ud300\uc73c\ub85c \uad6c\ubd84\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ud575\uc2ec\uc740 \uaddc\ubaa8\uac00 \uc791\ub2e4\ub294 \uac83\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub54c\ub294 \uc11c\ub85c \uc18c\ud1b5\ud560 \uc218 \uc788\ub294 \uc811\uc810\uc774 \ub9ce\uace0, \uc9d1\uc911\ud574\uc57c \ud558\ub294 \uc11c\ube44\uc2a4\uac00 \uc801\uae30 \ub54c\ubb38\uc5d0 \ube60\ub974\uac8c \uc11c\ube44\uc2a4\ub97c \uac1c\uc120\ud574 \ub098\uac08 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \uc11c\ube44\uc2a4\uc758 \uaddc\ubaa8\uac00 \ucee4\uc9c8\uc218\ub85d \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc740 \ubd84\ub9ac\ub418\uace0 \uc11c\ub85c \uc18c\ud1b5\ud560 \uc218 \uc788\ub294 \ucc44\ub110\uc758 \ubb3c\ub9ac\uc801\uc778 \ud55c\uacc4\uac00 \uc624\uac8c \ub429\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\ub978 \ud300\uacfc \ud568\uaed8\ud558\ub294 \ubbf8\ud305\uc5d0 \ud300\uc6d0 \uc804\uccb4\uac00 \ubbf8\ud305\uc744 \ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \uac01 \ud300\uc758 \ud300\uc7a5 \ud639\uc740 \uc18c\uc218\uc758 \uc2dc\ub2c8\uc5b4\ub9cc \ucc38\uc11d\ud558\uc5ec \ubbf8\ud305\uc744 \uc9c4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7f0 \uc18c\ud1b5 \ucc44\ub110\uc758 \ud55c\uacc4\ub294 \ud544\uc5f0\uc801\uc73c\ub85c \uc18c\ud1b5\uc758 \ubd80\uc7ac\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4. \uadf8\ub7ec\ub2e4 \ubcf4\uba74 \uac1c\ubc1c\ud300\uc740 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\ub4e4\uc744 \uacc4\uc18d\ud574\uc11c \uac1c\ubc1c\ud558\uace0 \uc6b4\uc601\ud300 \uc785\uc7a5\uc5d0\uc11c\ub294 \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \uae30\ub2a5\uc774 \ubc30\ud3ec \uc2dc \uc7a5\uc560\ub97c \uc77c\uc73c\ud0a4\ub294 \ub4f1 \uc5ec\ub7ec \ubb38\uc81c\uac00 \uc0dd\uae30\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc704\uc640 \uac19\uc740 \uc0c1\ud669\uc774 \ubc18\ubcf5\ub418\uba74 \uc870\uc9c1 \uc774\uae30\uc8fc\uc758\ub77c\uace0 \ubd88\ub9ac\ub294 \uc0ac\uc77c\ub85c \ud604\uc0c1\uc774 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"silo",src:n(6651).Z,width:"892",height:"498"})),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\uc0ac\uc77c\ub85c(silo)\ub294 \uace1\uc2dd\uc774\ub098 \uc0ac\ub8cc\ub97c \uc800\uc7a5\ud558\ub294 \uad74\ub69d \ubaa8\uc591\uc758 \ucc3d\uace0\ub97c \uc758\ubbf8\ud55c\ub2e4. \uc0ac\uc77c\ub85c\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc874\uc7ac\ud558\uba70 \uc800\uc7a5\ub418\ub294 \ubb3c\ud488\uc774 \uc11c\ub85c \uc11e\uc774\uc9c0 \uc54a\ub3c4\ub85d \ucca0\uc800\ud788 \uad00\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc900\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc0ac\uc77c\ub85c \ud6a8\uacfc(Organizational Silos Effect)\ub294 \uc870\uc9c1 \ubd80\uc11c \uac04\uc5d0 \uc11c\ub85c \ud611\ub825\ud558\uc9c0 \uc54a\uace0 \ub0b4\ubd80 \uc774\uc775\ub9cc\uc744 \ucd94\uad6c\ud558\ub294 \ud604\uc0c1\uc744 \uc758\ubbf8\ud55c\ub2e4. \uc870\uc9c1 \ub0b4\uc5d0\uc11c \uac1c\ubcc4 \ubd80\uc11c\ub07c\ub9ac \uc11c\ub85c \ub2f4\uc744 \uc313\uace0 \uac01\uc790\uc758 \uc774\uc775\uc5d0\ub9cc \ubab0\ub450\ud558\ub294 \ubd80\uc11c \uc774\uae30\uc8fc\uc758\ub97c \uc77c\uceeb\ub294\ub2e4.")),(0,i.kt)("p",null,"\uc0ac\uc77c\ub85c \ud604\uc0c1\uc740 \uc11c\ube44\uc2a4 \ud488\uc9c8\uc758 \uc800\ud558\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc0ac\uc77c\ub85c \ud604\uc0c1\uc744 \ud574\uacb0\ud558\uae30 \uc704\ud574 \ub098\uc628 \uac83\uc774 \ubc14\ub85c DevOps\uc785\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"cicd"},"CI/CD"),(0,i.kt)("p",null,"Continuous Integration(CI) \uc640 Continuous Delivery (CD)\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc758 \uc7a5\ubcbd\uc744 \ud574\uc81c\ud558\uae30 \uc704\ud55c \uad6c\uccb4\uc801\uc778 \ubc29\ubc95\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cicd",src:n(7430).Z,width:"1400",height:"299"})),(0,i.kt)("p",null,"\uc774 \ubc29\ubc95\uc744 \ud1b5\ud574\uc11c \uac1c\ubc1c\ud300\uc5d0\uc11c\ub294 \uc6b4\uc601\ud300\uc758 \ud658\uacbd\uc744 \uc774\ud574\ud558\uace0 \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c \uc911\uc778 \uae30\ub2a5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\uae4c\uc9c0 \uc774\uc5b4\uc9c8 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc6b4\uc601\ud300\uc740 \uac80\uc99d\ub41c \uae30\ub2a5 \ub610\ub294 \uac1c\uc120\ub41c \uc81c\ud488\uc744 \ub354 \uc790\uc8fc \ubc30\ud3ec\ud574 \uace0\uac1d\uc758 \uc81c\ud488 \uacbd\ud5d8\uc744 \uc0c1\uc2b9\uc2dc\ud0b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \uc885\ud569\ud558\uc790\uba74 DevOps\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300 \uac04\uc758 \ubb38\uc81c\uac00 \uc788\uc5c8\uace0 \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ubc29\ubc95\ub860\uc785\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"mlops"},"MLOps"),(0,i.kt)("h3",{id:"1-mlops"},"1) ML+Ops"),(0,i.kt)("p",null,"MLOps\ub294 Machine Learning \uacfc Operations\uc758 \ud569\uc131\uc5b4\ub85c DevOps\uc5d0\uc11c Dev\uac00 ML\ub85c \ubc14\ub00c\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uc55e\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 DevOps\ub97c \ud1b5\ud574 MLOps\uac00 \ubb34\uc5c7\uc778\uc9c0 \uc9d0\uc791\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\u201cMLOps\ub294 \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300\uc758 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ubc29\ubc95\uc785\ub2c8\ub2e4.\u201d\n\uc774 \ub9d0\uc740 \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300 \uc0ac\uc774\uc5d0 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \uadf8\ub7fc \uc65c \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300\uc5d0\ub294 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc744\uae4c\uc694? \ub450 \ud300 \uac04\uc758 \ubb38\uc81c\ub97c \uc54c\uc544\ubcf4\uae30 \uc704\ud574\uc11c \ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc744 \uc608\uc2dc\ub85c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"rule-based"},"Rule Based"),(0,i.kt)("p",null,"\ucc98\uc74c \ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc744 \ub9cc\ub4dc\ub294 \uacbd\uc6b0 \uac04\ub2e8\ud55c \uaddc\uce59\uc744 \uae30\ubc18\uc73c\ub85c \uc544\uc774\ud15c\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c 1\uc8fc\uc77c\uac04 \ud310\ub9e4\ub7c9\uc774 \uac00\uc7a5 \ub9ce\uc740 \uc21c\uc11c\ub300\ub85c \ubcf4\uc5ec\uc8fc\ub294 \uc2dd\uc758 \ubc29\uc2dd\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc774 \ubc29\uc2dd\uc73c\ub85c \ubaa8\ub378\uc744 \uc815\ud55c\ub2e4\uba74 \ud2b9\ubcc4\ud55c \uc774\uc720\uac00 \uc5c6\ub294 \uc774\uc0c1 \ubaa8\ub378\uc758 \uc218\uc815\uc774 \ud544\uc694 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"machine-learning"},"Machine Learning"),(0,i.kt)("p",null,"\uc11c\ube44\uc2a4\uc758 \uaddc\ubaa8\uac00 \uc870\uae08 \ucee4\uc9c0\uace0 \ub85c\uadf8 \ub370\uc774\ud130\uac00 \ub9ce\uc774 \uc313\uc778\ub2e4\uba74 \uc774\ub97c \uc774\uc6a9\ud574 \uc544\uc774\ud15c \uae30\ubc18 \ud639\uc740 \uc720\uc800 \uae30\ubc18\uc758 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774\ub54c \ubaa8\ub378\uc740 \uc815\ud574\uc9c4 \uc8fc\uae30\uc5d0 \ub530\ub77c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5 \ud6c4 \uc7ac\ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"deep-learning"},"Deep Learning"),(0,i.kt)("p",null,"\uac1c\uc778\ud654 \ucd94\ucc9c\uc5d0 \ub300\ud55c \uc694\uad6c\uac00 \ub354 \ucee4\uc9c0\uace0 \ub354 \uc88b\uc740 \uc131\ub2a5\uc744 \ub0b4\ub294 \ubaa8\ub378\uc744 \ud544\uc694\ud574\uc9c8 \uacbd\uc6b0 \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \uc774\ub54c \ub9cc\ub4dc\ub294 \ubaa8\ub378\uc740 \uba38\uc2e0\ub7ec\ub2dd\uacfc \uac19\uc774 \uc815\ud574\uc9c4 \uc8fc\uae30\uc5d0 \ub530\ub77c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5 \ud6c4 \uc7ac\ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"graph",src:n(2994).Z,width:"752",height:"582"})),(0,i.kt)("p",null,"\uc704\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uc744 x\ucd95\uc744 \ubaa8\ub378\uc758 \ubcf5\uc7a1\ub3c4, y\ucd95\uc744 \ubaa8\ub378\uc758 \uc131\ub2a5\uc73c\ub85c \ub450\uace0 \uadf8\ub798\ud504\ub85c \ud45c\ud604\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf5\uc7a1\ub3c4\uac00 \uc62c\ub77c\uac08 \ub54c \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \uc62c\ub77c\uac00\ub294 \uc0c1\uc2b9 \uad00\uacc4\ub97c \uac16\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c \ub525\ub7ec\ub2dd\uc73c\ub85c \ub118\uc5b4\uac08 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc774 \uc0c8\ub85c \uc0dd\uae30\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ub9cc\uc57d \uad00\ub9ac\ud574\uc57c\ud560 \ubaa8\ub378\uc774 \uc801\ub2e4\uba74 \uc11c\ub85c \ud611\uc5c5\uc744 \ud1b5\ud574\uc11c \ucda9\ubd84\ud788 \ud574\uacb0\ud560 \uc218 \uc788\uc9c0\ub9cc \uac1c\ubc1c\ud574\uc57c \ud560 \ubaa8\ub378\uc774 \ub9ce\uc544\uc9c4\ub2e4\uba74 DevOps\uc758 \uacbd\uc6b0\uc640 \uac19\uc774 \uc0ac\uc77c\ub85c \ud604\uc0c1\uc774 \ub098\ud0c0\ub098\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"DevOps\uc758 \ubaa9\ud45c\uc640 \ub9de\ucdb0\uc11c \uc0dd\uac01\ud574\ubcf4\uba74 MLOps\uc758 \ubaa9\ud45c\ub294 \uac1c\ubc1c\ud55c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \uae30\ub2a5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 DevOps\uc758 \ubaa9\ud45c\uc600\ub2e4\uba74, MLOps\uc758 \ubaa9\ud45c\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"2-ml---ops"},"2) ML -> Ops"),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \ucd5c\uadfc \ub098\uc624\uace0 \uc788\ub294 MLOps \uad00\ub828 \uc81c\ud488\uacfc \uc124\uba85\uc744 \ubcf4\uba74 \uaf2d \uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ubaa9\ud45c\ub9cc\uc744 \ub300\uc0c1\uc73c\ub85c \ud558\uace0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uc5b4\ub5a4 \uacbd\uc6b0\uc5d0\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \ub9cc\ub4e0 \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \uc9c1\uc811 \uc6b4\uc601\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub824\uace0 \ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ub2c8\uc988\ub294 \ucd5c\uadfc \uba38\uc2e0\ub7ec\ub2dd \ud504\ub85c\uc81d\ud2b8\uac00 \uc9c4\ud589\ub418\ub294 \uacfc\uc815\uc5d0\uc11c \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc758 \uacbd\uc6b0 \uc6b4\uc601\uc5d0\uc11c \uac04\ub2e8\ud55c \ubaa8\ub378\ubd80\ud130 \uc2dc\uc791\ud574 \uc6b4\uc601\ud560 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc790\uc5f0\uc5b4, \uc774\ubbf8\uc9c0\uc640 \uac19\uc740 \uacf3\uc5d0\uc11c\ub294 \uaddc\uce59 \uae30\ubc18\uc758 \ubaa8\ub378\ubcf4\ub2e4\ub294 \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud574 \uc8fc\uc5b4\uc9c4 \ud0dc\uc2a4\ud06c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\ub294\uc9c0 \uac80\uc99d(POC)\ub97c \uc120\ud589\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uac80\uc99d\uc774 \ub05d\ub09c \ud504\ub85c\uc81d\ud2b8\ub294 \uc774\uc81c \uc11c\ube44\uc2a4\ub97c \uc704\ud55c \uc6b4\uc601 \ud658\uacbd\uc744 \uac1c\ubc1c\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uba38\uc2e0\ub7ec\ub2dd \ud300 \ub0b4\uc758 \uc790\uccb4 \uc5ed\ub7c9\uc73c\ub85c\ub294 \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc27d\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574\uc11c MLOps\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"3-\uacb0\ub860"},"3) \uacb0\ub860"),(0,i.kt)("p",null,"\uc694\uc57d\ud558\uc790\uba74 MLOps\ub294 \ub450 \uac00\uc9c0 \ubaa9\ud45c\uac00 \uc788\uc2b5\ub2c8\ub2e4.\n\uc55e\uc5d0\uc11c \uc124\uba85\ud55c MLOps\ub294 ML+Ops \ub85c \ub450 \ud300\uc758 \uc0dd\uc0b0\uc131 \ud5a5\uc0c1\uc744 \uc704\ud55c \uac83\uc774\uc600\uc2b5\ub2c8\ub2e4.\n\ubc18\uba74, \ub4a4\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uc740 ML->Ops \ub85c \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \uc9c1\uc811 \uc6b4\uc601\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 \uac83\uc744 \ub9d0\ud569\ub2c8\ub2e4."))}u.isMDXComponent=!0},7430:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cicd-775808741b1fa127eadb1fce55de3dab.png"},2994:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/graph-7329fb49fdf8c0b00d3c186386b5860e.png"},6651:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/silo-3cd9f9bdf17c846f82fd0dde78e01052.png"}}]); \ No newline at end of file diff --git a/assets/js/0425fa84.27ca7551.js b/assets/js/0425fa84.27ca7551.js new file mode 100644 index 00000000..be89f042 --- /dev/null +++ b/assets/js/0425fa84.27ca7551.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5384],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(r),k=o,m=u["".concat(c,".").concat(k)]||u[k]||d[k]||a;return r?n.createElement(m,i(i({ref:t},s),{},{components:r})):n.createElement(m,i({ref:t},s))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=k;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"What is Docker?",description:"Introduction to Docker.",sidebar_position:3,contributors:["Jongseob Jeon","Jaeyeon Kim"]},i=void 0,l={unversionedId:"prerequisites/docker/docker",id:"version-1.0/prerequisites/docker/docker",title:"What is Docker?",description:"Introduction to Docker.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/docker.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/",permalink:"/docs/1.0/prerequisites/docker/",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/docker.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"What is Docker?",description:"Introduction to Docker.",sidebar_position:3,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"Why Docker & Kubernetes ?",permalink:"/docs/1.0/prerequisites/docker/introduction"},next:{title:"[Practice] Docker command",permalink:"/docs/1.0/prerequisites/docker/command"}},c={},p=[{value:"\ucee8\ud14c\uc774\ub108",id:"\ucee8\ud14c\uc774\ub108",level:2},{value:"\ub3c4\ucee4",id:"\ub3c4\ucee4",level:2},{value:"Layer \ud574\uc11d",id:"layer-\ud574\uc11d",level:2},{value:"For ML Engineer",id:"for-ml-engineer",level:2}],s={toc:p},u="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\ucee8\ud14c\uc774\ub108"},"\ucee8\ud14c\uc774\ub108"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc5b4\ub514\uc5d0\uc11c\ub098 \ub3d9\uc77c\ud558\uac8c \uc2e4\ud589\ud558\ub294 \uae30\uc220"))),(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\ub4e0 \ud30c\uc77c\ub4e4\uc758 \uc9d1\ud569"),(0,o.kt)("li",{parentName:"ul"},"\u2192 \ubd95\uc5b4\ube75 \ud2c0"))),(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108\ub780?",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uae30\ubc18\uc73c\ub85c \uc2e4\ud589\ub41c \ud55c \uac1c\uc758 \ud504\ub85c\uc138\uc2a4"),(0,o.kt)("li",{parentName:"ul"},"\u2192 \ubd95\uc5b4\ube75 \ud2c0\ub85c \ucc0d\uc5b4\ub0b8 \ubd95\uc5b4\ube75")))),(0,o.kt)("h2",{id:"\ub3c4\ucee4"},"\ub3c4\ucee4"),(0,o.kt)("p",null,"\ub3c4\ucee4\ub294 ",(0,o.kt)("strong",{parentName:"p"},"\ucee8\ud14c\uc774\ub108\ub97c \uad00\ub9ac"),"\ud558\uace0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574\uc8fc\ub294 \ud50c\ub7ab\ud3fc\uc785\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ub3c4\ucee4\uc758 \uc2ac\ub85c\uac74\uc740 \ubc14\ub85c ",(0,o.kt)("strong",{parentName:"p"},"Build Once, Run Anywhere")," \ub85c \uc5b4\ub514\uc5d0\uc11c\ub098 \ub3d9\uc77c\ud55c \uc2e4\ud589 \uacb0\uacfc\ub97c \ubcf4\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub3c4\ucee4 \ub0b4\ubd80\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \uacfc\uc815\uc744 \ubcf4\uc790\uba74 \uc2e4\uc81c\ub85c container \ub97c \uc704\ud55c \ub9ac\uc18c\uc2a4\ub97c \ubd84\ub9ac\ud558\uace0, lifecycle \uc744 \uc81c\uc5b4\ud558\ub294 \uae30\ub2a5\uc740 linux kernel \uc758 cgroup \ub4f1\uc774 \uc218\ud589\ud569\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc \uc774\ub7ec\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ubc14\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 ",(0,o.kt)("strong",{parentName:"p"},"\ub108\ubb34 \uc5b4\ub835\uae30 \ub54c\ubb38\uc5d0")," \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\uc0c1\ud654 layer\ub97c \ub9cc\ub4e4\uac8c \ub429\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"docker-layer.png",src:r(8753).Z,width:"574",height:"455"})),(0,o.kt)("p",null,"\uc774\ub97c \ud1b5\ud574 \uc0ac\uc6a9\uc790\ub294 \uc0ac\uc6a9\uc790 \uce5c\ud654\uc801\uc778 API \uc778 ",(0,o.kt)("strong",{parentName:"p"},"Docker CLI")," \ub9cc\uc73c\ub85c \uc27d\uac8c \ucee8\ud14c\uc774\ub108\ub97c \uc81c\uc5b4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"layer-\ud574\uc11d"},"Layer \ud574\uc11d"),(0,o.kt)("p",null,"\uc704\uc5d0\uc11c \ub098\uc628 layer\ub4e4\uc758 \uc5ed\ud560\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"runC: linux kernel \uc758 \uae30\ub2a5\uc744 \uc9c1\uc811 \uc0ac\uc6a9\ud574\uc11c, container \ub77c\ub294 \ud558\ub098\uc758 \ud504\ub85c\uc138\uc2a4\uac00 \uc0ac\uc6a9\ud560 \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc640 cpu, memory, filesystem \ub4f1\uc744 \uaca9\ub9ac\uc2dc\ucf1c\uc8fc\ub294 \uae30\ub2a5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"containerd: runC(OCI layer) \uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\uae30 \uc704\ud55c \ucd94\uc0c1\ud654 \ub2e8\uacc4\uc774\uba70, \ud45c\uc900\ud654\ub41c \uc778\ud130\ud398\uc774\uc2a4(OCI)\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"dockerd: containerd \uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\ub294 \uc5ed\ud560\ub9cc \ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"docker cli: \uc0ac\uc6a9\uc790\ub294 docker cli \ub85c dockerd (Docker daemon)\uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc774 \ud1b5\uc2e0 \uacfc\uc815\uc5d0\uc11c unix socket \uc744 \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \uac00\ub054 \ub3c4\ucee4 \uad00\ub828 \uc5d0\ub7ec\uac00 \ub098\uba74 ",(0,o.kt)("inlineCode",{parentName:"li"},"/var/run/docker.sock")," \uac00 \uc0ac\uc6a9 \uc911\uc774\ub2e4, \uad8c\ud55c\uc774 \uc5c6\ub2e4 \ub4f1\ub4f1\uc758 \uc5d0\ub7ec \uba54\uc2dc\uc9c0\uac00 \ub098\uc624\ub294 \uac83\uc785\ub2c8\ub2e4.")))),(0,o.kt)("p",null,"\uc774\ucc98\ub7fc \ub3c4\ucee4\ub294 \ub9ce\uc740 \ub2e8\uacc4\ub97c \uac10\uc2f8\uace0 \uc788\uc9c0\ub9cc, \ud754\ud788 \ub3c4\ucee4\ub77c\ub294 \uc6a9\uc5b4\ub97c \uc0ac\uc6a9\ud560 \ub54c\ub294 Docker CLI \ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uace0, Dockerd \ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uace0 Docker Container \ud558\ub098\ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uc5b4\uc11c \ud63c\ub780\uc774 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc55e\uc73c\ub85c \ub098\uc624\ub294 \uae00\uc5d0\uc11c\ub3c4 \ub3c4\ucee4\uac00 \uc5ec\ub7ec\uac00\uc9c0 \uc758\ubbf8\ub85c \uc4f0\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"for-ml-engineer"},"For ML Engineer"),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ub3c4\ucee4\ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\uc720\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\ub098\uc758 ML \ud559\uc2b5/\ucd94\ub860 \ucf54\ub4dc\ub97c OS, python version, python \ud658\uacbd, \ud2b9\uc815 python package \ubc84\uc804\uc5d0 independent \ud558\ub3c4\ub85d \ud574\uc57c \ud55c\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"\uadf8\ub798\uc11c \ucf54\ub4dc \ubfd0\ub9cc\uc774 \uc544\ub2cc ",(0,o.kt)("strong",{parentName:"li"},"\ud574\ub2f9 \ucf54\ub4dc\uac00 \uc2e4\ud589\ub418\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\ub4e0 \uc885\uc18d\uc801\uc778 \ud328\ud0a4\uc9c0, \ud658\uacbd \ubcc0\uc218, \ud3f4\ub354\uba85 \ub4f1\ub4f1\uc744 \ud558\ub098\uc758 \ud328\ud0a4\uc9c0\ub85c")," \ubb36\uc744 \uc218 \uc788\ub294 \uae30\uc220\uc774 \ucee8\ud14c\uc774\ub108\ud654 \uae30\uc220\uc774\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"\uc774 \uae30\uc220\uc744 \uc27d\uac8c \uc0ac\uc6a9\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc911 \ud558\ub098\uac00 \ub3c4\ucee4\uc774\uba70, \ud328\ud0a4\uc9c0\ub97c \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub77c\uace0 \ubd80\ub978\ub2e4.")))}d.isMDXComponent=!0},8753:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docker-layer-223ebf4a5bacfe912f92117606e17ac2.png"}}]); \ No newline at end of file diff --git a/assets/js/0425fa84.51c449de.js b/assets/js/0425fa84.51c449de.js deleted file mode 100644 index c188c5df..00000000 --- a/assets/js/0425fa84.51c449de.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5384],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(r),k=o,m=u["".concat(c,".").concat(k)]||u[k]||d[k]||a;return r?n.createElement(m,i(i({ref:t},s),{},{components:r})):n.createElement(m,i({ref:t},s))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=k;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"What is Docker?",description:"Introduction to Docker.",sidebar_position:3,contributors:["Jongseob Jeon","Jaeyeon Kim"]},i=void 0,l={unversionedId:"prerequisites/docker/docker",id:"version-1.0/prerequisites/docker/docker",title:"What is Docker?",description:"Introduction to Docker.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/docker.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/",permalink:"/docs/1.0/prerequisites/docker/",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/docker.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"What is Docker?",description:"Introduction to Docker.",sidebar_position:3,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"Why Docker & Kubernetes ?",permalink:"/docs/1.0/prerequisites/docker/introduction"},next:{title:"[Practice] Docker command",permalink:"/docs/1.0/prerequisites/docker/command"}},c={},p=[{value:"\ucee8\ud14c\uc774\ub108",id:"\ucee8\ud14c\uc774\ub108",level:2},{value:"\ub3c4\ucee4",id:"\ub3c4\ucee4",level:2},{value:"Layer \ud574\uc11d",id:"layer-\ud574\uc11d",level:2},{value:"For ML Engineer",id:"for-ml-engineer",level:2}],s={toc:p},u="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\ucee8\ud14c\uc774\ub108"},"\ucee8\ud14c\uc774\ub108"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc5b4\ub514\uc5d0\uc11c\ub098 \ub3d9\uc77c\ud558\uac8c \uc2e4\ud589\ud558\ub294 \uae30\uc220"))),(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\ub4e0 \ud30c\uc77c\ub4e4\uc758 \uc9d1\ud569"),(0,o.kt)("li",{parentName:"ul"},"\u2192 \ubd95\uc5b4\ube75 \ud2c0"))),(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108\ub780?",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uae30\ubc18\uc73c\ub85c \uc2e4\ud589\ub41c \ud55c \uac1c\uc758 \ud504\ub85c\uc138\uc2a4"),(0,o.kt)("li",{parentName:"ul"},"\u2192 \ubd95\uc5b4\ube75 \ud2c0\ub85c \ucc0d\uc5b4\ub0b8 \ubd95\uc5b4\ube75")))),(0,o.kt)("h2",{id:"\ub3c4\ucee4"},"\ub3c4\ucee4"),(0,o.kt)("p",null,"\ub3c4\ucee4\ub294 ",(0,o.kt)("strong",{parentName:"p"},"\ucee8\ud14c\uc774\ub108\ub97c \uad00\ub9ac"),"\ud558\uace0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574\uc8fc\ub294 \ud50c\ub7ab\ud3fc\uc785\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ub3c4\ucee4\uc758 \uc2ac\ub85c\uac74\uc740 \ubc14\ub85c ",(0,o.kt)("strong",{parentName:"p"},"Build Once, Run Anywhere")," \ub85c \uc5b4\ub514\uc5d0\uc11c\ub098 \ub3d9\uc77c\ud55c \uc2e4\ud589 \uacb0\uacfc\ub97c \ubcf4\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub3c4\ucee4 \ub0b4\ubd80\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \uacfc\uc815\uc744 \ubcf4\uc790\uba74 \uc2e4\uc81c\ub85c container \ub97c \uc704\ud55c \ub9ac\uc18c\uc2a4\ub97c \ubd84\ub9ac\ud558\uace0, lifecycle \uc744 \uc81c\uc5b4\ud558\ub294 \uae30\ub2a5\uc740 linux kernel \uc758 cgroup \ub4f1\uc774 \uc218\ud589\ud569\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc \uc774\ub7ec\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ubc14\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 ",(0,o.kt)("strong",{parentName:"p"},"\ub108\ubb34 \uc5b4\ub835\uae30 \ub54c\ubb38\uc5d0")," \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\uc0c1\ud654 layer\ub97c \ub9cc\ub4e4\uac8c \ub429\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"docker-layer.png",src:r(8753).Z,width:"574",height:"455"})),(0,o.kt)("p",null,"\uc774\ub97c \ud1b5\ud574 \uc0ac\uc6a9\uc790\ub294 \uc0ac\uc6a9\uc790 \uce5c\ud654\uc801\uc778 API \uc778 ",(0,o.kt)("strong",{parentName:"p"},"Docker CLI")," \ub9cc\uc73c\ub85c \uc27d\uac8c \ucee8\ud14c\uc774\ub108\ub97c \uc81c\uc5b4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"layer-\ud574\uc11d"},"Layer \ud574\uc11d"),(0,o.kt)("p",null,"\uc704\uc5d0\uc11c \ub098\uc628 layer\ub4e4\uc758 \uc5ed\ud560\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"runC: linux kernel \uc758 \uae30\ub2a5\uc744 \uc9c1\uc811 \uc0ac\uc6a9\ud574\uc11c, container \ub77c\ub294 \ud558\ub098\uc758 \ud504\ub85c\uc138\uc2a4\uac00 \uc0ac\uc6a9\ud560 \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc640 cpu, memory, filesystem \ub4f1\uc744 \uaca9\ub9ac\uc2dc\ucf1c\uc8fc\ub294 \uae30\ub2a5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"containerd: runC(OCI layer) \uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\uae30 \uc704\ud55c \ucd94\uc0c1\ud654 \ub2e8\uacc4\uc774\uba70, \ud45c\uc900\ud654\ub41c \uc778\ud130\ud398\uc774\uc2a4(OCI)\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"dockerd: containerd \uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\ub294 \uc5ed\ud560\ub9cc \ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"docker cli: \uc0ac\uc6a9\uc790\ub294 docker cli \ub85c dockerd (Docker daemon)\uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc774 \ud1b5\uc2e0 \uacfc\uc815\uc5d0\uc11c unix socket \uc744 \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \uac00\ub054 \ub3c4\ucee4 \uad00\ub828 \uc5d0\ub7ec\uac00 \ub098\uba74 ",(0,o.kt)("inlineCode",{parentName:"li"},"/var/run/docker.sock")," \uac00 \uc0ac\uc6a9 \uc911\uc774\ub2e4, \uad8c\ud55c\uc774 \uc5c6\ub2e4 \ub4f1\ub4f1\uc758 \uc5d0\ub7ec \uba54\uc2dc\uc9c0\uac00 \ub098\uc624\ub294 \uac83\uc785\ub2c8\ub2e4.")))),(0,o.kt)("p",null,"\uc774\ucc98\ub7fc \ub3c4\ucee4\ub294 \ub9ce\uc740 \ub2e8\uacc4\ub97c \uac10\uc2f8\uace0 \uc788\uc9c0\ub9cc, \ud754\ud788 \ub3c4\ucee4\ub77c\ub294 \uc6a9\uc5b4\ub97c \uc0ac\uc6a9\ud560 \ub54c\ub294 Docker CLI \ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uace0, Dockerd \ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uace0 Docker Container \ud558\ub098\ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uc5b4\uc11c \ud63c\ub780\uc774 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc55e\uc73c\ub85c \ub098\uc624\ub294 \uae00\uc5d0\uc11c\ub3c4 \ub3c4\ucee4\uac00 \uc5ec\ub7ec\uac00\uc9c0 \uc758\ubbf8\ub85c \uc4f0\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"for-ml-engineer"},"For ML Engineer"),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ub3c4\ucee4\ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\uc720\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\ub098\uc758 ML \ud559\uc2b5/\ucd94\ub860 \ucf54\ub4dc\ub97c OS, python version, python \ud658\uacbd, \ud2b9\uc815 python package \ubc84\uc804\uc5d0 independent \ud558\ub3c4\ub85d \ud574\uc57c \ud55c\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"\uadf8\ub798\uc11c \ucf54\ub4dc \ubfd0\ub9cc\uc774 \uc544\ub2cc ",(0,o.kt)("strong",{parentName:"li"},"\ud574\ub2f9 \ucf54\ub4dc\uac00 \uc2e4\ud589\ub418\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\ub4e0 \uc885\uc18d\uc801\uc778 \ud328\ud0a4\uc9c0, \ud658\uacbd \ubcc0\uc218, \ud3f4\ub354\uba85 \ub4f1\ub4f1\uc744 \ud558\ub098\uc758 \ud328\ud0a4\uc9c0\ub85c")," \ubb36\uc744 \uc218 \uc788\ub294 \uae30\uc220\uc774 \ucee8\ud14c\uc774\ub108\ud654 \uae30\uc220\uc774\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"\uc774 \uae30\uc220\uc744 \uc27d\uac8c \uc0ac\uc6a9\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc911 \ud558\ub098\uac00 \ub3c4\ucee4\uc774\uba70, \ud328\ud0a4\uc9c0\ub97c \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub77c\uace0 \ubd80\ub978\ub2e4.")))}d.isMDXComponent=!0},8753:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docker-layer-223ebf4a5bacfe912f92117606e17ac2.png"}}]); \ No newline at end of file diff --git a/assets/js/089e5a41.8a1e74f8.js b/assets/js/089e5a41.8a1e74f8.js deleted file mode 100644 index ff444362..00000000 --- a/assets/js/089e5a41.8a1e74f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2949],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=p(a),k=r,d=u["".concat(s,".").concat(k)]||u[k]||c[k]||l;return a?n.createElement(d,o(o({ref:t},m),{},{components:a})):n.createElement(d,o({ref:t},m))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const l={title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",sidebar_position:5,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,i={unversionedId:"setup-kubernetes/install-kubernetes-module",id:"setup-kubernetes/install-kubernetes-module",title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",source:"@site/docs/setup-kubernetes/install-kubernetes-module.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/install-kubernetes-module",permalink:"/docs/setup-kubernetes/install-kubernetes-module",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-kubernetes-module.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",sidebar_position:5,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4.2. Minikube",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube"},next:{title:"6. (Optional) Setup GPU",permalink:"/docs/setup-kubernetes/setup-nvidia-gpu"}},s={},p=[{value:"Setup Kubernetes Modules",id:"setup-kubernetes-modules",level:2},{value:"Helm",id:"helm",level:2},{value:"Kustomize",id:"kustomize",level:2},{value:"CSI Plugin : Local Path Provisioner",id:"csi-plugin--local-path-provisioner",level:2}],m={toc:p},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"setup-kubernetes-modules"},"Setup Kubernetes Modules"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ubaa8\ub4c8\uc744 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc124\uce58\ud558\ub294 \uacfc\uc815\uc5d0 \uad00\ud574\uc11c \uc124\uba85\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc55e\uc73c\ub85c \uc18c\uac1c\ub418\ub294 \uacfc\uc815\uc740 \ubaa8\ub450 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc"),"\uc5d0\uc11c \uc9c4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"helm"},"Helm"),(0,r.kt)("p",null,"Helm\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud328\ud0a4\uc9c0\uc640 \uad00\ub828\ub41c \uc790\uc6d0\uc744 \ud55c \ubc88\uc5d0 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ub3c4\uc640\uc8fc\ub294 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc9d5 \ub3c4\uad6c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 Helm v3.7.1 \ubc84\uc804\uc744 \ub0b4\ub824\ubc1b\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For Linux amd64"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\ub978 OS\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/helm/helm/releases/tag/v3.7.1"},"\uacf5\uc2dd \ud648\ud398\uc774\uc9c0"),"\ub97c \ucc38\uace0\ud558\uc2dc\uc5b4, \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc758 OS\uc640 CPU\uc5d0 \ub9de\ub294 \ubc14\uc774\ub108\ub9ac\uc758 \ub2e4\uc6b4 \uacbd\ub85c\ub97c \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"helm\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc555\ucd95\uc744 \ud480\uace0, \ud30c\uc77c\uc758 \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -zxvf helm-v3.7.1-linux-amd64.tar.gz\nsudo mv linux-amd64/helm /usr/local/bin/helm\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm help\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"The Kubernetes package manager\n\nCommon actions for Helm:\n")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm search: search for charts")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm pull: download a chart to your local directory to view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm install: upload the chart to Kubernetes")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm list: list releases of charts"),(0,r.kt)("p",{parentName:"li"},"Environment variables:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_CACHE_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing cached files.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_CONFIG_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing Helm configuration.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_DATA_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing Helm data.")))),(0,r.kt)("p",{parentName:"li"},"..."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"")))),(0,r.kt)("h2",{id:"kustomize"},"Kustomize"),(0,r.kt)("p",null,"kustomize \ub610\ud55c \uc5ec\ub7ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ub9ac\uc18c\uc2a4\ub97c \ud55c \ubc88\uc5d0 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ub3c4\uc640\uc8fc\ub294 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc9d5 \ub3c4\uad6c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 kustomize v3.10.0 \ubc84\uc804\uc758 \ubc14\uc774\ub108\ub9ac\ub97c \ub2e4\uc6b4\ubc1b\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For Linux amd64"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.10.0/kustomize_v3.10.0_linux_amd64.tar.gz\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\ub978 OS\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv3.10.0"},"kustomize/v3.10.0"),"\uc5d0\uc11c \ud655\uc778 \ud6c4 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"kustomize \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc555\ucd95\uc744 \ud480\uace0, \ud30c\uc77c\uc758 \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -zxvf kustomize_v3.10.0_linux_amd64.tar.gz\nsudo mv kustomize /usr/local/bin/kustomize\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize help\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Manages declarative configuration of Kubernetes.\nSee https://sigs.k8s.io/kustomize\n\nUsage:\n kustomize [command]\n\nAvailable Commands:\n build Print configuration per contents of kustomization.yaml\n cfg Commands for reading and writing configuration.\n completion Generate shell completion script\n create Create a new kustomization in the current directory\n edit Edits a kustomization file\n fn Commands for running functions against configuration.\n...\n")))),(0,r.kt)("h2",{id:"csi-plugin--local-path-provisioner"},"CSI Plugin : Local Path Provisioner"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"CSI Plugin\uc740 kubernetes \ub0b4\uc758 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \ub2f4\ub2f9\ud558\ub294 \ubaa8\ub4c8\uc785\ub2c8\ub2e4. \ub2e8\uc77c \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 CSI Plugin\uc778 Local Path Provisioner\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.20/deploy/local-path-storage.yaml\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/local-path-storage created\nserviceaccount/local-path-provisioner-service-account created\nclusterrole.rbac.authorization.k8s.io/local-path-provisioner-role created\nclusterrolebinding.rbac.authorization.k8s.io/local-path-provisioner-bind created\ndeployment.apps/local-path-provisioner created\nstorageclass.storage.k8s.io/local-path created\nconfigmap/local-path-config created\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub610\ud55c, \ub2e4\uc74c\uacfc \uac19\uc774 local-path-storage namespace \uc5d0 provisioner pod\uc774 Running \uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n local-path-storage get pod\n")),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nlocal-path-provisioner-d744ccf98-xfcbk 1/1 Running 0 7m\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uc744 \uc218\ud589\ud558\uc5ec default storage class\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl patch storageclass local-path -p \'{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}\'\n')),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"storageclass.storage.k8s.io/local-path patched\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"default storage class\ub85c \uc124\uc815\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get sc\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc774 NAME\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"local-path (default)")," \uc778 storage class\uac00 \uc874\uc7ac\ud558\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nlocal-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 2h\n")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/089e5a41.dd2d3370.js b/assets/js/089e5a41.dd2d3370.js new file mode 100644 index 00000000..f9cf0499 --- /dev/null +++ b/assets/js/089e5a41.dd2d3370.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2949],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=p(a),k=r,d=u["".concat(s,".").concat(k)]||u[k]||c[k]||l;return a?n.createElement(d,o(o({ref:t},m),{},{components:a})):n.createElement(d,o({ref:t},m))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const l={title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",sidebar_position:5,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,i={unversionedId:"setup-kubernetes/install-kubernetes-module",id:"setup-kubernetes/install-kubernetes-module",title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",source:"@site/docs/setup-kubernetes/install-kubernetes-module.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/install-kubernetes-module",permalink:"/docs/setup-kubernetes/install-kubernetes-module",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-kubernetes-module.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",sidebar_position:5,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4.2. Minikube",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube"},next:{title:"6. (Optional) Setup GPU",permalink:"/docs/setup-kubernetes/setup-nvidia-gpu"}},s={},p=[{value:"Setup Kubernetes Modules",id:"setup-kubernetes-modules",level:2},{value:"Helm",id:"helm",level:2},{value:"Kustomize",id:"kustomize",level:2},{value:"CSI Plugin : Local Path Provisioner",id:"csi-plugin--local-path-provisioner",level:2}],m={toc:p},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"setup-kubernetes-modules"},"Setup Kubernetes Modules"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ubaa8\ub4c8\uc744 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc124\uce58\ud558\ub294 \uacfc\uc815\uc5d0 \uad00\ud574\uc11c \uc124\uba85\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc55e\uc73c\ub85c \uc18c\uac1c\ub418\ub294 \uacfc\uc815\uc740 \ubaa8\ub450 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc"),"\uc5d0\uc11c \uc9c4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"helm"},"Helm"),(0,r.kt)("p",null,"Helm\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud328\ud0a4\uc9c0\uc640 \uad00\ub828\ub41c \uc790\uc6d0\uc744 \ud55c \ubc88\uc5d0 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ub3c4\uc640\uc8fc\ub294 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc9d5 \ub3c4\uad6c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 Helm v3.7.1 \ubc84\uc804\uc744 \ub0b4\ub824\ubc1b\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For Linux amd64"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\ub978 OS\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/helm/helm/releases/tag/v3.7.1"},"\uacf5\uc2dd \ud648\ud398\uc774\uc9c0"),"\ub97c \ucc38\uace0\ud558\uc2dc\uc5b4, \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc758 OS\uc640 CPU\uc5d0 \ub9de\ub294 \ubc14\uc774\ub108\ub9ac\uc758 \ub2e4\uc6b4 \uacbd\ub85c\ub97c \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"helm\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc555\ucd95\uc744 \ud480\uace0, \ud30c\uc77c\uc758 \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -zxvf helm-v3.7.1-linux-amd64.tar.gz\nsudo mv linux-amd64/helm /usr/local/bin/helm\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm help\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"The Kubernetes package manager\n\nCommon actions for Helm:\n")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm search: search for charts")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm pull: download a chart to your local directory to view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm install: upload the chart to Kubernetes")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm list: list releases of charts"),(0,r.kt)("p",{parentName:"li"},"Environment variables:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_CACHE_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing cached files.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_CONFIG_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing Helm configuration.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_DATA_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing Helm data.")))),(0,r.kt)("p",{parentName:"li"},"..."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"")))),(0,r.kt)("h2",{id:"kustomize"},"Kustomize"),(0,r.kt)("p",null,"kustomize \ub610\ud55c \uc5ec\ub7ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ub9ac\uc18c\uc2a4\ub97c \ud55c \ubc88\uc5d0 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ub3c4\uc640\uc8fc\ub294 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc9d5 \ub3c4\uad6c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 kustomize v3.10.0 \ubc84\uc804\uc758 \ubc14\uc774\ub108\ub9ac\ub97c \ub2e4\uc6b4\ubc1b\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For Linux amd64"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.10.0/kustomize_v3.10.0_linux_amd64.tar.gz\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\ub978 OS\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv3.10.0"},"kustomize/v3.10.0"),"\uc5d0\uc11c \ud655\uc778 \ud6c4 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"kustomize \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc555\ucd95\uc744 \ud480\uace0, \ud30c\uc77c\uc758 \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -zxvf kustomize_v3.10.0_linux_amd64.tar.gz\nsudo mv kustomize /usr/local/bin/kustomize\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize help\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Manages declarative configuration of Kubernetes.\nSee https://sigs.k8s.io/kustomize\n\nUsage:\n kustomize [command]\n\nAvailable Commands:\n build Print configuration per contents of kustomization.yaml\n cfg Commands for reading and writing configuration.\n completion Generate shell completion script\n create Create a new kustomization in the current directory\n edit Edits a kustomization file\n fn Commands for running functions against configuration.\n...\n")))),(0,r.kt)("h2",{id:"csi-plugin--local-path-provisioner"},"CSI Plugin : Local Path Provisioner"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"CSI Plugin\uc740 kubernetes \ub0b4\uc758 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \ub2f4\ub2f9\ud558\ub294 \ubaa8\ub4c8\uc785\ub2c8\ub2e4. \ub2e8\uc77c \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 CSI Plugin\uc778 Local Path Provisioner\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.20/deploy/local-path-storage.yaml\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/local-path-storage created\nserviceaccount/local-path-provisioner-service-account created\nclusterrole.rbac.authorization.k8s.io/local-path-provisioner-role created\nclusterrolebinding.rbac.authorization.k8s.io/local-path-provisioner-bind created\ndeployment.apps/local-path-provisioner created\nstorageclass.storage.k8s.io/local-path created\nconfigmap/local-path-config created\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub610\ud55c, \ub2e4\uc74c\uacfc \uac19\uc774 local-path-storage namespace \uc5d0 provisioner pod\uc774 Running \uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n local-path-storage get pod\n")),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nlocal-path-provisioner-d744ccf98-xfcbk 1/1 Running 0 7m\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uc744 \uc218\ud589\ud558\uc5ec default storage class\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl patch storageclass local-path -p \'{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}\'\n')),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"storageclass.storage.k8s.io/local-path patched\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"default storage class\ub85c \uc124\uc815\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get sc\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc774 NAME\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"local-path (default)")," \uc778 storage class\uac00 \uc874\uc7ac\ud558\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nlocal-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 2h\n")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/13e7227b.48df4048.js b/assets/js/13e7227b.48df4048.js new file mode 100644 index 00000000..00c83a1a --- /dev/null +++ b/assets/js/13e7227b.48df4048.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[434],{3905:(e,t,l)=>{l.d(t,{Zo:()=>m,kt:()=>k});var n=l(7294);function r(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function a(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,n)}return l}function o(e){for(var t=1;t=0||(r[l]=e[l]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(r[l]=e[l])}return r}var p=n.createContext({}),i=function(e){var t=n.useContext(p),l=t;return e&&(l="function"==typeof e?e(t):o(o({},t),e)),l},m=function(e){var t=i(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var l=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=i(l),f=r,k=c["".concat(p,".").concat(f)]||c[f]||u[f]||a;return l?n.createElement(k,o(o({ref:t},m),{},{components:l})):n.createElement(k,o({ref:t},m))}));function k(e,t){var l=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=l.length,o=new Array(a);o[0]=f;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,o[1]=s;for(var i=2;i{l.r(t),l.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>i});var n=l(7462),r=(l(7294),l(3905));const a={title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,s={unversionedId:"setup-components/install-components-mlflow",id:"setup-components/install-components-mlflow",title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",source:"@site/docs/setup-components/install-components-mlflow.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-mlflow",permalink:"/docs/setup-components/install-components-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-components/install-components-mlflow.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Kubeflow",permalink:"/docs/setup-components/install-components-kf"},next:{title:"3. Seldon-Core",permalink:"/docs/setup-components/install-components-seldon"}},p={},i=[{value:"Install MLflow Tracking Server",id:"install-mlflow-tracking-server",level:2},{value:"Before Install MLflow Tracking Server",id:"before-install-mlflow-tracking-server",level:2},{value:"PostgreSQL DB \uc124\uce58",id:"postgresql-db-\uc124\uce58",level:3},{value:"Minio \uc124\uc815",id:"minio-\uc124\uc815",level:3},{value:"Let's Install MLflow Tracking Server",id:"lets-install-mlflow-tracking-server",level:2},{value:"Helm Repository \ucd94\uac00",id:"helm-repository-\ucd94\uac00",level:3},{value:"Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Helm Install",id:"helm-install",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:3}],m={toc:i},c="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"install-mlflow-tracking-server"},"Install MLflow Tracking Server"),(0,r.kt)("p",null,"MLflow\ub294 \ub300\ud45c\uc801\uc778 \uc624\ud508\uc18c\uc2a4 ML \uc2e4\ud5d8 \uad00\ub9ac \ub3c4\uad6c\uc785\ub2c8\ub2e4. MLflow\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/tracking.html#tracking"},"\uc2e4\ud5d8 \uad00\ub9ac \uc6a9\ub3c4")," \uc678\uc5d0\ub3c4 ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/projects.html#projects"},"ML Model \ud328\ud0a4\uc9d5"),", ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/models.html#models"},"ML \ubaa8\ub378 \ubc30\ud3ec \uad00\ub9ac"),", ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/model-registry.html#registry"},"ML \ubaa8\ub378 \uc800\uc7a5"),"\uacfc \uac19\uc740 \uae30\ub2a5\ub3c4 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 MLflow\ub97c \uc2e4\ud5d8 \uad00\ub9ac \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c MLflow\uc5d0\uc11c \uad00\ub9ac\ud558\ub294 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 UI\ub97c \uc81c\uacf5\ud558\ub294 MLflow Tracking Server\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"before-install-mlflow-tracking-server"},"Before Install MLflow Tracking Server"),(0,r.kt)("h3",{id:"postgresql-db-\uc124\uce58"},"PostgreSQL DB \uc124\uce58"),(0,r.kt)("p",null,"MLflow Tracking Server\uac00 Backend Store\ub85c \uc0ac\uc6a9\ud560 \uc6a9\ub3c4\uc758 PostgreSQL DB\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uba3c\uc800 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow-system"),"\uc774\ub77c\ub294 namespace \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create ns mlflow-system\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/mlflow-system created\n")),(0,r.kt)("p",null,"postgresql DB\ub97c ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow-system")," namespace \uc5d0 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n mlflow-system apply -f https://raw.githubusercontent.com/mlops-for-all/helm-charts/b94b5fe4133f769c04b25068b98ccfa7a505aa60/mlflow/manifests/postgres.yaml \n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"service/postgresql-mlflow-service created\ndeployment.apps/postgresql-mlflow created\npersistentvolumeclaim/postgresql-mlflow-pvc created\n")),(0,r.kt)("p",null,"mlflow-system namespace \uc5d0 1\uac1c\uc758 postgresql \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n mlflow-system | grep postgresql\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub41c \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"postgresql-mlflow-7b9bc8c79f-srkh7 1/1 Running 0 38s\n")),(0,r.kt)("h3",{id:"minio-\uc124\uc815"},"Minio \uc124\uc815"),(0,r.kt)("p",null,"MLflow Tracking Server\uac00 Artifacts Store\ub85c \uc0ac\uc6a9\ud560 \uc6a9\ub3c4\uc758 Minio\ub294 \uc774\uc804 Kubeflow \uc124\uce58 \ub2e8\uacc4\uc5d0\uc11c \uc124\uce58\ud55c Minio\ub97c \ud65c\uc6a9\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e8, kubeflow \uc6a9\ub3c4\uc640 mlflow \uc6a9\ub3c4\ub97c \ubd84\ub9ac\ud558\uae30 \uc704\ud574, mlflow \uc804\uc6a9 \ubc84\ud0b7(bucket)\uc744 \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","minio \uc5d0 \uc811\uc18d\ud558\uc5ec \ubc84\ud0b7\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574, \uc6b0\uc120 minio-service \ub97c \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/minio-service -n kubeflow 9000:9000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:9000"},"localhost:9000"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"minio-install",src:l(1705).Z,width:"2906",height:"1946"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc811\uc18d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \ub85c\uadf8\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Username: ",(0,r.kt)("inlineCode",{parentName:"li"},"minio")),(0,r.kt)("li",{parentName:"ul"},"Password: ",(0,r.kt)("inlineCode",{parentName:"li"},"minio123"))),(0,r.kt)("p",null,"\uc6b0\uce21 \ud558\ub2e8\uc758 ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"+"))," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"Create Bucket"),"\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"create-bucket",src:l(5683).Z,width:"2902",height:"1950"})),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Bucket Name"),"\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow"),"\ub97c \uc785\ub825\ud558\uc5ec \ubc84\ud0b7\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc67c\ucabd\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow"),"\ub77c\ub294 \uc774\ub984\uc758 \ubc84\ud0b7\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-bucket",src:l(5036).Z,width:"2902",height:"1950"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"lets-install-mlflow-tracking-server"},"Let's Install MLflow Tracking Server"),(0,r.kt)("h3",{id:"helm-repository-\ucd94\uac00"},"Helm Repository \ucd94\uac00"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add mlops-for-all https://mlops-for-all.github.io/helm-charts\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'"mlops-for-all" has been added to your repositories\n')),(0,r.kt)("h3",{id:"helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "mlops-for-all" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,r.kt)("h3",{id:"helm-install"},"Helm Install"),(0,r.kt)("p",null,"mlflow-server Helm Chart 0.2.0 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm install mlflow-server mlops-for-all/mlflow-server \\\n --namespace mlflow-system \\\n --version 0.2.0\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\uc8fc\uc758"),": \uc704\uc758 helm chart\ub294 MLflow \uc758 backend store \uc640 artifacts store \uc758 \uc811\uc18d \uc815\ubcf4\ub97c kubeflow \uc124\uce58 \uacfc\uc815\uc5d0\uc11c \uc0dd\uc131\ud55c minio\uc640 \uc704\uc758 ",(0,r.kt)("a",{parentName:"li",href:"#postgresql-db-%EC%84%A4%EC%B9%98"},"PostgreSQL DB \uc124\uce58"),"\uc5d0\uc11c \uc0dd\uc131\ud55c postgresql \uc815\ubcf4\ub97c default\ub85c \ud558\uc5ec \uc124\uce58\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ubcc4\uac1c\ub85c \uc0dd\uc131\ud55c DB \ud639\uc740 Object storage\ub97c \ud65c\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0, ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/mlops-for-all/helm-charts/tree/main/mlflow/chart"},"Helm Chart Repo"),"\ub97c \ucc38\uace0\ud558\uc5ec helm install \uc2dc value\ub97c \ub530\ub85c \uc124\uc815\ud558\uc5ec \uc124\uce58\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.")))),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME: mlflow-server\nLAST DEPLOYED: Sat Dec 18 22:02:13 2021\nNAMESPACE: mlflow-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n mlflow-system | grep mlflow-server\n")),(0,r.kt)("p",null,"mlflow-system namespace \uc5d0 1 \uac1c\uc758 mlflow-server \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub41c \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlflow-server-ffd66d858-6hm62 1/1 Running 0 74s\n")),(0,r.kt)("h3",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c MLflow Server\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc811\uc18d\ud558\uae30 \uc704\ud574, \ud3ec\ud2b8\ud3ec\uc6cc\ub529\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/mlflow-server-service -n mlflow-system 5000:5000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:5000"},"localhost:5000"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-install",src:l(5764).Z,width:"2882",height:"1464"})))}u.isMDXComponent=!0},5683:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/create-bucket-58bd2a673744c0144ffb14a2aeeef821.png"},1705:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/minio-install-587ecd302eecc621dbb568c124c80ccf.png"},5036:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/mlflow-bucket-63b427bd7a5147b8bae2ac69c57facff.png"},5764:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/mlflow-install-b3920befde2af7fdbf3677ab12036440.png"}}]); \ No newline at end of file diff --git a/assets/js/13e7227b.51bb1c45.js b/assets/js/13e7227b.51bb1c45.js deleted file mode 100644 index dc98c200..00000000 --- a/assets/js/13e7227b.51bb1c45.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[434],{3905:(e,t,l)=>{l.d(t,{Zo:()=>m,kt:()=>k});var n=l(7294);function r(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function a(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,n)}return l}function o(e){for(var t=1;t=0||(r[l]=e[l]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(r[l]=e[l])}return r}var p=n.createContext({}),i=function(e){var t=n.useContext(p),l=t;return e&&(l="function"==typeof e?e(t):o(o({},t),e)),l},m=function(e){var t=i(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var l=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=i(l),f=r,k=c["".concat(p,".").concat(f)]||c[f]||u[f]||a;return l?n.createElement(k,o(o({ref:t},m),{},{components:l})):n.createElement(k,o({ref:t},m))}));function k(e,t){var l=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=l.length,o=new Array(a);o[0]=f;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,o[1]=s;for(var i=2;i{l.r(t),l.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>i});var n=l(7462),r=(l(7294),l(3905));const a={title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,s={unversionedId:"setup-components/install-components-mlflow",id:"setup-components/install-components-mlflow",title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",source:"@site/docs/setup-components/install-components-mlflow.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-mlflow",permalink:"/docs/setup-components/install-components-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-components/install-components-mlflow.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Kubeflow",permalink:"/docs/setup-components/install-components-kf"},next:{title:"3. Seldon-Core",permalink:"/docs/setup-components/install-components-seldon"}},p={},i=[{value:"Install MLflow Tracking Server",id:"install-mlflow-tracking-server",level:2},{value:"Before Install MLflow Tracking Server",id:"before-install-mlflow-tracking-server",level:2},{value:"PostgreSQL DB \uc124\uce58",id:"postgresql-db-\uc124\uce58",level:3},{value:"Minio \uc124\uc815",id:"minio-\uc124\uc815",level:3},{value:"Let's Install MLflow Tracking Server",id:"lets-install-mlflow-tracking-server",level:2},{value:"Helm Repository \ucd94\uac00",id:"helm-repository-\ucd94\uac00",level:3},{value:"Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Helm Install",id:"helm-install",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:3}],m={toc:i},c="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"install-mlflow-tracking-server"},"Install MLflow Tracking Server"),(0,r.kt)("p",null,"MLflow\ub294 \ub300\ud45c\uc801\uc778 \uc624\ud508\uc18c\uc2a4 ML \uc2e4\ud5d8 \uad00\ub9ac \ub3c4\uad6c\uc785\ub2c8\ub2e4. MLflow\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/tracking.html#tracking"},"\uc2e4\ud5d8 \uad00\ub9ac \uc6a9\ub3c4")," \uc678\uc5d0\ub3c4 ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/projects.html#projects"},"ML Model \ud328\ud0a4\uc9d5"),", ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/models.html#models"},"ML \ubaa8\ub378 \ubc30\ud3ec \uad00\ub9ac"),", ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/model-registry.html#registry"},"ML \ubaa8\ub378 \uc800\uc7a5"),"\uacfc \uac19\uc740 \uae30\ub2a5\ub3c4 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 MLflow\ub97c \uc2e4\ud5d8 \uad00\ub9ac \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c MLflow\uc5d0\uc11c \uad00\ub9ac\ud558\ub294 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 UI\ub97c \uc81c\uacf5\ud558\ub294 MLflow Tracking Server\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"before-install-mlflow-tracking-server"},"Before Install MLflow Tracking Server"),(0,r.kt)("h3",{id:"postgresql-db-\uc124\uce58"},"PostgreSQL DB \uc124\uce58"),(0,r.kt)("p",null,"MLflow Tracking Server\uac00 Backend Store\ub85c \uc0ac\uc6a9\ud560 \uc6a9\ub3c4\uc758 PostgreSQL DB\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uba3c\uc800 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow-system"),"\uc774\ub77c\ub294 namespace \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create ns mlflow-system\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/mlflow-system created\n")),(0,r.kt)("p",null,"postgresql DB\ub97c ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow-system")," namespace \uc5d0 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n mlflow-system apply -f https://raw.githubusercontent.com/mlops-for-all/helm-charts/b94b5fe4133f769c04b25068b98ccfa7a505aa60/mlflow/manifests/postgres.yaml \n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"service/postgresql-mlflow-service created\ndeployment.apps/postgresql-mlflow created\npersistentvolumeclaim/postgresql-mlflow-pvc created\n")),(0,r.kt)("p",null,"mlflow-system namespace \uc5d0 1\uac1c\uc758 postgresql \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n mlflow-system | grep postgresql\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub41c \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"postgresql-mlflow-7b9bc8c79f-srkh7 1/1 Running 0 38s\n")),(0,r.kt)("h3",{id:"minio-\uc124\uc815"},"Minio \uc124\uc815"),(0,r.kt)("p",null,"MLflow Tracking Server\uac00 Artifacts Store\ub85c \uc0ac\uc6a9\ud560 \uc6a9\ub3c4\uc758 Minio\ub294 \uc774\uc804 Kubeflow \uc124\uce58 \ub2e8\uacc4\uc5d0\uc11c \uc124\uce58\ud55c Minio\ub97c \ud65c\uc6a9\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e8, kubeflow \uc6a9\ub3c4\uc640 mlflow \uc6a9\ub3c4\ub97c \ubd84\ub9ac\ud558\uae30 \uc704\ud574, mlflow \uc804\uc6a9 \ubc84\ud0b7(bucket)\uc744 \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","minio \uc5d0 \uc811\uc18d\ud558\uc5ec \ubc84\ud0b7\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574, \uc6b0\uc120 minio-service \ub97c \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/minio-service -n kubeflow 9000:9000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:9000"},"localhost:9000"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"minio-install",src:l(1705).Z,width:"2906",height:"1946"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc811\uc18d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \ub85c\uadf8\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Username: ",(0,r.kt)("inlineCode",{parentName:"li"},"minio")),(0,r.kt)("li",{parentName:"ul"},"Password: ",(0,r.kt)("inlineCode",{parentName:"li"},"minio123"))),(0,r.kt)("p",null,"\uc6b0\uce21 \ud558\ub2e8\uc758 ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"+"))," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"Create Bucket"),"\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"create-bucket",src:l(5683).Z,width:"2902",height:"1950"})),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Bucket Name"),"\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow"),"\ub97c \uc785\ub825\ud558\uc5ec \ubc84\ud0b7\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc67c\ucabd\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow"),"\ub77c\ub294 \uc774\ub984\uc758 \ubc84\ud0b7\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-bucket",src:l(5036).Z,width:"2902",height:"1950"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"lets-install-mlflow-tracking-server"},"Let's Install MLflow Tracking Server"),(0,r.kt)("h3",{id:"helm-repository-\ucd94\uac00"},"Helm Repository \ucd94\uac00"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add mlops-for-all https://mlops-for-all.github.io/helm-charts\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'"mlops-for-all" has been added to your repositories\n')),(0,r.kt)("h3",{id:"helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "mlops-for-all" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,r.kt)("h3",{id:"helm-install"},"Helm Install"),(0,r.kt)("p",null,"mlflow-server Helm Chart 0.2.0 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm install mlflow-server mlops-for-all/mlflow-server \\\n --namespace mlflow-system \\\n --version 0.2.0\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\uc8fc\uc758"),": \uc704\uc758 helm chart\ub294 MLflow \uc758 backend store \uc640 artifacts store \uc758 \uc811\uc18d \uc815\ubcf4\ub97c kubeflow \uc124\uce58 \uacfc\uc815\uc5d0\uc11c \uc0dd\uc131\ud55c minio\uc640 \uc704\uc758 ",(0,r.kt)("a",{parentName:"li",href:"#postgresql-db-%EC%84%A4%EC%B9%98"},"PostgreSQL DB \uc124\uce58"),"\uc5d0\uc11c \uc0dd\uc131\ud55c postgresql \uc815\ubcf4\ub97c default\ub85c \ud558\uc5ec \uc124\uce58\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ubcc4\uac1c\ub85c \uc0dd\uc131\ud55c DB \ud639\uc740 Object storage\ub97c \ud65c\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0, ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/mlops-for-all/helm-charts/tree/main/mlflow/chart"},"Helm Chart Repo"),"\ub97c \ucc38\uace0\ud558\uc5ec helm install \uc2dc value\ub97c \ub530\ub85c \uc124\uc815\ud558\uc5ec \uc124\uce58\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.")))),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME: mlflow-server\nLAST DEPLOYED: Sat Dec 18 22:02:13 2021\nNAMESPACE: mlflow-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n mlflow-system | grep mlflow-server\n")),(0,r.kt)("p",null,"mlflow-system namespace \uc5d0 1 \uac1c\uc758 mlflow-server \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub41c \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlflow-server-ffd66d858-6hm62 1/1 Running 0 74s\n")),(0,r.kt)("h3",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c MLflow Server\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc811\uc18d\ud558\uae30 \uc704\ud574, \ud3ec\ud2b8\ud3ec\uc6cc\ub529\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/mlflow-server-service -n mlflow-system 5000:5000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:5000"},"localhost:5000"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-install",src:l(5764).Z,width:"2882",height:"1464"})))}u.isMDXComponent=!0},5683:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/create-bucket-58bd2a673744c0144ffb14a2aeeef821.png"},1705:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/minio-install-587ecd302eecc621dbb568c124c80ccf.png"},5036:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/mlflow-bucket-63b427bd7a5147b8bae2ac69c57facff.png"},5764:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/mlflow-install-b3920befde2af7fdbf3677ab12036440.png"}}]); \ No newline at end of file diff --git a/assets/js/15cf2139.71da93ca.js b/assets/js/15cf2139.71da93ca.js deleted file mode 100644 index d5cd0f3c..00000000 --- a/assets/js/15cf2139.71da93ca.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9925],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>b});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=p(t),u=o,b=c["".concat(i,".").concat(u)]||c[u]||m[u]||r;return t?a.createElement(b,s(s({ref:n},d),{},{components:t})):a.createElement(b,s({ref:n},d))}));function b(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,s=new Array(r);s[0]=u;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var a=t(7462),o=(t(7294),t(3905));const r={title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},s=void 0,l={unversionedId:"setup-components/install-components-seldon",id:"setup-components/install-components-seldon",title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",source:"@site/docs/setup-components/install-components-seldon.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-seldon",permalink:"/docs/setup-components/install-components-seldon",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-components/install-components-seldon.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"2. MLflow Tracking Server",permalink:"/docs/setup-components/install-components-mlflow"},next:{title:"4. Prometheus & Grafana",permalink:"/docs/setup-components/install-components-pg"}},i={},p=[{value:"Seldon-Core",id:"seldon-core",level:2},{value:"Selon-Core \uc124\uce58",id:"selon-core-\uc124\uce58",level:2},{value:"Ambassador - Helm Repository \ucd94\uac00",id:"ambassador---helm-repository-\ucd94\uac00",level:3},{value:"Ambassador - Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"ambassador---helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Ambassador - Helm Install",id:"ambassador---helm-install",level:3},{value:"Seldon-Core - Helm Install",id:"seldon-core---helm-install",level:3},{value:"References",id:"references",level:2}],d={toc:p},c="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(c,(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"seldon-core"},"Seldon-Core"),(0,o.kt)("p",null,"Seldon-Core\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd\uc5d0 \uc218\ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uc624\ud508\uc18c\uc2a4 \ud504\ub808\uc784\uc6cc\ud06c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 Seldon-Core \uc758 \uacf5\uc2dd ",(0,o.kt)("a",{parentName:"p",href:"https://www.seldon.io/tech/products/core/"},"\uc81c\ud488 \uc124\uba85 \ud398\uc774\uc9c0")," \uc640 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/SeldonIO/seldon-core"},"\uae43\ud5d9")," \uadf8\ub9ac\uace0 API Deployment \ud30c\ud2b8\ub97c \ucc38\uace0\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"selon-core-\uc124\uce58"},"Selon-Core \uc124\uce58"),(0,o.kt)("p",null,"Seldon-Core\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \uc778\uadf8\ub808\uc2a4(Ingress)\ub97c \ub2f4\ub2f9\ud558\ub294 Ambassador \uc640 Istio \uc640 \uac19\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html"},"\ubaa8\ub4c8\uc774 \ud544\uc694\ud569\ub2c8\ub2e4"),".",(0,o.kt)("br",{parentName:"p"}),"\n","Seldon-Core \uc5d0\uc11c\ub294 Ambassador \uc640 Istio \ub9cc\uc744 \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\uba70, ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 Ambassador\ub97c \uc0ac\uc6a9\ud574 Seldon-core\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c Ambassador\ub97c \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"ambassador---helm-repository-\ucd94\uac00"},"Ambassador - Helm Repository \ucd94\uac00"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add datawire https://www.getambassador.io\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'"datawire" has been added to your repositories\n')),(0,o.kt)("h3",{id:"ambassador---helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Ambassador - Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "datawire" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,o.kt)("h3",{id:"ambassador---helm-install"},"Ambassador - Helm Install"),(0,o.kt)("p",null,"ambassador Chart 6.9.3 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm install ambassador datawire/ambassador \\\n --namespace seldon-system \\\n --create-namespace \\\n --set image.repository=quay.io/datawire/ambassador \\\n --set enableAES=false \\\n --set crds.keep=false \\\n --version 6.9.3\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\n\nW1206 17:01:36.026326 26635 warnings.go:70] rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role\nW1206 17:01:36.029764 26635 warnings.go:70] rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding\nNAME: ambassador\nLAST DEPLOYED: Mon Dec 6 17:01:34 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\nNOTES:\n-------------------------------------------------------------------------------\n Congratulations! You've successfully installed Ambassador!\n\n-------------------------------------------------------------------------------\nTo get the IP address of Ambassador, run the following commands:\nNOTE: It may take a few minutes for the LoadBalancer IP to be available.\n You can watch the status of by running 'kubectl get svc -w --namespace seldon-system ambassador'\n\n On GKE/Azure:\n export SERVICE_IP=$(kubectl get svc --namespace seldon-system ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n\n On AWS:\n export SERVICE_IP=$(kubectl get svc --namespace seldon-system ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n\n echo http://$SERVICE_IP:\n\nFor help, visit our Slack at http://a8r.io/Slack or view the documentation online at https://www.getambassador.io.\n")),(0,o.kt)("p",null,"seldon-system \uc5d0 4 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"ambassador-7f596c8b57-4s9xh 1/1 Running 0 7m15s\nambassador-7f596c8b57-dt6lr 1/1 Running 0 7m15s\nambassador-7f596c8b57-h5l6f 1/1 Running 0 7m15s\nambassador-agent-77bccdfcd5-d5jxj 1/1 Running 0 7m15s\n")),(0,o.kt)("h3",{id:"seldon-core---helm-install"},"Seldon-Core - Helm Install"),(0,o.kt)("p",null,"seldon-core-operator Chart 1.11.2 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm install seldon-core seldon-core-operator \\\n --repo https://storage.googleapis.com/seldon-charts \\\n --namespace seldon-system \\\n --set usageMetrics.enabled=true \\\n --set ambassador.enabled=true \\\n --version 1.11.2\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\n\nW1206 17:05:38.336391 28181 warnings.go:70] admissionregistration.k8s.io/v1beta1 ValidatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration\nNAME: seldon-core\nLAST DEPLOYED: Mon Dec 6 17:05:34 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\n")),(0,o.kt)("p",null,"seldon-system namespace \uc5d0 1 \uac1c\uc758 seldon-controller-manager pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system | grep seldon-controller\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-controller-manager-8457b8b5c7-r2frm 1/1 Running 0 2m22s\n")),(0,o.kt)("h2",{id:"references"},"References"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.seldon.io/projects/seldon-core/en/latest/examples/server_examples.html#examples-server-examples--page-root"},"Example Model Servers with Seldon"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/15cf2139.bdaf37eb.js b/assets/js/15cf2139.bdaf37eb.js new file mode 100644 index 00000000..1a9ff7be --- /dev/null +++ b/assets/js/15cf2139.bdaf37eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9925],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>b});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=p(t),u=o,b=c["".concat(i,".").concat(u)]||c[u]||m[u]||r;return t?a.createElement(b,s(s({ref:n},d),{},{components:t})):a.createElement(b,s({ref:n},d))}));function b(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,s=new Array(r);s[0]=u;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var a=t(7462),o=(t(7294),t(3905));const r={title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},s=void 0,l={unversionedId:"setup-components/install-components-seldon",id:"setup-components/install-components-seldon",title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",source:"@site/docs/setup-components/install-components-seldon.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-seldon",permalink:"/docs/setup-components/install-components-seldon",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-components/install-components-seldon.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"2. MLflow Tracking Server",permalink:"/docs/setup-components/install-components-mlflow"},next:{title:"4. Prometheus & Grafana",permalink:"/docs/setup-components/install-components-pg"}},i={},p=[{value:"Seldon-Core",id:"seldon-core",level:2},{value:"Selon-Core \uc124\uce58",id:"selon-core-\uc124\uce58",level:2},{value:"Ambassador - Helm Repository \ucd94\uac00",id:"ambassador---helm-repository-\ucd94\uac00",level:3},{value:"Ambassador - Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"ambassador---helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Ambassador - Helm Install",id:"ambassador---helm-install",level:3},{value:"Seldon-Core - Helm Install",id:"seldon-core---helm-install",level:3},{value:"References",id:"references",level:2}],d={toc:p},c="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(c,(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"seldon-core"},"Seldon-Core"),(0,o.kt)("p",null,"Seldon-Core\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd\uc5d0 \uc218\ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uc624\ud508\uc18c\uc2a4 \ud504\ub808\uc784\uc6cc\ud06c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 Seldon-Core \uc758 \uacf5\uc2dd ",(0,o.kt)("a",{parentName:"p",href:"https://www.seldon.io/tech/products/core/"},"\uc81c\ud488 \uc124\uba85 \ud398\uc774\uc9c0")," \uc640 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/SeldonIO/seldon-core"},"\uae43\ud5d9")," \uadf8\ub9ac\uace0 API Deployment \ud30c\ud2b8\ub97c \ucc38\uace0\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"selon-core-\uc124\uce58"},"Selon-Core \uc124\uce58"),(0,o.kt)("p",null,"Seldon-Core\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \uc778\uadf8\ub808\uc2a4(Ingress)\ub97c \ub2f4\ub2f9\ud558\ub294 Ambassador \uc640 Istio \uc640 \uac19\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html"},"\ubaa8\ub4c8\uc774 \ud544\uc694\ud569\ub2c8\ub2e4"),".",(0,o.kt)("br",{parentName:"p"}),"\n","Seldon-Core \uc5d0\uc11c\ub294 Ambassador \uc640 Istio \ub9cc\uc744 \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\uba70, ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 Ambassador\ub97c \uc0ac\uc6a9\ud574 Seldon-core\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c Ambassador\ub97c \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"ambassador---helm-repository-\ucd94\uac00"},"Ambassador - Helm Repository \ucd94\uac00"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add datawire https://www.getambassador.io\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'"datawire" has been added to your repositories\n')),(0,o.kt)("h3",{id:"ambassador---helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Ambassador - Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "datawire" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,o.kt)("h3",{id:"ambassador---helm-install"},"Ambassador - Helm Install"),(0,o.kt)("p",null,"ambassador Chart 6.9.3 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm install ambassador datawire/ambassador \\\n --namespace seldon-system \\\n --create-namespace \\\n --set image.repository=quay.io/datawire/ambassador \\\n --set enableAES=false \\\n --set crds.keep=false \\\n --version 6.9.3\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\n\nW1206 17:01:36.026326 26635 warnings.go:70] rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role\nW1206 17:01:36.029764 26635 warnings.go:70] rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding\nNAME: ambassador\nLAST DEPLOYED: Mon Dec 6 17:01:34 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\nNOTES:\n-------------------------------------------------------------------------------\n Congratulations! You've successfully installed Ambassador!\n\n-------------------------------------------------------------------------------\nTo get the IP address of Ambassador, run the following commands:\nNOTE: It may take a few minutes for the LoadBalancer IP to be available.\n You can watch the status of by running 'kubectl get svc -w --namespace seldon-system ambassador'\n\n On GKE/Azure:\n export SERVICE_IP=$(kubectl get svc --namespace seldon-system ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n\n On AWS:\n export SERVICE_IP=$(kubectl get svc --namespace seldon-system ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n\n echo http://$SERVICE_IP:\n\nFor help, visit our Slack at http://a8r.io/Slack or view the documentation online at https://www.getambassador.io.\n")),(0,o.kt)("p",null,"seldon-system \uc5d0 4 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"ambassador-7f596c8b57-4s9xh 1/1 Running 0 7m15s\nambassador-7f596c8b57-dt6lr 1/1 Running 0 7m15s\nambassador-7f596c8b57-h5l6f 1/1 Running 0 7m15s\nambassador-agent-77bccdfcd5-d5jxj 1/1 Running 0 7m15s\n")),(0,o.kt)("h3",{id:"seldon-core---helm-install"},"Seldon-Core - Helm Install"),(0,o.kt)("p",null,"seldon-core-operator Chart 1.11.2 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm install seldon-core seldon-core-operator \\\n --repo https://storage.googleapis.com/seldon-charts \\\n --namespace seldon-system \\\n --set usageMetrics.enabled=true \\\n --set ambassador.enabled=true \\\n --version 1.11.2\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\n\nW1206 17:05:38.336391 28181 warnings.go:70] admissionregistration.k8s.io/v1beta1 ValidatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration\nNAME: seldon-core\nLAST DEPLOYED: Mon Dec 6 17:05:34 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\n")),(0,o.kt)("p",null,"seldon-system namespace \uc5d0 1 \uac1c\uc758 seldon-controller-manager pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system | grep seldon-controller\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-controller-manager-8457b8b5c7-r2frm 1/1 Running 0 2m22s\n")),(0,o.kt)("h2",{id:"references"},"References"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.seldon.io/projects/seldon-core/en/latest/examples/server_examples.html#examples-server-examples--page-root"},"Example Model Servers with Seldon"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/165f2d18.0a97117c.js b/assets/js/165f2d18.0a97117c.js deleted file mode 100644 index f813b9a6..00000000 --- a/assets/js/165f2d18.0a97117c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6397],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),d=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},b=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=d(r),b=n,f=u["".concat(l,".").concat(b)]||u[b]||c[b]||a;return r?o.createElement(f,s(s({ref:t},p),{},{components:r})):o.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=b;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:n,s[1]=i;for(var d=2;d{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var o=r(7462),n=(r(7294),r(3905));const a={title:"3. Tensorboards",description:"",sidebar_position:3,contributors:["Jaeyeon Kim"]},s=void 0,i={unversionedId:"kubeflow-dashboard-guide/tensorboards",id:"version-1.0/kubeflow-dashboard-guide/tensorboards",title:"3. Tensorboards",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/tensorboards.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/tensorboards",permalink:"/docs/1.0/kubeflow-dashboard-guide/tensorboards",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/tensorboards.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Tensorboards",description:"",sidebar_position:3,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"2. Notebooks",permalink:"/docs/1.0/kubeflow-dashboard-guide/notebooks"},next:{title:"4. Volumes",permalink:"/docs/1.0/kubeflow-dashboard-guide/volumes"}},l={},d=[],p={toc:d},u="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Tensorboards\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"tensorboard",src:r(1277).Z,width:"2030",height:"406"})),(0,n.kt)("p",null,"Tensorboards \ud0ed\uc740 Tensorflow, PyTorch \ub4f1\uc758 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Tensorboard \uc720\ud2f8\uc774 \uc0dd\uc131\ud55c ML \ud559\uc2b5 \uad00\ub828 \ub370\uc774\ud130\ub97c \uc2dc\uac01\ud654\ud558\ub294 \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84(Tensorboard Server)\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc0dd\uc131\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc774\ub807\uac8c \uc0dd\uc131\ud55c \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\ub294, \uc77c\ubc18\uc801\uc778 \uc6d0\uaca9 \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\uc758 \uc0ac\uc6a9\ubc95\uacfc \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc73c\uba70, ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/#tensorboard"},"Kubeflow \ud30c\uc774\ud504\ub77c\uc778 \ub7f0\uc5d0\uc11c \ubc14\ub85c \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 \uc6a9\ub3c4"),"\ub85c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"Kubeflow \ud30c\uc774\ud504\ub77c\uc778 \ub7f0\uc758 \uacb0\uacfc\ub97c \uc2dc\uac01\ud654\ud558\ub294 \ubc29\ubc95\uc5d0\ub294 ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/"},"\ub2e4\uc591\ud55c \ubc29\uc2dd"),"\uc774 \uc788\uc73c\uba70, ",(0,n.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \ub354 \uc77c\ubc18\uc801\uc73c\ub85c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Kubeflow \ucef4\ud3ec\ub10c\ud2b8\uc758 Visualization \uae30\ub2a5\uacfc MLflow\uc758 \uc2dc\uac01\ud654 \uae30\ub2a5\uc744 \ud65c\uc6a9\ud560 \uc608\uc815\uc774\ubbc0\ub85c, Tensorboards \ud398\uc774\uc9c0\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 \uc0dd\ub7b5\ud558\uaca0\uc2b5\ub2c8\ub2e4."))}c.isMDXComponent=!0},6316:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},1277:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tensorboard-ec19f59c613e94e6b1ba7759e853f4ed.png"}}]); \ No newline at end of file diff --git a/assets/js/165f2d18.1a36a9b4.js b/assets/js/165f2d18.1a36a9b4.js new file mode 100644 index 00000000..2ef61e57 --- /dev/null +++ b/assets/js/165f2d18.1a36a9b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6397],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),d=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},b=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=d(r),b=n,f=u["".concat(l,".").concat(b)]||u[b]||c[b]||a;return r?o.createElement(f,s(s({ref:t},p),{},{components:r})):o.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=b;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:n,s[1]=i;for(var d=2;d{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var o=r(7462),n=(r(7294),r(3905));const a={title:"3. Tensorboards",description:"",sidebar_position:3,contributors:["Jaeyeon Kim"]},s=void 0,i={unversionedId:"kubeflow-dashboard-guide/tensorboards",id:"version-1.0/kubeflow-dashboard-guide/tensorboards",title:"3. Tensorboards",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/tensorboards.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/tensorboards",permalink:"/docs/1.0/kubeflow-dashboard-guide/tensorboards",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/tensorboards.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Tensorboards",description:"",sidebar_position:3,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"2. Notebooks",permalink:"/docs/1.0/kubeflow-dashboard-guide/notebooks"},next:{title:"4. Volumes",permalink:"/docs/1.0/kubeflow-dashboard-guide/volumes"}},l={},d=[],p={toc:d},u="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Tensorboards\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"tensorboard",src:r(1277).Z,width:"2030",height:"406"})),(0,n.kt)("p",null,"Tensorboards \ud0ed\uc740 Tensorflow, PyTorch \ub4f1\uc758 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Tensorboard \uc720\ud2f8\uc774 \uc0dd\uc131\ud55c ML \ud559\uc2b5 \uad00\ub828 \ub370\uc774\ud130\ub97c \uc2dc\uac01\ud654\ud558\ub294 \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84(Tensorboard Server)\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc0dd\uc131\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc774\ub807\uac8c \uc0dd\uc131\ud55c \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\ub294, \uc77c\ubc18\uc801\uc778 \uc6d0\uaca9 \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\uc758 \uc0ac\uc6a9\ubc95\uacfc \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc73c\uba70, ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/#tensorboard"},"Kubeflow \ud30c\uc774\ud504\ub77c\uc778 \ub7f0\uc5d0\uc11c \ubc14\ub85c \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 \uc6a9\ub3c4"),"\ub85c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"Kubeflow \ud30c\uc774\ud504\ub77c\uc778 \ub7f0\uc758 \uacb0\uacfc\ub97c \uc2dc\uac01\ud654\ud558\ub294 \ubc29\ubc95\uc5d0\ub294 ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/"},"\ub2e4\uc591\ud55c \ubc29\uc2dd"),"\uc774 \uc788\uc73c\uba70, ",(0,n.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \ub354 \uc77c\ubc18\uc801\uc73c\ub85c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Kubeflow \ucef4\ud3ec\ub10c\ud2b8\uc758 Visualization \uae30\ub2a5\uacfc MLflow\uc758 \uc2dc\uac01\ud654 \uae30\ub2a5\uc744 \ud65c\uc6a9\ud560 \uc608\uc815\uc774\ubbc0\ub85c, Tensorboards \ud398\uc774\uc9c0\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 \uc0dd\ub7b5\ud558\uaca0\uc2b5\ub2c8\ub2e4."))}c.isMDXComponent=!0},6316:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},1277:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tensorboard-ec19f59c613e94e6b1ba7759e853f4ed.png"}}]); \ No newline at end of file diff --git a/assets/js/1671dd43.1a926f6e.js b/assets/js/1671dd43.1a926f6e.js new file mode 100644 index 00000000..5b07ba8b --- /dev/null +++ b/assets/js/1671dd43.1a926f6e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6572],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function s(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var u=i.createContext({}),o=function(e){var n=i.useContext(u),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=o(e.components);return i.createElement(u.Provider,{value:n},e.children)},d="mdxType",k={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},b=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,u=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=o(t),b=r,m=d["".concat(u,".").concat(b)]||d[b]||k[b]||a;return t?i.createElement(m,s(s({ref:n},p),{},{components:t})):i.createElement(m,s({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,s=new Array(a);s[0]=b;var l={};for(var u in n)hasOwnProperty.call(n,u)&&(l[u]=n[u]);l.originalType=e,l[d]="string"==typeof e?e:r,s[1]=l;for(var o=2;o{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>s,default:()=>k,frontMatter:()=>a,metadata:()=>l,toc:()=>o});var i=t(7462),r=(t(7294),t(3905));const a={title:"4.2. Minikube",description:"",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},s=void 0,l={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-minikube",id:"version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",title:"4.2. Minikube",description:"",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"4.2. Minikube",description:"",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4.3. Kubeadm",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm"},next:{title:"5. Install Kubernetes Modules",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes-module"}},u={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"Minikube binary",id:"minikube-binary",level:3},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"Disable default addons",id:"disable-default-addons",level:3},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2}],p={toc:o},d="wrapper";function k(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,i.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"minikube-binary"},"Minikube binary"),(0,r.kt)("p",null,"Minikube\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, v1.24.0 \ubc84\uc804\uc758 Minikube \ubc14\uc774\ub108\ub9ac\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://github.com/kubernetes/minikube/releases/download/v1.24.0/minikube-linux-amd64\nsudo install minikube-linux-amd64 /usr/local/bin/minikube\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube version\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ minikube version\nminikube version: v1.24.0\ncommit: 76b94fb3c4e8ac5062daf70d60cf03ddcc0a741b\n")),(0,r.kt)("h2",{id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5"},"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5"),(0,r.kt)("p",null,"\uc774\uc81c Minikube\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uad6c\ucd95\ud569\ub2c8\ub2e4.\nGPU \uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uacfc \ud074\ub7ec\uc2a4\ud130-\ud074\ub77c\uc774\uc5b8\ud2b8 \uac04 \ud1b5\uc2e0\uc744 \uac04\ud3b8\ud558\uac8c \uc218\ud589\ud558\uae30 \uc704\ud574, Minikube \ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"driver=none")," \uc635\uc158\uc744 \ud65c\uc6a9\ud558\uc5ec \uc2e4\ud589\ud569\ub2c8\ub2e4. ",(0,r.kt)("inlineCode",{parentName:"p"},"driver=none")," \uc635\uc158\uc740 root user \ub85c \uc2e4\ud589\ud574\uc57c \ud568\uc5d0 \uc8fc\uc758 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"root user\ub85c \uc804\ud658\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo su\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"minikube start"),"\ub97c \uc218\ud589\ud558\uc5ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\uc744 \uc9c4\ud589\ud569\ub2c8\ub2e4. Kubeflow\uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uc744 \uc704\ud574, \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ubc84\uc804\uc740 v1.21.7\ub85c \uc9c0\uc815\ud558\uc5ec \uad6c\ucd95\ud558\uba70 ",(0,r.kt)("inlineCode",{parentName:"p"},"--extra-config"),"\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube start --driver=none \\\n --kubernetes-version=v1.21.7 \\\n --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key \\\n --extra-config=apiserver.service-account-issuer=kubernetes.default.svc\n")),(0,r.kt)("h3",{id:"disable-default-addons"},"Disable default addons"),(0,r.kt)("p",null,"Minikube\ub97c \uc124\uce58\ud558\uba74 Default\ub85c \uc124\uce58\ub418\ub294 addon\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc774 \uc911 \uc800\ud76c\uac00 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc744 addon\uc744 \ube44\ud65c\uc131\ud654\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube addons disable storage-provisioner\nminikube addons disable default-storageclass\n")),(0,r.kt)("p",null,"\ubaa8\ub4e0 addon\uc774 \ube44\ud65c\uc131\ud654\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube addons list\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"root@ubuntu:/home/mlops# minikube addons list\n|-----------------------------|----------|--------------|-----------------------|\n| ADDON NAME | PROFILE | STATUS | MAINTAINER |\n|-----------------------------|----------|--------------|-----------------------|\n| ambassador | minikube | disabled | unknown (third-party) |\n| auto-pause | minikube | disabled | google |\n| csi-hostpath-driver | minikube | disabled | kubernetes |\n| dashboard | minikube | disabled | kubernetes |\n| default-storageclass | minikube | disabled | kubernetes |\n| efk | minikube | disabled | unknown (third-party) |\n| freshpod | minikube | disabled | google |\n| gcp-auth | minikube | disabled | google |\n| gvisor | minikube | disabled | google |\n| helm-tiller | minikube | disabled | unknown (third-party) |\n| ingress | minikube | disabled | unknown (third-party) |\n| ingress-dns | minikube | disabled | unknown (third-party) |\n| istio | minikube | disabled | unknown (third-party) |\n| istio-provisioner | minikube | disabled | unknown (third-party) |\n| kubevirt | minikube | disabled | unknown (third-party) |\n| logviewer | minikube | disabled | google |\n| metallb | minikube | disabled | unknown (third-party) |\n| metrics-server | minikube | disabled | kubernetes |\n| nvidia-driver-installer | minikube | disabled | google |\n| nvidia-gpu-device-plugin | minikube | disabled | unknown (third-party) |\n| olm | minikube | disabled | unknown (third-party) |\n| pod-security-policy | minikube | disabled | unknown (third-party) |\n| portainer | minikube | disabled | portainer.io |\n| registry | minikube | disabled | google |\n| registry-aliases | minikube | disabled | unknown (third-party) |\n| registry-creds | minikube | disabled | unknown (third-party) |\n| storage-provisioner | minikube | disabled | kubernetes |\n| storage-provisioner-gluster | minikube | disabled | unknown (third-party) |\n| volumesnapshots | minikube | disabled | kubernetes |\n|-----------------------------|----------|--------------|-----------------------|\n")),(0,r.kt)("h2",{id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5"},"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5"),(0,r.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc5d0 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uc744 \uc704\ud55c \ub3c4\uad6c\ub97c \uc124\uce58\ud569\ub2c8\ub2e4.\n",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uac00 \ubd84\ub9ac\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub294 root user\ub85c \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc9c4\ud589\ud574\uc57c \ud568\uc5d0 \uc8fc\uc758\ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uac00 \ubd84\ub9ac\ub41c \uacbd\uc6b0, \uc6b0\uc120 kubernetes\uc758 \uad00\ub9ac\uc790 \uc778\uc99d \uc815\ubcf4\ub97c ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\ub85c \uac00\uc838\uc635\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc5d0\uc11c config\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\nminikube kubectl -- config view --flatten\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uc815\ubcf4\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"cluster:\ncertificate-authority-data: LS0tLS1CRUd....\nextensions:",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"- extension:\n last-update: Mon, 06 Dec 2021 06:55:46 UTC\n provider: minikube.sigs.k8s.io\n version: v1.24.0\n name: cluster_info\nserver: https://192.168.0.62:8443\n"))," name: minikube\ncontexts:"),(0,r.kt)("li",{parentName:"ul"},"context:\ncluster: minikube\nextensions:",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"- extension:\n last-update: Mon, 06 Dec 2021 06:55:46 UTC\n provider: minikube.sigs.k8s.io\n version: v1.24.0\n name: context_info\nnamespace: default\nuser: minikube\n"))," name: minikube\ncurrent-context: minikube\nkind: Config\npreferences: {}\nusers:"),(0,r.kt)("li",{parentName:"ul"},"name: minikube\nuser:\nclient-certificate-data: LS0tLS1CRUdJTi....\nclient-key-data: LS0tLS1CRUdJTiBSU0....",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"")))),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub178\ub4dc\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},".kube")," \ud3f4\ub354\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\nmkdir -p /home/$USER/.kube\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud574\ub2f9 \ud30c\uc77c\uc5d0 2. \uc5d0\uc11c \ucd9c\ub825\ub41c \uc815\ubcf4\ub97c \ubd99\uc5ec\ub123\uc740 \ub4a4 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"vi /home/$USER/.kube/config\n")))),(0,r.kt)("h2",{id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58"},"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-kubernetes-module"},"Setup Kubernetes Modules"),"\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"helm"),(0,r.kt)("li",{parentName:"ul"},"kustomize"),(0,r.kt)("li",{parentName:"ul"},"CSI plugin"),(0,r.kt)("li",{parentName:"ul"},"[Optional]"," nvidia-docker, nvidia-device-plugin")),(0,r.kt)("h2",{id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\ucd5c\uc885\uc801\uc73c\ub85c node\uac00 Ready \uc778\uc9c0, OS, Docker, Kubernetes \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get nodes -o wide\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nubuntu Ready control-plane,master 2d23h v1.21.7 192.168.0.75 Ubuntu 20.04.3 LTS 5.4.0-91-generic docker://20.10.11\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1671dd43.3395efcb.js b/assets/js/1671dd43.3395efcb.js deleted file mode 100644 index f5dffba9..00000000 --- a/assets/js/1671dd43.3395efcb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6572],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function s(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var u=i.createContext({}),o=function(e){var n=i.useContext(u),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},p=function(e){var n=o(e.components);return i.createElement(u.Provider,{value:n},e.children)},d="mdxType",k={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},b=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,u=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=o(t),b=r,m=d["".concat(u,".").concat(b)]||d[b]||k[b]||a;return t?i.createElement(m,s(s({ref:n},p),{},{components:t})):i.createElement(m,s({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,s=new Array(a);s[0]=b;var l={};for(var u in n)hasOwnProperty.call(n,u)&&(l[u]=n[u]);l.originalType=e,l[d]="string"==typeof e?e:r,s[1]=l;for(var o=2;o{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>s,default:()=>k,frontMatter:()=>a,metadata:()=>l,toc:()=>o});var i=t(7462),r=(t(7294),t(3905));const a={title:"4.2. Minikube",description:"",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},s=void 0,l={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-minikube",id:"version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",title:"4.2. Minikube",description:"",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"4.2. Minikube",description:"",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4.3. Kubeadm",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm"},next:{title:"5. Install Kubernetes Modules",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes-module"}},u={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"Minikube binary",id:"minikube-binary",level:3},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"Disable default addons",id:"disable-default-addons",level:3},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2}],p={toc:o},d="wrapper";function k(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,i.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"minikube-binary"},"Minikube binary"),(0,r.kt)("p",null,"Minikube\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, v1.24.0 \ubc84\uc804\uc758 Minikube \ubc14\uc774\ub108\ub9ac\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://github.com/kubernetes/minikube/releases/download/v1.24.0/minikube-linux-amd64\nsudo install minikube-linux-amd64 /usr/local/bin/minikube\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube version\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ minikube version\nminikube version: v1.24.0\ncommit: 76b94fb3c4e8ac5062daf70d60cf03ddcc0a741b\n")),(0,r.kt)("h2",{id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5"},"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5"),(0,r.kt)("p",null,"\uc774\uc81c Minikube\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uad6c\ucd95\ud569\ub2c8\ub2e4.\nGPU \uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uacfc \ud074\ub7ec\uc2a4\ud130-\ud074\ub77c\uc774\uc5b8\ud2b8 \uac04 \ud1b5\uc2e0\uc744 \uac04\ud3b8\ud558\uac8c \uc218\ud589\ud558\uae30 \uc704\ud574, Minikube \ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"driver=none")," \uc635\uc158\uc744 \ud65c\uc6a9\ud558\uc5ec \uc2e4\ud589\ud569\ub2c8\ub2e4. ",(0,r.kt)("inlineCode",{parentName:"p"},"driver=none")," \uc635\uc158\uc740 root user \ub85c \uc2e4\ud589\ud574\uc57c \ud568\uc5d0 \uc8fc\uc758 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"root user\ub85c \uc804\ud658\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo su\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"minikube start"),"\ub97c \uc218\ud589\ud558\uc5ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\uc744 \uc9c4\ud589\ud569\ub2c8\ub2e4. Kubeflow\uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uc744 \uc704\ud574, \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ubc84\uc804\uc740 v1.21.7\ub85c \uc9c0\uc815\ud558\uc5ec \uad6c\ucd95\ud558\uba70 ",(0,r.kt)("inlineCode",{parentName:"p"},"--extra-config"),"\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube start --driver=none \\\n --kubernetes-version=v1.21.7 \\\n --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key \\\n --extra-config=apiserver.service-account-issuer=kubernetes.default.svc\n")),(0,r.kt)("h3",{id:"disable-default-addons"},"Disable default addons"),(0,r.kt)("p",null,"Minikube\ub97c \uc124\uce58\ud558\uba74 Default\ub85c \uc124\uce58\ub418\ub294 addon\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc774 \uc911 \uc800\ud76c\uac00 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc744 addon\uc744 \ube44\ud65c\uc131\ud654\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube addons disable storage-provisioner\nminikube addons disable default-storageclass\n")),(0,r.kt)("p",null,"\ubaa8\ub4e0 addon\uc774 \ube44\ud65c\uc131\ud654\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube addons list\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"root@ubuntu:/home/mlops# minikube addons list\n|-----------------------------|----------|--------------|-----------------------|\n| ADDON NAME | PROFILE | STATUS | MAINTAINER |\n|-----------------------------|----------|--------------|-----------------------|\n| ambassador | minikube | disabled | unknown (third-party) |\n| auto-pause | minikube | disabled | google |\n| csi-hostpath-driver | minikube | disabled | kubernetes |\n| dashboard | minikube | disabled | kubernetes |\n| default-storageclass | minikube | disabled | kubernetes |\n| efk | minikube | disabled | unknown (third-party) |\n| freshpod | minikube | disabled | google |\n| gcp-auth | minikube | disabled | google |\n| gvisor | minikube | disabled | google |\n| helm-tiller | minikube | disabled | unknown (third-party) |\n| ingress | minikube | disabled | unknown (third-party) |\n| ingress-dns | minikube | disabled | unknown (third-party) |\n| istio | minikube | disabled | unknown (third-party) |\n| istio-provisioner | minikube | disabled | unknown (third-party) |\n| kubevirt | minikube | disabled | unknown (third-party) |\n| logviewer | minikube | disabled | google |\n| metallb | minikube | disabled | unknown (third-party) |\n| metrics-server | minikube | disabled | kubernetes |\n| nvidia-driver-installer | minikube | disabled | google |\n| nvidia-gpu-device-plugin | minikube | disabled | unknown (third-party) |\n| olm | minikube | disabled | unknown (third-party) |\n| pod-security-policy | minikube | disabled | unknown (third-party) |\n| portainer | minikube | disabled | portainer.io |\n| registry | minikube | disabled | google |\n| registry-aliases | minikube | disabled | unknown (third-party) |\n| registry-creds | minikube | disabled | unknown (third-party) |\n| storage-provisioner | minikube | disabled | kubernetes |\n| storage-provisioner-gluster | minikube | disabled | unknown (third-party) |\n| volumesnapshots | minikube | disabled | kubernetes |\n|-----------------------------|----------|--------------|-----------------------|\n")),(0,r.kt)("h2",{id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5"},"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5"),(0,r.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc5d0 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uc744 \uc704\ud55c \ub3c4\uad6c\ub97c \uc124\uce58\ud569\ub2c8\ub2e4.\n",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uac00 \ubd84\ub9ac\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub294 root user\ub85c \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc9c4\ud589\ud574\uc57c \ud568\uc5d0 \uc8fc\uc758\ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uac00 \ubd84\ub9ac\ub41c \uacbd\uc6b0, \uc6b0\uc120 kubernetes\uc758 \uad00\ub9ac\uc790 \uc778\uc99d \uc815\ubcf4\ub97c ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\ub85c \uac00\uc838\uc635\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc5d0\uc11c config\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\nminikube kubectl -- config view --flatten\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uc815\ubcf4\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"cluster:\ncertificate-authority-data: LS0tLS1CRUd....\nextensions:",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"- extension:\n last-update: Mon, 06 Dec 2021 06:55:46 UTC\n provider: minikube.sigs.k8s.io\n version: v1.24.0\n name: cluster_info\nserver: https://192.168.0.62:8443\n"))," name: minikube\ncontexts:"),(0,r.kt)("li",{parentName:"ul"},"context:\ncluster: minikube\nextensions:",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"- extension:\n last-update: Mon, 06 Dec 2021 06:55:46 UTC\n provider: minikube.sigs.k8s.io\n version: v1.24.0\n name: context_info\nnamespace: default\nuser: minikube\n"))," name: minikube\ncurrent-context: minikube\nkind: Config\npreferences: {}\nusers:"),(0,r.kt)("li",{parentName:"ul"},"name: minikube\nuser:\nclient-certificate-data: LS0tLS1CRUdJTi....\nclient-key-data: LS0tLS1CRUdJTiBSU0....",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"")))),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub178\ub4dc\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},".kube")," \ud3f4\ub354\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\nmkdir -p /home/$USER/.kube\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud574\ub2f9 \ud30c\uc77c\uc5d0 2. \uc5d0\uc11c \ucd9c\ub825\ub41c \uc815\ubcf4\ub97c \ubd99\uc5ec\ub123\uc740 \ub4a4 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"vi /home/$USER/.kube/config\n")))),(0,r.kt)("h2",{id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58"},"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-kubernetes-module"},"Setup Kubernetes Modules"),"\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"helm"),(0,r.kt)("li",{parentName:"ul"},"kustomize"),(0,r.kt)("li",{parentName:"ul"},"CSI plugin"),(0,r.kt)("li",{parentName:"ul"},"[Optional]"," nvidia-docker, nvidia-device-plugin")),(0,r.kt)("h2",{id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\ucd5c\uc885\uc801\uc73c\ub85c node\uac00 Ready \uc778\uc9c0, OS, Docker, Kubernetes \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get nodes -o wide\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nubuntu Ready control-plane,master 2d23h v1.21.7 192.168.0.75 Ubuntu 20.04.3 LTS 5.4.0-91-generic docker://20.10.11\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/167d5ab1.1450eec0.js b/assets/js/167d5ab1.1450eec0.js new file mode 100644 index 00000000..f14dcd2a --- /dev/null +++ b/assets/js/167d5ab1.1450eec0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4177],{3905:(n,e,t)=>{t.d(e,{Zo:()=>m,kt:()=>c});var a=t(7294);function r(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function p(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,a)}return t}function i(n){for(var e=1;e=0||(r[t]=n[t]);return r}(n,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(n);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(r[t]=n[t])}return r}var o=a.createContext({}),s=function(n){var e=a.useContext(o),t=e;return n&&(t="function"==typeof n?n(e):i(i({},e),n)),t},m=function(n){var e=s(n.components);return a.createElement(o.Provider,{value:e},n.children)},d="mdxType",_={inlineCode:"code",wrapper:function(n){var e=n.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(n,e){var t=n.components,r=n.mdxType,p=n.originalType,o=n.parentName,m=l(n,["components","mdxType","originalType","parentName"]),d=s(t),u=r,c=d["".concat(o,".").concat(u)]||d[u]||_[u]||p;return t?a.createElement(c,i(i({ref:e},m),{},{components:t})):a.createElement(c,i({ref:e},m))}));function c(n,e){var t=arguments,r=e&&e.mdxType;if("string"==typeof n||r){var p=t.length,i=new Array(p);i[0]=u;var l={};for(var o in e)hasOwnProperty.call(e,o)&&(l[o]=e[o]);l.originalType=n,l[d]="string"==typeof n?n:r,i[1]=l;for(var s=2;s{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>_,frontMatter:()=>p,metadata:()=>l,toc:()=>s});var a=t(7462),r=(t(7294),t(3905));const p={title:"9. Component - Environment",description:"",sidebar_position:9,contributors:["Jongseob Jeon"]},i=void 0,l={unversionedId:"kubeflow/advanced-environment",id:"version-1.0/kubeflow/advanced-environment",title:"9. Component - Environment",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-environment.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-environment",permalink:"/docs/1.0/kubeflow/advanced-environment",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-environment.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:9,frontMatter:{title:"9. Component - Environment",description:"",sidebar_position:9,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"8. Component - InputPath/OutputPath",permalink:"/docs/1.0/kubeflow/advanced-component"},next:{title:"10. Pipeline - Setting",permalink:"/docs/1.0/kubeflow/advanced-pipeline"}},o={},s=[{value:"Component Environment",id:"component-environment",level:2},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"\ud328\ud0a4\uc9c0 \ucd94\uac00 \ubc29\ubc95",id:"\ud328\ud0a4\uc9c0-\ucd94\uac00-\ubc29\ubc95",level:2},{value:"1. base_image",id:"1-base_image",level:3},{value:"2. packages_to_install",id:"2-packages_to_install",level:3}],m={toc:s},d="wrapper";function _(n){let{components:e,...t}=n;return(0,r.kt)(d,(0,a.Z)({},m,t,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"component-environment"},"Component Environment"),(0,r.kt)("p",null,"\uc55e\uc11c ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-component"},"8. Component - InputPath/OutputPath"),"\uc5d0\uc11c \uc791\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uba74 \uc2e4\ud328\ud558\uac8c \ub429\ub2c8\ub2e4. \uc65c \uc2e4\ud328\ud558\ub294\uc9c0 \uc54c\uc544\ubcf4\uace0 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub420 \uc218 \uc788\ub3c4\ub85d \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-component#convert-to-kubeflow-format"},"\uc55e\uc5d0\uc11c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8"),"\ub97c yaml\ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc704\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \ud30c\uc77c\uc744 \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: model, type: dill}\n- {name: kernel, type: String}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --model\n - {inputPath: model}\n - --kernel\n - {inputValue: kernel}\n')),(0,r.kt)("p",null,"\uc55e\uc11c ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-component#convert-to-kubeflow-format"},"Basic Usage Component"),"\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc5d0 \ub530\ub974\uba74 \uc774 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\ud558\uc9c0\ub9cc \uc704\uc5d0\uc11c \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uac8c \ub429\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8 \uc774\uc720\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \uc2e4\ud589\ub418\ub294 \ubc29\uc2dd\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","Kubeflow\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub294 \uac01\uac01 \ub3c5\ub9bd\ub41c \ucee8\ud14c\uc774\ub108 \uc704\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc790\uc138\ud788 \ubcf4\uba74 \uc0dd\uc131\ub41c \ub9cc\ub4e0 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \uc5d0\uc11c \uc815\ud574\uc9c4 \uc774\ubbf8\uc9c0\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"image: python:3.7")," \uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc5b4\ub5a4 \uc774\uc720 \ub54c\ubb38\uc5d0 \uc2e4\ud589\uc774 \uc548 \ub418\ub294\uc9c0 \ub208\uce58\ucc44\uc2e0 \ubd84\ub4e4\ub3c4 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"python:3.7")," \uc774\ubbf8\uc9c0\uc5d0\ub294 \uc6b0\ub9ac\uac00 \uc0ac\uc6a9\ud558\uace0\uc790 \ud558\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"dill"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pandas"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sklearn")," \uc774 \uc124\uce58\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub7ec\ubbc0\ub85c \uc2e4\ud589\ud560 \ub54c \ud574\ub2f9 \ud328\ud0a4\uc9c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \uc5d0\ub7ec\uc640 \ud568\uaed8 \uc2e4\ud589\uc774 \uc548 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uadf8\ub7fc \uc5b4\ub5bb\uac8c \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc744\uae4c\uc694?"),(0,r.kt)("h2",{id:"\ud328\ud0a4\uc9c0-\ucd94\uac00-\ubc29\ubc95"},"\ud328\ud0a4\uc9c0 \ucd94\uac00 \ubc29\ubc95"),(0,r.kt)("p",null,"Kubeflow\ub97c \ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ub450 \uac00\uc9c0 \ubc29\ubc95\uc744 \ud1b5\ud574 \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"base_image")," \uc0ac\uc6a9"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"package_to_install")," \uc0ac\uc6a9")),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \ucef4\ud30c\uc77c\ud560 \ub54c \uc0ac\uc6a9\ud588\ub358 \ud568\uc218 ",(0,r.kt)("inlineCode",{parentName:"p"},"create_component_from_func")," \uac00 \uc5b4\ub5a4 argument\ub4e4\uc744 \ubc1b\uc744 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"def create_component_from_func(\n func: Callable,\n output_component_file: Optional[str] = None,\n base_image: Optional[str] = None,\n packages_to_install: List[str] = None,\n annotations: Optional[Mapping[str, str]] = None,\n):\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"func"),": \ucef4\ud3ec\ub10c\ud2b8\ub85c \ub9cc\ub4e4 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c \ud568\uc218"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"base_image"),": \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \uc2e4\ud589\ud560 \uc774\ubbf8\uc9c0"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"packages_to_install"),": \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc11c \ucd94\uac00\ub85c \uc124\uce58\ud574\uc57c \ud558\ub294 \ud328\ud0a4\uc9c0")),(0,r.kt)("h3",{id:"1-base_image"},"1. base_image"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub97c \uc880 \ub354 \uc790\uc138\ud788 \ub4e4\uc5ec\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull base_image")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"pip install packages_to_install")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\ub9cc\uc57d \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc0ac\uc6a9\ud558\ub294 base_image\uc5d0 \ud328\ud0a4\uc9c0\ub4e4\uc774 \uc804\ubd80 \uc124\uce58\ub418\uc5b4 \uc788\ub2e4\uba74 \ucd94\uac00\uc801\uc778 \ud328\ud0a4\uc9c0 \uc124\uce58 \uc5c6\uc774 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 Dockerfile\uc744 \uc791\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-dockerfile"},"FROM python:3.7\n\nRUN pip install dill pandas scikit-learn\n")),(0,r.kt)("p",null,"\uc704\uc758 Dockerfile\uc744 \uc774\uc6a9\ud574 \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc2e4\uc2b5\uc5d0\uc11c \uc0ac\uc6a9\ud574\ubcfc \ub3c4\ucee4 \ud5c8\ube0c\ub294 ghcr\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uac01\uc790 \ud658\uacbd\uc5d0 \ub9de\ucd94\uc5b4\uc11c \ub3c4\ucee4 \ud5c8\ube0c\ub97c \uc120\ud0dd \ud6c4 \uc5c5\ub85c\ub4dc\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker build . -f Dockerfile -t ghcr.io/mlops-for-all/base-image\ndocker push ghcr.io/mlops-for-all/base-image\n")),(0,r.kt)("p",null,"\uc774\uc81c base_image\ub97c \uc785\ub825\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n base_image="ghcr.io/mlops-for-all/base-image:latest",\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc774\uc81c \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucef4\ud30c\uc77c\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: kernel, type: String}\noutputs:\n- {name: model, type: dill}\nimplementation:\n container:\n image: ghcr.io/mlops-for-all/base-image:latest\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --kernel\n - {inputValue: kernel}\n - --model\n - {outputPath: model}\n')),(0,r.kt)("p",null,"base_image\uac00 \uc6b0\ub9ac\uac00 \uc124\uc815\ud55c \uac12\uc73c\ub85c \ubc14\ub010 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"2-packages_to_install"},"2. packages_to_install"),(0,r.kt)("p",null,"\ud558\uc9c0\ub9cc \ud328\ud0a4\uc9c0\uac00 \ucd94\uac00\ub420 \ub54c\ub9c8\ub2e4 docker \uc774\ubbf8\uc9c0\ub97c \uacc4\uc18d\ud574\uc11c \uc0c8\ub85c \uc0dd\uc131\ud558\ub294 \uc791\uc5c5\uc740 \ub9ce\uc740 \uc2dc\uac04\uc774 \uc18c\uc694\ub429\ub2c8\ub2e4.\n\uc774 \ub54c, ",(0,r.kt)("inlineCode",{parentName:"p"},"packages_to_install")," argument \ub97c \uc0ac\uc6a9\ud558\uba74 \ud328\ud0a4\uc9c0\ub97c \ucee8\ud14c\uc774\ub108\uc5d0 \uc27d\uac8c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill==0.3.4", "pandas==1.3.4", "scikit-learn==1.0.1"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: kernel, type: String}\noutputs:\n- {name: model, type: dill}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill==0.3.4\' \'pandas==1.3.4\' \'scikit-learn==1.0.1\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill==0.3.4\' \'pandas==1.3.4\'\n \'scikit-learn==1.0.1\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --kernel\n - {inputValue: kernel}\n - --model\n - {outputPath: model}\n')),(0,r.kt)("p",null,"\uc704\uc5d0 \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub97c \uc880 \ub354 \uc790\uc138\ud788 \ub4e4\uc5ec\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"pip install dill==0.3.4 pandas==1.3.4 scikit-learn==1.0.1")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\uc0dd\uc131\ub41c yaml \ud30c\uc77c\uc744 \uc790\uc138\ud788 \ubcf4\uba74, \ub2e4\uc74c\uacfc \uac19\uc740 \uc904\uc774 \uc790\ub3d9\uc73c\ub85c \ucd94\uac00\ub418\uc5b4 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub418\uae30 \ub54c\ubb38\uc5d0 \uc624\ub958 \uc5c6\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"}," command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n 'dill==0.3.4' 'pandas==1.3.4' 'scikit-learn==1.0.1' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location 'dill==0.3.4' 'pandas==1.3.4'\n 'scikit-learn==1.0.1' --user) && \"$0\" \"$@\"\n")))}_.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/167d5ab1.ba8a4770.js b/assets/js/167d5ab1.ba8a4770.js deleted file mode 100644 index 48d190c5..00000000 --- a/assets/js/167d5ab1.ba8a4770.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4177],{3905:(n,e,t)=>{t.d(e,{Zo:()=>m,kt:()=>c});var a=t(7294);function r(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function p(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,a)}return t}function i(n){for(var e=1;e=0||(r[t]=n[t]);return r}(n,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(n);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(r[t]=n[t])}return r}var o=a.createContext({}),s=function(n){var e=a.useContext(o),t=e;return n&&(t="function"==typeof n?n(e):i(i({},e),n)),t},m=function(n){var e=s(n.components);return a.createElement(o.Provider,{value:e},n.children)},d="mdxType",_={inlineCode:"code",wrapper:function(n){var e=n.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(n,e){var t=n.components,r=n.mdxType,p=n.originalType,o=n.parentName,m=l(n,["components","mdxType","originalType","parentName"]),d=s(t),u=r,c=d["".concat(o,".").concat(u)]||d[u]||_[u]||p;return t?a.createElement(c,i(i({ref:e},m),{},{components:t})):a.createElement(c,i({ref:e},m))}));function c(n,e){var t=arguments,r=e&&e.mdxType;if("string"==typeof n||r){var p=t.length,i=new Array(p);i[0]=u;var l={};for(var o in e)hasOwnProperty.call(e,o)&&(l[o]=e[o]);l.originalType=n,l[d]="string"==typeof n?n:r,i[1]=l;for(var s=2;s{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>_,frontMatter:()=>p,metadata:()=>l,toc:()=>s});var a=t(7462),r=(t(7294),t(3905));const p={title:"9. Component - Environment",description:"",sidebar_position:9,contributors:["Jongseob Jeon"]},i=void 0,l={unversionedId:"kubeflow/advanced-environment",id:"version-1.0/kubeflow/advanced-environment",title:"9. Component - Environment",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-environment.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-environment",permalink:"/docs/1.0/kubeflow/advanced-environment",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-environment.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:9,frontMatter:{title:"9. Component - Environment",description:"",sidebar_position:9,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"8. Component - InputPath/OutputPath",permalink:"/docs/1.0/kubeflow/advanced-component"},next:{title:"10. Pipeline - Setting",permalink:"/docs/1.0/kubeflow/advanced-pipeline"}},o={},s=[{value:"Component Environment",id:"component-environment",level:2},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"\ud328\ud0a4\uc9c0 \ucd94\uac00 \ubc29\ubc95",id:"\ud328\ud0a4\uc9c0-\ucd94\uac00-\ubc29\ubc95",level:2},{value:"1. base_image",id:"1-base_image",level:3},{value:"2. packages_to_install",id:"2-packages_to_install",level:3}],m={toc:s},d="wrapper";function _(n){let{components:e,...t}=n;return(0,r.kt)(d,(0,a.Z)({},m,t,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"component-environment"},"Component Environment"),(0,r.kt)("p",null,"\uc55e\uc11c ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-component"},"8. Component - InputPath/OutputPath"),"\uc5d0\uc11c \uc791\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uba74 \uc2e4\ud328\ud558\uac8c \ub429\ub2c8\ub2e4. \uc65c \uc2e4\ud328\ud558\ub294\uc9c0 \uc54c\uc544\ubcf4\uace0 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub420 \uc218 \uc788\ub3c4\ub85d \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-component#convert-to-kubeflow-format"},"\uc55e\uc5d0\uc11c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8"),"\ub97c yaml\ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc704\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \ud30c\uc77c\uc744 \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: model, type: dill}\n- {name: kernel, type: String}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --model\n - {inputPath: model}\n - --kernel\n - {inputValue: kernel}\n')),(0,r.kt)("p",null,"\uc55e\uc11c ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-component#convert-to-kubeflow-format"},"Basic Usage Component"),"\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc5d0 \ub530\ub974\uba74 \uc774 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\ud558\uc9c0\ub9cc \uc704\uc5d0\uc11c \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uac8c \ub429\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8 \uc774\uc720\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \uc2e4\ud589\ub418\ub294 \ubc29\uc2dd\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","Kubeflow\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub294 \uac01\uac01 \ub3c5\ub9bd\ub41c \ucee8\ud14c\uc774\ub108 \uc704\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc790\uc138\ud788 \ubcf4\uba74 \uc0dd\uc131\ub41c \ub9cc\ub4e0 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \uc5d0\uc11c \uc815\ud574\uc9c4 \uc774\ubbf8\uc9c0\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"image: python:3.7")," \uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc5b4\ub5a4 \uc774\uc720 \ub54c\ubb38\uc5d0 \uc2e4\ud589\uc774 \uc548 \ub418\ub294\uc9c0 \ub208\uce58\ucc44\uc2e0 \ubd84\ub4e4\ub3c4 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"python:3.7")," \uc774\ubbf8\uc9c0\uc5d0\ub294 \uc6b0\ub9ac\uac00 \uc0ac\uc6a9\ud558\uace0\uc790 \ud558\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"dill"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pandas"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sklearn")," \uc774 \uc124\uce58\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub7ec\ubbc0\ub85c \uc2e4\ud589\ud560 \ub54c \ud574\ub2f9 \ud328\ud0a4\uc9c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \uc5d0\ub7ec\uc640 \ud568\uaed8 \uc2e4\ud589\uc774 \uc548 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uadf8\ub7fc \uc5b4\ub5bb\uac8c \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc744\uae4c\uc694?"),(0,r.kt)("h2",{id:"\ud328\ud0a4\uc9c0-\ucd94\uac00-\ubc29\ubc95"},"\ud328\ud0a4\uc9c0 \ucd94\uac00 \ubc29\ubc95"),(0,r.kt)("p",null,"Kubeflow\ub97c \ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ub450 \uac00\uc9c0 \ubc29\ubc95\uc744 \ud1b5\ud574 \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"base_image")," \uc0ac\uc6a9"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"package_to_install")," \uc0ac\uc6a9")),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \ucef4\ud30c\uc77c\ud560 \ub54c \uc0ac\uc6a9\ud588\ub358 \ud568\uc218 ",(0,r.kt)("inlineCode",{parentName:"p"},"create_component_from_func")," \uac00 \uc5b4\ub5a4 argument\ub4e4\uc744 \ubc1b\uc744 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"def create_component_from_func(\n func: Callable,\n output_component_file: Optional[str] = None,\n base_image: Optional[str] = None,\n packages_to_install: List[str] = None,\n annotations: Optional[Mapping[str, str]] = None,\n):\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"func"),": \ucef4\ud3ec\ub10c\ud2b8\ub85c \ub9cc\ub4e4 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c \ud568\uc218"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"base_image"),": \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \uc2e4\ud589\ud560 \uc774\ubbf8\uc9c0"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"packages_to_install"),": \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc11c \ucd94\uac00\ub85c \uc124\uce58\ud574\uc57c \ud558\ub294 \ud328\ud0a4\uc9c0")),(0,r.kt)("h3",{id:"1-base_image"},"1. base_image"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub97c \uc880 \ub354 \uc790\uc138\ud788 \ub4e4\uc5ec\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull base_image")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"pip install packages_to_install")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\ub9cc\uc57d \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc0ac\uc6a9\ud558\ub294 base_image\uc5d0 \ud328\ud0a4\uc9c0\ub4e4\uc774 \uc804\ubd80 \uc124\uce58\ub418\uc5b4 \uc788\ub2e4\uba74 \ucd94\uac00\uc801\uc778 \ud328\ud0a4\uc9c0 \uc124\uce58 \uc5c6\uc774 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 Dockerfile\uc744 \uc791\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-dockerfile"},"FROM python:3.7\n\nRUN pip install dill pandas scikit-learn\n")),(0,r.kt)("p",null,"\uc704\uc758 Dockerfile\uc744 \uc774\uc6a9\ud574 \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc2e4\uc2b5\uc5d0\uc11c \uc0ac\uc6a9\ud574\ubcfc \ub3c4\ucee4 \ud5c8\ube0c\ub294 ghcr\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uac01\uc790 \ud658\uacbd\uc5d0 \ub9de\ucd94\uc5b4\uc11c \ub3c4\ucee4 \ud5c8\ube0c\ub97c \uc120\ud0dd \ud6c4 \uc5c5\ub85c\ub4dc\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker build . -f Dockerfile -t ghcr.io/mlops-for-all/base-image\ndocker push ghcr.io/mlops-for-all/base-image\n")),(0,r.kt)("p",null,"\uc774\uc81c base_image\ub97c \uc785\ub825\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n base_image="ghcr.io/mlops-for-all/base-image:latest",\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc774\uc81c \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucef4\ud30c\uc77c\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: kernel, type: String}\noutputs:\n- {name: model, type: dill}\nimplementation:\n container:\n image: ghcr.io/mlops-for-all/base-image:latest\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --kernel\n - {inputValue: kernel}\n - --model\n - {outputPath: model}\n')),(0,r.kt)("p",null,"base_image\uac00 \uc6b0\ub9ac\uac00 \uc124\uc815\ud55c \uac12\uc73c\ub85c \ubc14\ub010 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"2-packages_to_install"},"2. packages_to_install"),(0,r.kt)("p",null,"\ud558\uc9c0\ub9cc \ud328\ud0a4\uc9c0\uac00 \ucd94\uac00\ub420 \ub54c\ub9c8\ub2e4 docker \uc774\ubbf8\uc9c0\ub97c \uacc4\uc18d\ud574\uc11c \uc0c8\ub85c \uc0dd\uc131\ud558\ub294 \uc791\uc5c5\uc740 \ub9ce\uc740 \uc2dc\uac04\uc774 \uc18c\uc694\ub429\ub2c8\ub2e4.\n\uc774 \ub54c, ",(0,r.kt)("inlineCode",{parentName:"p"},"packages_to_install")," argument \ub97c \uc0ac\uc6a9\ud558\uba74 \ud328\ud0a4\uc9c0\ub97c \ucee8\ud14c\uc774\ub108\uc5d0 \uc27d\uac8c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill==0.3.4", "pandas==1.3.4", "scikit-learn==1.0.1"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: kernel, type: String}\noutputs:\n- {name: model, type: dill}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill==0.3.4\' \'pandas==1.3.4\' \'scikit-learn==1.0.1\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill==0.3.4\' \'pandas==1.3.4\'\n \'scikit-learn==1.0.1\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --kernel\n - {inputValue: kernel}\n - --model\n - {outputPath: model}\n')),(0,r.kt)("p",null,"\uc704\uc5d0 \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub97c \uc880 \ub354 \uc790\uc138\ud788 \ub4e4\uc5ec\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"pip install dill==0.3.4 pandas==1.3.4 scikit-learn==1.0.1")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\uc0dd\uc131\ub41c yaml \ud30c\uc77c\uc744 \uc790\uc138\ud788 \ubcf4\uba74, \ub2e4\uc74c\uacfc \uac19\uc740 \uc904\uc774 \uc790\ub3d9\uc73c\ub85c \ucd94\uac00\ub418\uc5b4 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub418\uae30 \ub54c\ubb38\uc5d0 \uc624\ub958 \uc5c6\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"}," command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n 'dill==0.3.4' 'pandas==1.3.4' 'scikit-learn==1.0.1' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location 'dill==0.3.4' 'pandas==1.3.4'\n 'scikit-learn==1.0.1' --user) && \"$0\" \"$@\"\n")))}_.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1e99a105.bcf0c2e3.js b/assets/js/1e99a105.bcf0c2e3.js deleted file mode 100644 index 89b4f8d5..00000000 --- a/assets/js/1e99a105.bcf0c2e3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[7367],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=a,m=u["".concat(p,".").concat(d)]||u[d]||k[d]||i;return n?r.createElement(m,o(o({ref:t},c),{},{components:n})):r.createElement(m,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,o[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>k,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const i={title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",sidebar_position:2,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,l={unversionedId:"prerequisites/docker/introduction",id:"version-1.0/prerequisites/docker/introduction",title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/introduction.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/introduction",permalink:"/docs/1.0/prerequisites/docker/introduction",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/introduction.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",sidebar_position:2,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"Install Docker",permalink:"/docs/1.0/prerequisites/docker/install"},next:{title:"What is Docker?",permalink:"/docs/1.0/prerequisites/docker/"}},p={},s=[{value:"Why Kubernetes ?",id:"why-kubernetes-",level:2},{value:"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ub3c4\ucee4\uc640-\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:2},{value:"\uae30\uc220 \uc774\ub984\uc774 \uc544\ub2c8\ub77c \uc81c\ud488 \uc774\ub984",id:"\uae30\uc220-\uc774\ub984\uc774-\uc544\ub2c8\ub77c-\uc81c\ud488-\uc774\ub984",level:3},{value:"\ub3c4\ucee4",id:"\ub3c4\ucee4",level:4},{value:"\ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"\uc7ac\ubbf8\uc788\ub294 \uc624\ud508\uc18c\uc2a4 \uc5ed\uc0ac \uc774\uc57c\uae30",id:"\uc7ac\ubbf8\uc788\ub294-\uc624\ud508\uc18c\uc2a4-\uc5ed\uc0ac-\uc774\uc57c\uae30",level:3},{value:"\ucd08\uae30 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ucd08\uae30-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"Open Container Initiative",id:"open-container-initiative",level:4},{value:"CRI-O",id:"cri-o",level:4},{value:"\uc9c0\uae08\uc758 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\uc9c0\uae08\uc758-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"References",id:"references",level:3}],c={toc:s},u="wrapper";function k(e){let{components:t,...i}=e;return(0,a.kt)(u,(0,r.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"why-kubernetes-"},"Why Kubernetes ?"),(0,a.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc11c\ube44\uc2a4\ud654\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub378 \uac1c\ubc1c \uc678\uc5d0\ub3c4 \ub9ce\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ubd80\uac00\uc801\uc778")," \uae30\ub2a5\ub4e4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\ud559\uc2b5 \ub2e8\uacc4",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\ubaa8\ub378 \ud559\uc2b5 \uba85\ub839\uc758 \uc2a4\ucf00\uc904 \uad00\ub9ac"),(0,a.kt)("li",{parentName:"ul"},"\ud559\uc2b5\ub41c \ubaa8\ub378\uc758 Reproducibility \ubcf4\uc7a5"))),(0,a.kt)("li",{parentName:"ol"},"\ubc30\ud3ec \ub2e8\uacc4",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\ud2b8\ub798\ud53d \ubd84\uc0b0"),(0,a.kt)("li",{parentName:"ul"},"\uc11c\ube44\uc2a4 \uc7a5\uc560 \ubaa8\ub2c8\ud130\ub9c1"),(0,a.kt)("li",{parentName:"ul"},"\uc7a5\uc560 \uc2dc \ud2b8\ub7ec\ube14\uc288\ud305")))),(0,a.kt)("p",null,"\ub2e4\ud589\ud788\ub3c4 \uc774\ub7f0 \uae30\ub2a5\ub4e4\uc5d0 \ub300\ud55c needs\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ucabd\uc5d0\uc11c \uc774\ubbf8 \ub9ce\uc740 \uace0\ubbfc\uc744 \uac70\uccd0 \ubc1c\uc804\ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ubc30\ud3ec\ud560 \ub54c\ub3c4 \uc774\ub7f0 \uace0\ubbfc\uc758 \uacb0\uacfc\ubb3c\ub4e4\uc744 \ud65c\uc6a9\ud558\uba74 \ud070 \ub3c4\uc6c0\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nMLOps\uc5d0\uc11c \ub300\ud45c\uc801\uc73c\ub85c \ud65c\uc6a9\ud558\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uc774 \ubc14\ub85c \ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc785\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"\ub3c4\ucee4\uc640-\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("h3",{id:"\uae30\uc220-\uc774\ub984\uc774-\uc544\ub2c8\ub77c-\uc81c\ud488-\uc774\ub984"},"\uae30\uc220 \uc774\ub984\uc774 \uc544\ub2c8\ub77c \uc81c\ud488 \uc774\ub984"),(0,a.kt)("p",null,"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uac01\uac01 \ucee8\ud14c\uc774\ub108\ub77c\uc774\uc81c\uc774\uc158(Containerization) \uae30\ub2a5\uacfc \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158(Container Orchestration) \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ub300\ud45c \uc18c\ud504\ud2b8\uc6e8\uc5b4(\uc81c\ud488)\uc785\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"\ub3c4\ucee4"},"\ub3c4\ucee4"),(0,a.kt)("p",null,"\ub3c4\ucee4\ub294 \uacfc\uac70\uc5d0 \ub300\uc138\uc600\uc9c0\ub9cc \uc720\ub8cc\ud654 \uad00\ub828 \uc815\ucc45\ub4e4\uc744 \ud558\ub098\uc529 \ucd94\uac00\ud558\uba74\uc11c \uc810\uc810 \uc0ac\uc6a9 \ube48\ub3c4\uac00 \ud558\ub77d\uc138\uc785\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc 2022\ub144 3\uc6d4 \uae30\uc900\uc73c\ub85c \uc544\uc9c1\uae4c\uc9c0\ub3c4 \uac00\uc7a5 \uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294 \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"sysdig-2019.png",src:n(3193).Z,width:"1600",height:"900"})),(0,a.kt)("center",null," [from sysdig 2019] "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"sysdig-2021.png",src:n(8475).Z,width:"750",height:"437"})),(0,a.kt)("center",null," [from sysdig 2021] "),(0,a.kt)("h4",{id:"\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uc9c0\uae08\uae4c\uc9c0\ub294 \ube44\uad50 \ub300\uc0c1\uc870\ucc28 \uac70\uc758 \uc5c6\ub294 \uc81c\ud488\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"cncf-survey.png",src:n(6587).Z,width:"2048",height:"1317"})),(0,a.kt)("center",null," [from cncf survey] "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"t4-ai.png",src:n(2781).Z,width:"926",height:"629"})),(0,a.kt)("center",null," [from t4.ai] "),(0,a.kt)("h3",{id:"\uc7ac\ubbf8\uc788\ub294-\uc624\ud508\uc18c\uc2a4-\uc5ed\uc0ac-\uc774\uc57c\uae30"},(0,a.kt)("strong",{parentName:"h3"},"\uc7ac\ubbf8\uc788\ub294 \uc624\ud508\uc18c\uc2a4 \uc5ed\uc0ac \uc774\uc57c\uae30")),(0,a.kt)("h4",{id:"\ucd08\uae30-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ucd08\uae30 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucd08\uae30 \ub3c4\ucee4 \uac1c\ubc1c\uc2dc\uc5d0\ub294 Docker Engine\uc774\ub77c\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\ud558\ub098\uc758 \ud328\ud0a4\uc9c0"),"\uc5d0 API, CLI, \ub124\ud2b8\uc6cc\ud06c, \uc2a4\ud1a0\ub9ac\uc9c0 \ub4f1 \uc5ec\ub7ec \uae30\ub2a5\ub4e4\uc744 \ubaa8\ub450 \ud3ec\ud568\ud588\uc73c\ub098, ",(0,a.kt)("strong",{parentName:"p"},"MSA")," \uc758 \ucca0\ud559\uc744 \ub2f4\uc544 ",(0,a.kt)("strong",{parentName:"p"},"\ud558\ub098\uc529 \ubd84\ub9ac"),"\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \ucd08\uae30\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654\ub97c \uc704\ud574 Docker Engine\uc744 \ub0b4\uc7a5\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \ub3c4\ucee4 \ubc84\uc804\uc774 \uc5c5\ub370\uc774\ud2b8\ub420 \ub54c\ub9c8\ub2e4 Docker Engine \uc758 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ubcc0\uacbd\ub418\uc5b4 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \ud06c\uac8c \uc601\ud5a5\uc744 \ubc1b\ub294 \uc77c\uc774 \uacc4\uc18d\ud574\uc11c \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"open-container-initiative"},"Open Container Initiative"),(0,a.kt)("p",null,"\uadf8\ub798\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\uc774\ub7f0 \ubd88\ud3b8\ud568\uc744 \ud574\uc18c"),"\ud558\uace0\uc790, \ub3c4\ucee4\ub97c \uc911\uc2ec\uc73c\ub85c \uad6c\uae00 \ub4f1 \ucee8\ud14c\uc774\ub108 \uae30\uc220\uc5d0 \uad00\uc2ec\uc788\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\uc5ec\ub7ec \uc9d1\ub2e8"),"\ub4e4\uc774 \ud55c\ub370 \ubaa8\uc5ec ",(0,a.kt)("strong",{parentName:"p"},"Open Container Initiative,")," \uc774\ud558 ",(0,a.kt)("strong",{parentName:"p"},"OCI"),"\ub77c\ub294 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud558\uc5ec \ucee8\ud14c\uc774\ub108\uc5d0 \uad00\ud55c ",(0,a.kt)("strong",{parentName:"p"},"\ud45c\uc900"),"\uc744 \uc815\ud558\ub294 \uc77c\ub4e4\uc744 \uc2dc\uc791\ud558\uc600\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4\uc5d0\uc11c\ub3c4 \uc778\ud130\ud398\uc774\uc2a4\ub97c ",(0,a.kt)("strong",{parentName:"p"},"\ud55c \ubc88 \ub354 \ubd84\ub9ac"),"\ud574\uc11c, OCI \ud45c\uc900\uc744 \uc900\uc218\ud558\ub294 ",(0,a.kt)("strong",{parentName:"p"},"containerd"),"\ub77c\ub294 Container Runtime \ub97c \uac1c\ubc1c\ud558\uace0, ",(0,a.kt)("strong",{parentName:"p"},"dockerd")," \uac00 containerd \uc758 API \ub97c \ud638\ucd9c\ud558\ub3c4\ub85d \ucd94\uc0c1\ud654 \ub808\uc774\uc5b4\ub97c \ucd94\uac00\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc774\ub7ec\ud55c \ud750\ub984\uc5d0 \ub9de\ucd94\uc5b4\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c\ub3c4 \uc774\uc81c\ubd80\ud130\ub294 \ub3c4\ucee4\ub9cc\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uace0, ",(0,a.kt)("strong",{parentName:"p"},"OCI \ud45c\uc900\uc744")," \uc900\uc218\ud558\uace0, \uc815\ud574\uc9c4 \uc2a4\ud399\uc744 \uc9c0\ud0a4\ub294 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc740 \ubb34\uc5c7\uc774\ub4e0 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d, Container Runtime Interface, \uc774\ud558 ",(0,a.kt)("strong",{parentName:"p"},"CRI \uc2a4\ud399"),"\uc744 \ubc84\uc804 1.5\ubd80\ud130 \uc81c\uacf5\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"cri-o"},"CRI-O"),(0,a.kt)("p",null,"Red Hat, Intel, SUSE, IBM\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"OCI \ud45c\uc900+CRI \uc2a4\ud399\uc744")," \ub530\ub77c Kubernetes \uc804\uc6a9 Container Runtime \uc744 \ubaa9\uc801\uc73c\ub85c \uac1c\ubc1c\ud55c \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc785\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"\uc9c0\uae08\uc758-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\uc9c0\uae08\uc758 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 Docker Engine \uc744 \ub514\ud3f4\ud2b8 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc0ac\uc6a9\ud574\uc654\uc9c0\ub9cc, \ub3c4\ucee4\uc758 API \uac00 ",(0,a.kt)("strong",{parentName:"p"},"CRI")," \uc2a4\ud399\uc5d0 \ub9de\uc9c0 \uc54a\uc544(",(0,a.kt)("em",{parentName:"p"},"OCI \ub294 \ub530\ub984"),") \ub3c4\ucee4\uc758 API\ub97c ",(0,a.kt)("strong",{parentName:"p"},"CRI"),"\uc640 \ud638\ud658\ub418\uac8c \ubc14\uafd4\uc8fc\ub294 ",(0,a.kt)("strong",{parentName:"p"},"dockershim"),"\uc744 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc790\uccb4\uc801\uc73c\ub85c \uac1c\ubc1c \ubc0f \uc9c0\uc6d0\ud574\uc654\uc5c8\ub294\ub370,(",(0,a.kt)("em",{parentName:"p"},"\ub3c4\ucee4 \uce21\uc774 \uc544\ub2c8\ub77c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uce21\uc5d0\uc11c \uc9c0\uc6d0\ud588\ub2e4\ub294 \uc810\uc774 \uad49\uc7a5\ud788 \ud070 \uc9d0\uc774\uc5c8\uc2b5\ub2c8\ub2e4."),") \uc774\uac78 \ucfe0\ubc84\ub124\ud2f0\uc2a4 ",(0,a.kt)("strong",{parentName:"p"},"v1.20 \ubd80\ud130\ub294 Deprecated\ud558\uace0,")," ",(0,a.kt)("strong",{parentName:"p"},"v1.23 \ubd80\ud130\ub294 \uc9c0\uc6d0\uc744 \ud3ec\uae30"),"\ud558\uae30\ub85c \uacb0\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"v1.23 \uc740 2021 \ub144 12\uc6d4 \ub9b4\ub9ac\uc988")),(0,a.kt)("p",null,"\uadf8\ub798\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4 v1.23 \ubd80\ud130\ub294 \ub3c4\ucee4\ub97c native \ud558\uac8c \uc4f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\uc9c0\ub9cc ",(0,a.kt)("strong",{parentName:"p"},"\uc0ac\uc6a9\uc790\ub4e4\uc740 \uc774\ub7f0 \ubcc0\ud654\uc5d0 \ud06c\uac8c \uad00\ub828\uc774 \uc788\uc9c4 \uc54a\uc2b5\ub2c8\ub2e4."),"\n\uc65c\ub0d0\ud558\uba74 Docker Engine\uc744 \ud1b5\ud574 \ub9cc\ub4e4\uc5b4\uc9c4 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 OCI \ud45c\uc900\uc744 \uc900\uc218\ud558\uae30 \ub54c\ubb38\uc5d0, \ucfe0\ubc84\ub124\ud2f0\uc2a4\uac00 \uc5b4\ub5a4 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc774\ub8e8\uc5b4\uc838\uc788\ub4e0 \uc0ac\uc6a9 \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"references"},"References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.linkedin.com/pulse/containerd%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%EC%A4%91%EC%9A%94%ED%95%A0%EA%B9%8C-sean-lee/?originalSubdomain=kr"},(0,a.kt)("em",{parentName:"a"},"https://www.linkedin.com/pulse/containerd\ub294-\ubb34\uc5c7\uc774\uace0-\uc65c-\uc911\uc694\ud560\uae4c-sean-lee/?originalSubdomain=kr"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/"},"https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2020/12/02/dockershim-faq/"},"https://kubernetes.io/blog/2020/12/02/dockershim-faq/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/"},"https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/"},"https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/"))))}k.isMDXComponent=!0},6587:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cncf-survey-53378aeae96c2069d60cbd72e31baa22.png"},3193:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/sysdig-2019-a7a9178a83773e8126833287a7fb755c.png"},8475:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/sysdig-2021-d575835a018c7b99ef06c932a46953a3.png"},2781:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/t4-ai-f055bc33fd1f8fd7b098b71508aac896.png"}}]); \ No newline at end of file diff --git a/assets/js/1e99a105.ccfb2da8.js b/assets/js/1e99a105.ccfb2da8.js new file mode 100644 index 00000000..f6c9dba1 --- /dev/null +++ b/assets/js/1e99a105.ccfb2da8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[7367],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=a,m=u["".concat(p,".").concat(d)]||u[d]||k[d]||i;return n?r.createElement(m,o(o({ref:t},c),{},{components:n})):r.createElement(m,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,o[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>k,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const i={title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",sidebar_position:2,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,l={unversionedId:"prerequisites/docker/introduction",id:"version-1.0/prerequisites/docker/introduction",title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/introduction.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/introduction",permalink:"/docs/1.0/prerequisites/docker/introduction",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/introduction.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",sidebar_position:2,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"Install Docker",permalink:"/docs/1.0/prerequisites/docker/install"},next:{title:"What is Docker?",permalink:"/docs/1.0/prerequisites/docker/"}},p={},s=[{value:"Why Kubernetes ?",id:"why-kubernetes-",level:2},{value:"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ub3c4\ucee4\uc640-\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:2},{value:"\uae30\uc220 \uc774\ub984\uc774 \uc544\ub2c8\ub77c \uc81c\ud488 \uc774\ub984",id:"\uae30\uc220-\uc774\ub984\uc774-\uc544\ub2c8\ub77c-\uc81c\ud488-\uc774\ub984",level:3},{value:"\ub3c4\ucee4",id:"\ub3c4\ucee4",level:4},{value:"\ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"\uc7ac\ubbf8\uc788\ub294 \uc624\ud508\uc18c\uc2a4 \uc5ed\uc0ac \uc774\uc57c\uae30",id:"\uc7ac\ubbf8\uc788\ub294-\uc624\ud508\uc18c\uc2a4-\uc5ed\uc0ac-\uc774\uc57c\uae30",level:3},{value:"\ucd08\uae30 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ucd08\uae30-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"Open Container Initiative",id:"open-container-initiative",level:4},{value:"CRI-O",id:"cri-o",level:4},{value:"\uc9c0\uae08\uc758 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\uc9c0\uae08\uc758-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"References",id:"references",level:3}],c={toc:s},u="wrapper";function k(e){let{components:t,...i}=e;return(0,a.kt)(u,(0,r.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"why-kubernetes-"},"Why Kubernetes ?"),(0,a.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc11c\ube44\uc2a4\ud654\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub378 \uac1c\ubc1c \uc678\uc5d0\ub3c4 \ub9ce\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ubd80\uac00\uc801\uc778")," \uae30\ub2a5\ub4e4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\ud559\uc2b5 \ub2e8\uacc4",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\ubaa8\ub378 \ud559\uc2b5 \uba85\ub839\uc758 \uc2a4\ucf00\uc904 \uad00\ub9ac"),(0,a.kt)("li",{parentName:"ul"},"\ud559\uc2b5\ub41c \ubaa8\ub378\uc758 Reproducibility \ubcf4\uc7a5"))),(0,a.kt)("li",{parentName:"ol"},"\ubc30\ud3ec \ub2e8\uacc4",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\ud2b8\ub798\ud53d \ubd84\uc0b0"),(0,a.kt)("li",{parentName:"ul"},"\uc11c\ube44\uc2a4 \uc7a5\uc560 \ubaa8\ub2c8\ud130\ub9c1"),(0,a.kt)("li",{parentName:"ul"},"\uc7a5\uc560 \uc2dc \ud2b8\ub7ec\ube14\uc288\ud305")))),(0,a.kt)("p",null,"\ub2e4\ud589\ud788\ub3c4 \uc774\ub7f0 \uae30\ub2a5\ub4e4\uc5d0 \ub300\ud55c needs\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ucabd\uc5d0\uc11c \uc774\ubbf8 \ub9ce\uc740 \uace0\ubbfc\uc744 \uac70\uccd0 \ubc1c\uc804\ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ubc30\ud3ec\ud560 \ub54c\ub3c4 \uc774\ub7f0 \uace0\ubbfc\uc758 \uacb0\uacfc\ubb3c\ub4e4\uc744 \ud65c\uc6a9\ud558\uba74 \ud070 \ub3c4\uc6c0\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nMLOps\uc5d0\uc11c \ub300\ud45c\uc801\uc73c\ub85c \ud65c\uc6a9\ud558\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uc774 \ubc14\ub85c \ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc785\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"\ub3c4\ucee4\uc640-\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("h3",{id:"\uae30\uc220-\uc774\ub984\uc774-\uc544\ub2c8\ub77c-\uc81c\ud488-\uc774\ub984"},"\uae30\uc220 \uc774\ub984\uc774 \uc544\ub2c8\ub77c \uc81c\ud488 \uc774\ub984"),(0,a.kt)("p",null,"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uac01\uac01 \ucee8\ud14c\uc774\ub108\ub77c\uc774\uc81c\uc774\uc158(Containerization) \uae30\ub2a5\uacfc \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158(Container Orchestration) \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ub300\ud45c \uc18c\ud504\ud2b8\uc6e8\uc5b4(\uc81c\ud488)\uc785\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"\ub3c4\ucee4"},"\ub3c4\ucee4"),(0,a.kt)("p",null,"\ub3c4\ucee4\ub294 \uacfc\uac70\uc5d0 \ub300\uc138\uc600\uc9c0\ub9cc \uc720\ub8cc\ud654 \uad00\ub828 \uc815\ucc45\ub4e4\uc744 \ud558\ub098\uc529 \ucd94\uac00\ud558\uba74\uc11c \uc810\uc810 \uc0ac\uc6a9 \ube48\ub3c4\uac00 \ud558\ub77d\uc138\uc785\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc 2022\ub144 3\uc6d4 \uae30\uc900\uc73c\ub85c \uc544\uc9c1\uae4c\uc9c0\ub3c4 \uac00\uc7a5 \uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294 \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"sysdig-2019.png",src:n(3193).Z,width:"1600",height:"900"})),(0,a.kt)("center",null," [from sysdig 2019] "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"sysdig-2021.png",src:n(8475).Z,width:"750",height:"437"})),(0,a.kt)("center",null," [from sysdig 2021] "),(0,a.kt)("h4",{id:"\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uc9c0\uae08\uae4c\uc9c0\ub294 \ube44\uad50 \ub300\uc0c1\uc870\ucc28 \uac70\uc758 \uc5c6\ub294 \uc81c\ud488\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"cncf-survey.png",src:n(6587).Z,width:"2048",height:"1317"})),(0,a.kt)("center",null," [from cncf survey] "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"t4-ai.png",src:n(2781).Z,width:"926",height:"629"})),(0,a.kt)("center",null," [from t4.ai] "),(0,a.kt)("h3",{id:"\uc7ac\ubbf8\uc788\ub294-\uc624\ud508\uc18c\uc2a4-\uc5ed\uc0ac-\uc774\uc57c\uae30"},(0,a.kt)("strong",{parentName:"h3"},"\uc7ac\ubbf8\uc788\ub294 \uc624\ud508\uc18c\uc2a4 \uc5ed\uc0ac \uc774\uc57c\uae30")),(0,a.kt)("h4",{id:"\ucd08\uae30-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ucd08\uae30 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucd08\uae30 \ub3c4\ucee4 \uac1c\ubc1c\uc2dc\uc5d0\ub294 Docker Engine\uc774\ub77c\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\ud558\ub098\uc758 \ud328\ud0a4\uc9c0"),"\uc5d0 API, CLI, \ub124\ud2b8\uc6cc\ud06c, \uc2a4\ud1a0\ub9ac\uc9c0 \ub4f1 \uc5ec\ub7ec \uae30\ub2a5\ub4e4\uc744 \ubaa8\ub450 \ud3ec\ud568\ud588\uc73c\ub098, ",(0,a.kt)("strong",{parentName:"p"},"MSA")," \uc758 \ucca0\ud559\uc744 \ub2f4\uc544 ",(0,a.kt)("strong",{parentName:"p"},"\ud558\ub098\uc529 \ubd84\ub9ac"),"\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \ucd08\uae30\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654\ub97c \uc704\ud574 Docker Engine\uc744 \ub0b4\uc7a5\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \ub3c4\ucee4 \ubc84\uc804\uc774 \uc5c5\ub370\uc774\ud2b8\ub420 \ub54c\ub9c8\ub2e4 Docker Engine \uc758 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ubcc0\uacbd\ub418\uc5b4 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \ud06c\uac8c \uc601\ud5a5\uc744 \ubc1b\ub294 \uc77c\uc774 \uacc4\uc18d\ud574\uc11c \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"open-container-initiative"},"Open Container Initiative"),(0,a.kt)("p",null,"\uadf8\ub798\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\uc774\ub7f0 \ubd88\ud3b8\ud568\uc744 \ud574\uc18c"),"\ud558\uace0\uc790, \ub3c4\ucee4\ub97c \uc911\uc2ec\uc73c\ub85c \uad6c\uae00 \ub4f1 \ucee8\ud14c\uc774\ub108 \uae30\uc220\uc5d0 \uad00\uc2ec\uc788\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\uc5ec\ub7ec \uc9d1\ub2e8"),"\ub4e4\uc774 \ud55c\ub370 \ubaa8\uc5ec ",(0,a.kt)("strong",{parentName:"p"},"Open Container Initiative,")," \uc774\ud558 ",(0,a.kt)("strong",{parentName:"p"},"OCI"),"\ub77c\ub294 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud558\uc5ec \ucee8\ud14c\uc774\ub108\uc5d0 \uad00\ud55c ",(0,a.kt)("strong",{parentName:"p"},"\ud45c\uc900"),"\uc744 \uc815\ud558\ub294 \uc77c\ub4e4\uc744 \uc2dc\uc791\ud558\uc600\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4\uc5d0\uc11c\ub3c4 \uc778\ud130\ud398\uc774\uc2a4\ub97c ",(0,a.kt)("strong",{parentName:"p"},"\ud55c \ubc88 \ub354 \ubd84\ub9ac"),"\ud574\uc11c, OCI \ud45c\uc900\uc744 \uc900\uc218\ud558\ub294 ",(0,a.kt)("strong",{parentName:"p"},"containerd"),"\ub77c\ub294 Container Runtime \ub97c \uac1c\ubc1c\ud558\uace0, ",(0,a.kt)("strong",{parentName:"p"},"dockerd")," \uac00 containerd \uc758 API \ub97c \ud638\ucd9c\ud558\ub3c4\ub85d \ucd94\uc0c1\ud654 \ub808\uc774\uc5b4\ub97c \ucd94\uac00\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc774\ub7ec\ud55c \ud750\ub984\uc5d0 \ub9de\ucd94\uc5b4\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c\ub3c4 \uc774\uc81c\ubd80\ud130\ub294 \ub3c4\ucee4\ub9cc\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uace0, ",(0,a.kt)("strong",{parentName:"p"},"OCI \ud45c\uc900\uc744")," \uc900\uc218\ud558\uace0, \uc815\ud574\uc9c4 \uc2a4\ud399\uc744 \uc9c0\ud0a4\ub294 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc740 \ubb34\uc5c7\uc774\ub4e0 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d, Container Runtime Interface, \uc774\ud558 ",(0,a.kt)("strong",{parentName:"p"},"CRI \uc2a4\ud399"),"\uc744 \ubc84\uc804 1.5\ubd80\ud130 \uc81c\uacf5\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"cri-o"},"CRI-O"),(0,a.kt)("p",null,"Red Hat, Intel, SUSE, IBM\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"OCI \ud45c\uc900+CRI \uc2a4\ud399\uc744")," \ub530\ub77c Kubernetes \uc804\uc6a9 Container Runtime \uc744 \ubaa9\uc801\uc73c\ub85c \uac1c\ubc1c\ud55c \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc785\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"\uc9c0\uae08\uc758-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\uc9c0\uae08\uc758 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 Docker Engine \uc744 \ub514\ud3f4\ud2b8 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc0ac\uc6a9\ud574\uc654\uc9c0\ub9cc, \ub3c4\ucee4\uc758 API \uac00 ",(0,a.kt)("strong",{parentName:"p"},"CRI")," \uc2a4\ud399\uc5d0 \ub9de\uc9c0 \uc54a\uc544(",(0,a.kt)("em",{parentName:"p"},"OCI \ub294 \ub530\ub984"),") \ub3c4\ucee4\uc758 API\ub97c ",(0,a.kt)("strong",{parentName:"p"},"CRI"),"\uc640 \ud638\ud658\ub418\uac8c \ubc14\uafd4\uc8fc\ub294 ",(0,a.kt)("strong",{parentName:"p"},"dockershim"),"\uc744 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc790\uccb4\uc801\uc73c\ub85c \uac1c\ubc1c \ubc0f \uc9c0\uc6d0\ud574\uc654\uc5c8\ub294\ub370,(",(0,a.kt)("em",{parentName:"p"},"\ub3c4\ucee4 \uce21\uc774 \uc544\ub2c8\ub77c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uce21\uc5d0\uc11c \uc9c0\uc6d0\ud588\ub2e4\ub294 \uc810\uc774 \uad49\uc7a5\ud788 \ud070 \uc9d0\uc774\uc5c8\uc2b5\ub2c8\ub2e4."),") \uc774\uac78 \ucfe0\ubc84\ub124\ud2f0\uc2a4 ",(0,a.kt)("strong",{parentName:"p"},"v1.20 \ubd80\ud130\ub294 Deprecated\ud558\uace0,")," ",(0,a.kt)("strong",{parentName:"p"},"v1.23 \ubd80\ud130\ub294 \uc9c0\uc6d0\uc744 \ud3ec\uae30"),"\ud558\uae30\ub85c \uacb0\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"v1.23 \uc740 2021 \ub144 12\uc6d4 \ub9b4\ub9ac\uc988")),(0,a.kt)("p",null,"\uadf8\ub798\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4 v1.23 \ubd80\ud130\ub294 \ub3c4\ucee4\ub97c native \ud558\uac8c \uc4f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\uc9c0\ub9cc ",(0,a.kt)("strong",{parentName:"p"},"\uc0ac\uc6a9\uc790\ub4e4\uc740 \uc774\ub7f0 \ubcc0\ud654\uc5d0 \ud06c\uac8c \uad00\ub828\uc774 \uc788\uc9c4 \uc54a\uc2b5\ub2c8\ub2e4."),"\n\uc65c\ub0d0\ud558\uba74 Docker Engine\uc744 \ud1b5\ud574 \ub9cc\ub4e4\uc5b4\uc9c4 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 OCI \ud45c\uc900\uc744 \uc900\uc218\ud558\uae30 \ub54c\ubb38\uc5d0, \ucfe0\ubc84\ub124\ud2f0\uc2a4\uac00 \uc5b4\ub5a4 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc774\ub8e8\uc5b4\uc838\uc788\ub4e0 \uc0ac\uc6a9 \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"references"},"References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.linkedin.com/pulse/containerd%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%EC%A4%91%EC%9A%94%ED%95%A0%EA%B9%8C-sean-lee/?originalSubdomain=kr"},(0,a.kt)("em",{parentName:"a"},"https://www.linkedin.com/pulse/containerd\ub294-\ubb34\uc5c7\uc774\uace0-\uc65c-\uc911\uc694\ud560\uae4c-sean-lee/?originalSubdomain=kr"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/"},"https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2020/12/02/dockershim-faq/"},"https://kubernetes.io/blog/2020/12/02/dockershim-faq/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/"},"https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/"},"https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/"))))}k.isMDXComponent=!0},6587:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cncf-survey-53378aeae96c2069d60cbd72e31baa22.png"},3193:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/sysdig-2019-a7a9178a83773e8126833287a7fb755c.png"},8475:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/sysdig-2021-d575835a018c7b99ef06c932a46953a3.png"},2781:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/t4-ai-f055bc33fd1f8fd7b098b71508aac896.png"}}]); \ No newline at end of file diff --git a/assets/js/272bb263.32f8a0f0.js b/assets/js/272bb263.32f8a0f0.js new file mode 100644 index 00000000..5b771afc --- /dev/null +++ b/assets/js/272bb263.32f8a0f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6358],{3905:(e,n,a)=>{a.d(n,{Zo:()=>u,kt:()=>m});var t=a(7294);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function o(e){for(var n=1;n=0||(r[a]=e[a]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=t.createContext({}),i=function(e){var n=t.useContext(s),a=n;return e&&(a="function"==typeof e?e(n):o(o({},n),e)),a},u=function(e){var n=i(e.components);return t.createElement(s.Provider,{value:n},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),c=i(a),d=r,m=c["".concat(s,".").concat(d)]||c[d]||k[d]||l;return a?t.createElement(m,o(o({ref:n},u),{},{components:a})):t.createElement(m,o({ref:n},u))}));function m(e,n){var a=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=d;var p={};for(var s in n)hasOwnProperty.call(n,s)&&(p[s]=n[s]);p.originalType=e,p[c]="string"==typeof e?e:r,o[1]=p;for(var i=2;i{a.r(n),a.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>k,frontMatter:()=>l,metadata:()=>p,toc:()=>i});var t=a(7462),r=(a(7294),a(3905));const l={title:"[Practice] Docker command",description:"Practice to use docker command.",sidebar_position:4,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,p={unversionedId:"prerequisites/docker/command",id:"version-1.0/prerequisites/docker/command",title:"[Practice] Docker command",description:"Practice to use docker command.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/command.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/command",permalink:"/docs/1.0/prerequisites/docker/command",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/command.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"[Practice] Docker command",description:"Practice to use docker command.",sidebar_position:4,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"What is Docker?",permalink:"/docs/1.0/prerequisites/docker/"},next:{title:"[Practice] Docker images",permalink:"/docs/1.0/prerequisites/docker/images"}},s={},i=[{value:"1. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"1-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"2. Docker Pull",id:"2-docker-pull",level:2},{value:"3. Docker images",id:"3-docker-images",level:2},{value:"4. Docker ps",id:"4-docker-ps",level:2},{value:"5. Docker run",id:"5-docker-run",level:2},{value:"6. Docker exec",id:"6-docker-exec",level:2},{value:"7. Docker logs",id:"7-docker-logs",level:2},{value:"8. Docker stop",id:"8-docker-stop",level:2},{value:"9. Docker rm",id:"9-docker-rm",level:2},{value:"10. Docker rmi",id:"10-docker-rmi",level:2},{value:"References",id:"references",level:2}],u={toc:i},c="wrapper";function k(e){let{components:n,...a}=e;return(0,r.kt)(c,(0,t.Z)({},u,a,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"1-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"1. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run hello-world\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Hello from Docker!\nThis message shows that your installation appears to be working correctly.\n....\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"(For ubuntu)")," sudo \uc5c6\uc774 \uc0ac\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 \uc544\ub798 \uc0ac\uc774\ud2b8\ub97c \ucc38\uace0\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user"},"https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user"))),(0,r.kt)("h2",{id:"2-docker-pull"},"2. Docker Pull"),(0,r.kt)("p",null,"docker image registry(\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc800\uc7a5\ud558\uace0 \uacf5\uc720\ud560 \uc218 \uc788\ub294 \uc800\uc7a5\uc18c)\ub85c\ubd80\ud130 Docker image \ub97c \ub85c\uceec\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc544\ub798 \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 docker pull\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud55c argument\ub4e4\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker pull --help\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]\n\nPull an image or a repository from a registry\n\nOptions:\n -a, --all-tags Download all tagged images in the repository\n --disable-content-trust Skip image verification (default true)\n --platform string Set platform if server is multi-platform capable\n -q, --quiet Suppress verbose output\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c \uc54c \uc218 \uc788\ub294 \uac83\uc740 \ubc14\ub85c docker pull\uc740 \ub450 \uac1c \ud0c0\uc785\uc758 argument\ub97c \ubc1b\ub294\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[OPTIONS]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"NAME[:TAG|@DIGEST]"))),(0,r.kt)("p",null,"help\uc5d0\uc11c \ub098\uc628 ",(0,r.kt)("inlineCode",{parentName:"p"},"-a"),", -",(0,r.kt)("inlineCode",{parentName:"p"},"q")," \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 NAME \uc55e\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc9c1\uc811 ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu:18.04")," \uc774\ubbf8\uc9c0\ub97c pull \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker pull ubuntu:18.04\n")),(0,r.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub97c \ud574\uc11d\ud558\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu")," \ub77c\ub294 \uc774\ub984\uc744 \uac00\uc9c4 \uc774\ubbf8\uc9c0 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"18.04")," \ud0dc\uadf8\uac00 \ub2ec\ub824\uc788\ub294 \uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc624\ub77c\ub294 \ub73b\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d, \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"18.04: Pulling from library/ubuntu\n20d796c36622: Pull complete \nDigest: sha256:42cd9143b6060261187a72716906187294b8b66653b50d70bc7a90ccade5c984\nStatus: Downloaded newer image for ubuntu:18.04\ndocker.io/library/ubuntu:18.04\n")),(0,r.kt)("p",null,"\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uba74 ",(0,r.kt)("a",{parentName:"p",href:"http://docker.io/library/"},"docker.io/library")," \ub77c\ub294 \uc774\ub984\uc758 registry \uc5d0\uc11c ubuntu:18.04 \ub77c\ub294 image \ub97c \uc5ec\ub7ec\ubd84\uc758 \ub178\ud2b8\ubd81\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uac8c\ub429\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ucc38\uace0\uc0ac\ud56d",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucd94\ud6c4 ",(0,r.kt)("a",{parentName:"li",href:"http://docker.io"},"docker.io")," \ub098 public \ud55c docker hub \uc640 \uac19\uc740 registry \ub300\uc2e0\uc5d0, \ud2b9\uc815 ",(0,r.kt)("strong",{parentName:"li"},"private")," \ud55c registry \uc5d0\uc11c docker image \ub97c \uac00\uc838\uc640\uc57c \ud558\ub294 \uacbd\uc6b0\uc5d0\ub294, ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/login/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker login"))," \uc744 \ud1b5\ud574\uc11c \ud2b9\uc815 registry \ub97c \ubc14\ub77c\ubcf4\ub3c4\ub85d \ud55c \ub4a4, docker pull \uc744 \uc218\ud589\ud558\ub294 \ud615\ud0dc\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ud639\uc740 insecure registry \ub97c \uc124\uc815\ud558\ub294 ",(0,r.kt)("a",{parentName:"li",href:"https://stackoverflow.com/questions/42211380/add-insecure-registry-to-docker"},"\ubc29\uc548"),"\ub3c4 \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"\ud3d0\uc1c4\ub9dd\uc5d0\uc11c docker image \ub97c ",(0,r.kt)("inlineCode",{parentName:"li"},".tar")," \ud30c\uc77c\uacfc \uac19\uc740 \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uace0 \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/save/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker save")),", ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/load/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker load"))," \uc640 \uac19\uc740 \uba85\ub839\uc5b4\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4.")))),(0,r.kt)("h2",{id:"3-docker-images"},"3. Docker images"),(0,r.kt)("p",null,"\ub85c\uceec\uc5d0 \uc874\uc7ac\ud558\ub294 docker image \ub9ac\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images --help\n")),(0,r.kt)("p",null,"docker images\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 argument\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]\n\nList images\n\nOptions:\n -a, --all Show all images (default hides intermediate images)\n --digests Show digests\n -f, --filter filter Filter output based on conditions provided\n --format string Pretty-print images using a Go template\n --no-trunc Don't truncate output\n -q, --quiet Only show image IDs\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc9c1\uc811 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images\n")),(0,r.kt)("p",null,"\ub9cc\uc57d \ub3c4\ucee4\ub97c \ucd5c\ucd08 \uc124\uce58 \ud6c4 \uc774 \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("p",null,"\uc904 \uc218 \uc788\ub294 argument\uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"-q"),"\ub97c \uc0ac\uc6a9\ud558\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"IMAGE ID")," \ub9cc \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images -q\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"29e70752d7b2\n")),(0,r.kt)("h2",{id:"4-docker-ps"},"4. Docker ps"),(0,r.kt)("p",null,"\ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108 \ub9ac\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps --help\n")),(0,r.kt)("p",null,"docker ps\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 argument\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker ps [OPTIONS]\n\nList containers\n\nOptions:\n -a, --all Show all containers (default shows just running)\n -f, --filter filter Filter output based on conditions provided\n --format string Pretty-print containers using a Go template\n -n, --last int Show n last created containers (includes all states) (default -1)\n -l, --latest Show the latest created container (includes all states)\n --no-trunc Don't truncate output\n -q, --quiet Only display container IDs\n -s, --size Display total file sizes\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc9c1\uc811 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps\n")),(0,r.kt)("p",null,"\ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\uac00 \uc5c6\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n")),(0,r.kt)("p",null,"\ub9cc\uc57d \uc2e4\ud589\ub418\ub294 \ucee8\ud14c\uc774\ub108\uac00 \uc788\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nc1e8f5e89d8d ubuntu "sleep 3600" 13 seconds ago Up 12 seconds trusting_newton\n')),(0,r.kt)("h2",{id:"5-docker-run"},"5. Docker run"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run --help\n")),(0,r.kt)("p",null,"docker run\uc744 \uc2e4\ud589\ud558\ub294 \uba85\ub839\uc5b4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]\n\nRun a command in a new container\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c \uc6b0\ub9ac\uac00 \ud655\uc778\ud574\uc57c \ud558\ub294 \uac83\uc740 \ubc14\ub85c docker run\uc740 \uc138 \uac1c \ud0c0\uc785\uc758 argument\ub97c \ubc1b\ub294\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[OPTIONS]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[COMMAND]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[ARG...]"))),(0,r.kt)("p",null,"\uc9c1\uc811 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"## Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]\ndocker run -it --name demo1 ubuntu:18.04 /bin/bash\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-it")," : ",(0,r.kt)("inlineCode",{parentName:"li"},"-i")," \uc635\uc158 + ",(0,r.kt)("inlineCode",{parentName:"li"},"-t")," \uc635\uc158",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"container \ub97c \uc2e4\ud589\uc2dc\ud0b4\uacfc \ub3d9\uc2dc\uc5d0 interactive \ud55c terminal \ub85c \uc811\uc18d\uc2dc\ucf1c\uc8fc\ub294 \uc635\uc158"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--name")," : name",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 id \ub300\uc2e0, \uad6c\ubd84\ud558\uae30 \uc27d\ub3c4\ub85d \uc9c0\uc815\ud574\uc8fc\ub294 \uc774\ub984"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"/bin/bash"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0b4\uacfc \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ud560 \ucee4\ub9e8\ub4dc\ub85c, ",(0,r.kt)("inlineCode",{parentName:"li"},"/bin/bash")," \ub294 bash \uc258\uc744 \uc5ec\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.")))),(0,r.kt)("p",null,"\uc2e4\ud589 \ud6c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"exit")," \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ucee8\ud14c\uc774\ub108\ub97c \uc885\ub8cc\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774 \uc81c \uc55e\uc11c \ubc30\uc6e0\ub358 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps")," \uba85\ub839\uc5b4\ub97c \uce58\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n")),(0,r.kt)("p",null,"\uc2e4\ud589\ub418\uace0 \uc788\ub294 \ucee8\ud14c\uc774\ub108\uac00 \ub098\uc628\ub2e4\uace0 \ud588\uc9c0\ub9cc \uc5b4\uc9f8\uc11c\uc778\uc9c0 \ubc29\uae08 \uc2e4\ud589\ud55c \ucee8\ud14c\uc774\ub108\uac00 \ubcf4\uc774\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uadf8 \uc774\uc720\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub294 \uae30\ubcf8\uac12\uc73c\ub85c \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\ub97c \ubcf4\uc5ec\uc8fc\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \ubcf4\uace0 \uc2f6\ub2e4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"-a")," \uc635\uc158\uc744 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps -a\n")),(0,r.kt)("p",null,"\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108 \ubaa9\ub85d\ub3c4 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago demo1\n')),(0,r.kt)("h2",{id:"6-docker-exec"},"6. Docker exec"),(0,r.kt)("p",null,"Docker \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uba85\ub839\uc744 \ub0b4\ub9ac\uac70\ub098, \ub0b4\ubd80\ub85c \uc811\uc18d\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker exec --help\n")),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d --name demo2 ubuntu:18.04 sleep 3600\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"-d")," \uc635\uc158\uc740 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \uc2e4\ud589\uc2dc\ucf1c\uc11c, \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \uc811\uc18d \uc885\ub8cc\ub97c \ud558\ub354\ub77c\ub3c4, \uacc4\uc18d \uc2e4\ud589 \uc911\uc774 \ub418\ub3c4\ub85d \ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ud1b5\ud574 \ud604\uc7ac \uc2e4\ud589\uc911\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589 \uc911\uc784\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 4 seconds ago Up 3 seconds demo2\n')),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker exec")," \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c \uc2e4\ud589\uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc5d0 \uc811\uc18d\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker exec -it demo2 /bin/bash\n")),(0,r.kt)("p",null,"\uc774 \uc804\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker run"),"\uacfc \ub3d9\uc77c\ud558\uac8c container \ub0b4\ubd80\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"exit"),"\uc744 \ud1b5\ud574 \uc885\ub8cc\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"7-docker-logs"},"7. Docker logs"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc758 log\ub97c \ud655\uc778\ud558\ub294 \ucee4\ub9e8\ub4dc \uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs --help\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'docker run --name demo3 -d busybox sh -c "while true; do $(echo date); sleep 1; done"\n')),(0,r.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c test \ub77c\ub294 \uc774\ub984\uc758 busybox \ucee8\ud14c\uc774\ub108\ub97c \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub85c \uc2e4\ud589\ud558\uc5ec, 1\ucd08\uc5d0 \ud55c \ubc88\uc529 \ud604\uc7ac \uc2dc\uac04\uc744 \ucd9c\ub825\ud558\ub3c4\ub85d \ud588\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 log\ub97c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs demo3\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \ube44\uc2b7\ud558\uac8c \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Sun Mar 6 11:06:49 UTC 2022\nSun Mar 6 11:06:50 UTC 2022\nSun Mar 6 11:06:51 UTC 2022\nSun Mar 6 11:06:52 UTC 2022\nSun Mar 6 11:06:53 UTC 2022\nSun Mar 6 11:06:54 UTC 2022\n")),(0,r.kt)("p",null,"\uadf8\ub7f0\ub370 \uc774\ub807\uac8c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc5ec\ud0dc\uae4c\uc9c0 \ucc0d\ud78c log \ubc16\uc5d0 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \ub54c ",(0,r.kt)("inlineCode",{parentName:"p"},"-f")," \uc635\uc158\uc744 \uc774\uc6a9\ud574 \uacc4\uc18d watch \ud558\uba70 \ucd9c\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs demo3 -f \n")),(0,r.kt)("h2",{id:"8-docker-stop"},"8. Docker stop"),(0,r.kt)("p",null,"\uc2e4\ud589 \uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc911\ub2e8\uc2dc\ud0a4\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop --help\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ud1b5\ud574 \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" About a minute ago Up About a minute demo3\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 4 minutes ago Up 4 minutes demo2\n')),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker stop")," \uc744 \ud1b5\ud574 \ub3c4\ucee4\ub97c \uc815\uc9c0\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop demo2\n")),(0,r.kt)("p",null,"\uc2e4\ud589 \ud6c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ub2e4\uc2dc \uc785\ub825\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" 2 minutes ago Up 2 minutes demo3\n')),(0,r.kt)("p",null,"\uc704\uc758 \uacb0\uacfc\uc640 \ube44\uad50\ud588\uc744 \ub54c demo2 \ucee8\ud14c\uc774\ub108\uac00 \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108 \ubaa9\ub85d\uc5d0\uc11c \uc0ac\ub77c\uc9c4 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub098\uba38\uc9c0 \ucee8\ud14c\uc774\ub108\ub3c4 \uc815\uc9c0\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop demo3\n")),(0,r.kt)("h2",{id:"9-docker-rm"},"9. Docker rm"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc0ad\uc81c\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm --help\n")),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc885\ub8cc\uac00 \ub41c \uc0c1\ud0dc\ub85c \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps -a"),"\ub97c \ud1b5\ud574\uc11c \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub3c4 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7f0\ub370 \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uc65c \uc9c0\uc6cc\uc57c \ud560\uae4c\uc694?",(0,r.kt)("br",{parentName:"p"}),"\n","\uc885\ub8cc\ub418\uc5b4 \uc788\ub294 \ub3c4\ucee4\uc5d0\ub294 \uc774\uc804\uc5d0 \uc0ac\uc6a9\ud55c \ub370\uc774\ud130\uac00 \uc544\uc9c1 \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0 \ub0a8\uc544\uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub798\uc11c restart \ub4f1\uc744 \ud1b5\ud574\uc11c \ucee8\ud14c\uc774\ub108\ub97c \uc7ac\uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7f0\ub370 \uc774 \uacfc\uc815\uc5d0\uc11c disk\ub97c \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uadf8\ub798\uc11c \uc644\uc804\ud788 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ucee8\ud14c\uc774\ub108\ub97c \uc9c0\uc6b0\uae30 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker rm")," \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud604\uc7ac \ucee8\ud14c\uc774\ub108\ub4e4\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps -a\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 3\uac1c\uc758 \ucee8\ud14c\uc774\ub108\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" 4 minutes ago Exited (137) About a minute ago demo3\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 7 minutes ago Exited (137) 2 minutes ago demo2\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 10 minutes ago Exited (0) 10 minutes ago demo1\n')),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"demo3")," \ucee8\ud14c\uc774\ub108\ub97c \uc0ad\uc81c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm demo3\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps -a")," \uba85\ub839\uc5b4\ub97c \uce58\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 2\uac1c\ub85c \uc904\uc5c8\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 13 minutes ago Exited (137) 8 minutes ago demo2\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 16 minutes ago Exited (0) 16 minutes ago demo1\n')),(0,r.kt)("p",null,"\ub098\uba38\uc9c0 \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \uc0ad\uc81c\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm demo2\ndocker rm demo1\n")),(0,r.kt)("h2",{id:"10-docker-rmi"},"10. Docker rmi"),(0,r.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rmi --help\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ud604\uc7ac \uc5b4\ub5a4 \uc774\ubbf8\uc9c0\ub4e4\uc774 \ub85c\uceec\uc5d0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nbusybox latest a8440bba1bc0 32 hours ago 1.41MB\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"busybox")," \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rmi busybox\n")),(0,r.kt)("p",null,"\ub2e4\uc2dc ",(0,r.kt)("inlineCode",{parentName:"p"},"docker images"),"\ub97c \uce60 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"},"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/272bb263.3aedfbc9.js b/assets/js/272bb263.3aedfbc9.js deleted file mode 100644 index b19be4e1..00000000 --- a/assets/js/272bb263.3aedfbc9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6358],{3905:(e,n,a)=>{a.d(n,{Zo:()=>u,kt:()=>m});var t=a(7294);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function o(e){for(var n=1;n=0||(r[a]=e[a]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=t.createContext({}),s=function(e){var n=t.useContext(i),a=n;return e&&(a="function"==typeof e?e(n):o(o({},n),e)),a},u=function(e){var n=s(e.components);return t.createElement(i.Provider,{value:n},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var a=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),c=s(a),d=r,m=c["".concat(i,".").concat(d)]||c[d]||k[d]||l;return a?t.createElement(m,o(o({ref:n},u),{},{components:a})):t.createElement(m,o({ref:n},u))}));function m(e,n){var a=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=d;var p={};for(var i in n)hasOwnProperty.call(n,i)&&(p[i]=n[i]);p.originalType=e,p[c]="string"==typeof e?e:r,o[1]=p;for(var s=2;s{a.r(n),a.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>k,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var t=a(7462),r=(a(7294),a(3905));const l={title:"[Practice] Docker command",description:"Practice to use docker command.",sidebar_position:4,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,p={unversionedId:"prerequisites/docker/command",id:"version-1.0/prerequisites/docker/command",title:"[Practice] Docker command",description:"Practice to use docker command.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/command.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/command",permalink:"/docs/1.0/prerequisites/docker/command",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/command.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"[Practice] Docker command",description:"Practice to use docker command.",sidebar_position:4,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"What is Docker?",permalink:"/docs/1.0/prerequisites/docker/"},next:{title:"[Practice] Docker images",permalink:"/docs/1.0/prerequisites/docker/images"}},i={},s=[{value:"1. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"1-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"2. Docker Pull",id:"2-docker-pull",level:2},{value:"3. Docker images",id:"3-docker-images",level:2},{value:"4. Docker ps",id:"4-docker-ps",level:2},{value:"5. Docker run",id:"5-docker-run",level:2},{value:"6. Docker exec",id:"6-docker-exec",level:2},{value:"7. Docker logs",id:"7-docker-logs",level:2},{value:"8. Docker stop",id:"8-docker-stop",level:2},{value:"9. Docker rm",id:"9-docker-rm",level:2},{value:"10. Docker rmi",id:"10-docker-rmi",level:2},{value:"References",id:"references",level:2}],u={toc:s},c="wrapper";function k(e){let{components:n,...a}=e;return(0,r.kt)(c,(0,t.Z)({},u,a,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"1-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"1. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run hello-world\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Hello from Docker!\nThis message shows that your installation appears to be working correctly.\n....\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"(For ubuntu)")," sudo \uc5c6\uc774 \uc0ac\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 \uc544\ub798 \uc0ac\uc774\ud2b8\ub97c \ucc38\uace0\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user"},"https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user"))),(0,r.kt)("h2",{id:"2-docker-pull"},"2. Docker Pull"),(0,r.kt)("p",null,"docker image registry(\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc800\uc7a5\ud558\uace0 \uacf5\uc720\ud560 \uc218 \uc788\ub294 \uc800\uc7a5\uc18c)\ub85c\ubd80\ud130 Docker image \ub97c \ub85c\uceec\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc544\ub798 \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 docker pull\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud55c argument\ub4e4\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker pull --help\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]\n\nPull an image or a repository from a registry\n\nOptions:\n -a, --all-tags Download all tagged images in the repository\n --disable-content-trust Skip image verification (default true)\n --platform string Set platform if server is multi-platform capable\n -q, --quiet Suppress verbose output\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c \uc54c \uc218 \uc788\ub294 \uac83\uc740 \ubc14\ub85c docker pull\uc740 \ub450 \uac1c \ud0c0\uc785\uc758 argument\ub97c \ubc1b\ub294\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[OPTIONS]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"NAME[:TAG|@DIGEST]"))),(0,r.kt)("p",null,"help\uc5d0\uc11c \ub098\uc628 ",(0,r.kt)("inlineCode",{parentName:"p"},"-a"),", -",(0,r.kt)("inlineCode",{parentName:"p"},"q")," \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 NAME \uc55e\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc9c1\uc811 ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu:18.04")," \uc774\ubbf8\uc9c0\ub97c pull \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker pull ubuntu:18.04\n")),(0,r.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub97c \ud574\uc11d\ud558\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu")," \ub77c\ub294 \uc774\ub984\uc744 \uac00\uc9c4 \uc774\ubbf8\uc9c0 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"18.04")," \ud0dc\uadf8\uac00 \ub2ec\ub824\uc788\ub294 \uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc624\ub77c\ub294 \ub73b\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d, \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"18.04: Pulling from library/ubuntu\n20d796c36622: Pull complete \nDigest: sha256:42cd9143b6060261187a72716906187294b8b66653b50d70bc7a90ccade5c984\nStatus: Downloaded newer image for ubuntu:18.04\ndocker.io/library/ubuntu:18.04\n")),(0,r.kt)("p",null,"\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uba74 ",(0,r.kt)("a",{parentName:"p",href:"http://docker.io/library/"},"docker.io/library")," \ub77c\ub294 \uc774\ub984\uc758 registry \uc5d0\uc11c ubuntu:18.04 \ub77c\ub294 image \ub97c \uc5ec\ub7ec\ubd84\uc758 \ub178\ud2b8\ubd81\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uac8c\ub429\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ucc38\uace0\uc0ac\ud56d",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucd94\ud6c4 ",(0,r.kt)("a",{parentName:"li",href:"http://docker.io"},"docker.io")," \ub098 public \ud55c docker hub \uc640 \uac19\uc740 registry \ub300\uc2e0\uc5d0, \ud2b9\uc815 ",(0,r.kt)("strong",{parentName:"li"},"private")," \ud55c registry \uc5d0\uc11c docker image \ub97c \uac00\uc838\uc640\uc57c \ud558\ub294 \uacbd\uc6b0\uc5d0\ub294, ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/login/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker login"))," \uc744 \ud1b5\ud574\uc11c \ud2b9\uc815 registry \ub97c \ubc14\ub77c\ubcf4\ub3c4\ub85d \ud55c \ub4a4, docker pull \uc744 \uc218\ud589\ud558\ub294 \ud615\ud0dc\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ud639\uc740 insecure registry \ub97c \uc124\uc815\ud558\ub294 ",(0,r.kt)("a",{parentName:"li",href:"https://stackoverflow.com/questions/42211380/add-insecure-registry-to-docker"},"\ubc29\uc548"),"\ub3c4 \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"\ud3d0\uc1c4\ub9dd\uc5d0\uc11c docker image \ub97c ",(0,r.kt)("inlineCode",{parentName:"li"},".tar")," \ud30c\uc77c\uacfc \uac19\uc740 \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uace0 \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/save/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker save")),", ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/load/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker load"))," \uc640 \uac19\uc740 \uba85\ub839\uc5b4\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4.")))),(0,r.kt)("h2",{id:"3-docker-images"},"3. Docker images"),(0,r.kt)("p",null,"\ub85c\uceec\uc5d0 \uc874\uc7ac\ud558\ub294 docker image \ub9ac\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images --help\n")),(0,r.kt)("p",null,"docker images\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 argument\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]\n\nList images\n\nOptions:\n -a, --all Show all images (default hides intermediate images)\n --digests Show digests\n -f, --filter filter Filter output based on conditions provided\n --format string Pretty-print images using a Go template\n --no-trunc Don't truncate output\n -q, --quiet Only show image IDs\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc9c1\uc811 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images\n")),(0,r.kt)("p",null,"\ub9cc\uc57d \ub3c4\ucee4\ub97c \ucd5c\ucd08 \uc124\uce58 \ud6c4 \uc774 \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("p",null,"\uc904 \uc218 \uc788\ub294 argument\uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"-q"),"\ub97c \uc0ac\uc6a9\ud558\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"IMAGE ID")," \ub9cc \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images -q\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"29e70752d7b2\n")),(0,r.kt)("h2",{id:"4-docker-ps"},"4. Docker ps"),(0,r.kt)("p",null,"\ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108 \ub9ac\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps --help\n")),(0,r.kt)("p",null,"docker ps\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 argument\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker ps [OPTIONS]\n\nList containers\n\nOptions:\n -a, --all Show all containers (default shows just running)\n -f, --filter filter Filter output based on conditions provided\n --format string Pretty-print containers using a Go template\n -n, --last int Show n last created containers (includes all states) (default -1)\n -l, --latest Show the latest created container (includes all states)\n --no-trunc Don't truncate output\n -q, --quiet Only display container IDs\n -s, --size Display total file sizes\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc9c1\uc811 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps\n")),(0,r.kt)("p",null,"\ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\uac00 \uc5c6\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n")),(0,r.kt)("p",null,"\ub9cc\uc57d \uc2e4\ud589\ub418\ub294 \ucee8\ud14c\uc774\ub108\uac00 \uc788\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nc1e8f5e89d8d ubuntu "sleep 3600" 13 seconds ago Up 12 seconds trusting_newton\n')),(0,r.kt)("h2",{id:"5-docker-run"},"5. Docker run"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run --help\n")),(0,r.kt)("p",null,"docker run\uc744 \uc2e4\ud589\ud558\ub294 \uba85\ub839\uc5b4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]\n\nRun a command in a new container\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c \uc6b0\ub9ac\uac00 \ud655\uc778\ud574\uc57c \ud558\ub294 \uac83\uc740 \ubc14\ub85c docker run\uc740 \uc138 \uac1c \ud0c0\uc785\uc758 argument\ub97c \ubc1b\ub294\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[OPTIONS]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[COMMAND]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[ARG...]"))),(0,r.kt)("p",null,"\uc9c1\uc811 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"## Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]\ndocker run -it --name demo1 ubuntu:18.04 /bin/bash\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-it")," : ",(0,r.kt)("inlineCode",{parentName:"li"},"-i")," \uc635\uc158 + ",(0,r.kt)("inlineCode",{parentName:"li"},"-t")," \uc635\uc158",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"container \ub97c \uc2e4\ud589\uc2dc\ud0b4\uacfc \ub3d9\uc2dc\uc5d0 interactive \ud55c terminal \ub85c \uc811\uc18d\uc2dc\ucf1c\uc8fc\ub294 \uc635\uc158"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--name")," : name",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 id \ub300\uc2e0, \uad6c\ubd84\ud558\uae30 \uc27d\ub3c4\ub85d \uc9c0\uc815\ud574\uc8fc\ub294 \uc774\ub984"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"/bin/bash"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0b4\uacfc \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ud560 \ucee4\ub9e8\ub4dc\ub85c, ",(0,r.kt)("inlineCode",{parentName:"li"},"/bin/bash")," \ub294 bash \uc258\uc744 \uc5ec\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.")))),(0,r.kt)("p",null,"\uc2e4\ud589 \ud6c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"exit")," \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ucee8\ud14c\uc774\ub108\ub97c \uc885\ub8cc\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774 \uc81c \uc55e\uc11c \ubc30\uc6e0\ub358 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps")," \uba85\ub839\uc5b4\ub97c \uce58\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n")),(0,r.kt)("p",null,"\uc2e4\ud589\ub418\uace0 \uc788\ub294 \ucee8\ud14c\uc774\ub108\uac00 \ub098\uc628\ub2e4\uace0 \ud588\uc9c0\ub9cc \uc5b4\uc9f8\uc11c\uc778\uc9c0 \ubc29\uae08 \uc2e4\ud589\ud55c \ucee8\ud14c\uc774\ub108\uac00 \ubcf4\uc774\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uadf8 \uc774\uc720\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub294 \uae30\ubcf8\uac12\uc73c\ub85c \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\ub97c \ubcf4\uc5ec\uc8fc\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \ubcf4\uace0 \uc2f6\ub2e4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"-a")," \uc635\uc158\uc744 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps -a\n")),(0,r.kt)("p",null,"\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108 \ubaa9\ub85d\ub3c4 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago demo1\n')),(0,r.kt)("h2",{id:"6-docker-exec"},"6. Docker exec"),(0,r.kt)("p",null,"Docker \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uba85\ub839\uc744 \ub0b4\ub9ac\uac70\ub098, \ub0b4\ubd80\ub85c \uc811\uc18d\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker exec --help\n")),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d --name demo2 ubuntu:18.04 sleep 3600\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"-d")," \uc635\uc158\uc740 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \uc2e4\ud589\uc2dc\ucf1c\uc11c, \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \uc811\uc18d \uc885\ub8cc\ub97c \ud558\ub354\ub77c\ub3c4, \uacc4\uc18d \uc2e4\ud589 \uc911\uc774 \ub418\ub3c4\ub85d \ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ud1b5\ud574 \ud604\uc7ac \uc2e4\ud589\uc911\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589 \uc911\uc784\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 4 seconds ago Up 3 seconds demo2\n')),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker exec")," \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c \uc2e4\ud589\uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc5d0 \uc811\uc18d\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker exec -it demo2 /bin/bash\n")),(0,r.kt)("p",null,"\uc774 \uc804\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker run"),"\uacfc \ub3d9\uc77c\ud558\uac8c container \ub0b4\ubd80\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"exit"),"\uc744 \ud1b5\ud574 \uc885\ub8cc\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"7-docker-logs"},"7. Docker logs"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc758 log\ub97c \ud655\uc778\ud558\ub294 \ucee4\ub9e8\ub4dc \uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs --help\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'docker run --name demo3 -d busybox sh -c "while true; do $(echo date); sleep 1; done"\n')),(0,r.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c test \ub77c\ub294 \uc774\ub984\uc758 busybox \ucee8\ud14c\uc774\ub108\ub97c \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub85c \uc2e4\ud589\ud558\uc5ec, 1\ucd08\uc5d0 \ud55c \ubc88\uc529 \ud604\uc7ac \uc2dc\uac04\uc744 \ucd9c\ub825\ud558\ub3c4\ub85d \ud588\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 log\ub97c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs demo3\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \ube44\uc2b7\ud558\uac8c \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Sun Mar 6 11:06:49 UTC 2022\nSun Mar 6 11:06:50 UTC 2022\nSun Mar 6 11:06:51 UTC 2022\nSun Mar 6 11:06:52 UTC 2022\nSun Mar 6 11:06:53 UTC 2022\nSun Mar 6 11:06:54 UTC 2022\n")),(0,r.kt)("p",null,"\uadf8\ub7f0\ub370 \uc774\ub807\uac8c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc5ec\ud0dc\uae4c\uc9c0 \ucc0d\ud78c log \ubc16\uc5d0 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \ub54c ",(0,r.kt)("inlineCode",{parentName:"p"},"-f")," \uc635\uc158\uc744 \uc774\uc6a9\ud574 \uacc4\uc18d watch \ud558\uba70 \ucd9c\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs demo3 -f \n")),(0,r.kt)("h2",{id:"8-docker-stop"},"8. Docker stop"),(0,r.kt)("p",null,"\uc2e4\ud589 \uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc911\ub2e8\uc2dc\ud0a4\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop --help\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ud1b5\ud574 \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" About a minute ago Up About a minute demo3\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 4 minutes ago Up 4 minutes demo2\n')),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker stop")," \uc744 \ud1b5\ud574 \ub3c4\ucee4\ub97c \uc815\uc9c0\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop demo2\n")),(0,r.kt)("p",null,"\uc2e4\ud589 \ud6c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ub2e4\uc2dc \uc785\ub825\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" 2 minutes ago Up 2 minutes demo3\n')),(0,r.kt)("p",null,"\uc704\uc758 \uacb0\uacfc\uc640 \ube44\uad50\ud588\uc744 \ub54c demo2 \ucee8\ud14c\uc774\ub108\uac00 \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108 \ubaa9\ub85d\uc5d0\uc11c \uc0ac\ub77c\uc9c4 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub098\uba38\uc9c0 \ucee8\ud14c\uc774\ub108\ub3c4 \uc815\uc9c0\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop demo3\n")),(0,r.kt)("h2",{id:"9-docker-rm"},"9. Docker rm"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc0ad\uc81c\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm --help\n")),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc885\ub8cc\uac00 \ub41c \uc0c1\ud0dc\ub85c \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps -a"),"\ub97c \ud1b5\ud574\uc11c \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub3c4 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7f0\ub370 \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uc65c \uc9c0\uc6cc\uc57c \ud560\uae4c\uc694?",(0,r.kt)("br",{parentName:"p"}),"\n","\uc885\ub8cc\ub418\uc5b4 \uc788\ub294 \ub3c4\ucee4\uc5d0\ub294 \uc774\uc804\uc5d0 \uc0ac\uc6a9\ud55c \ub370\uc774\ud130\uac00 \uc544\uc9c1 \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0 \ub0a8\uc544\uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub798\uc11c restart \ub4f1\uc744 \ud1b5\ud574\uc11c \ucee8\ud14c\uc774\ub108\ub97c \uc7ac\uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7f0\ub370 \uc774 \uacfc\uc815\uc5d0\uc11c disk\ub97c \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uadf8\ub798\uc11c \uc644\uc804\ud788 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ucee8\ud14c\uc774\ub108\ub97c \uc9c0\uc6b0\uae30 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker rm")," \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud604\uc7ac \ucee8\ud14c\uc774\ub108\ub4e4\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps -a\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 3\uac1c\uc758 \ucee8\ud14c\uc774\ub108\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" 4 minutes ago Exited (137) About a minute ago demo3\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 7 minutes ago Exited (137) 2 minutes ago demo2\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 10 minutes ago Exited (0) 10 minutes ago demo1\n')),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"demo3")," \ucee8\ud14c\uc774\ub108\ub97c \uc0ad\uc81c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm demo3\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps -a")," \uba85\ub839\uc5b4\ub97c \uce58\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 2\uac1c\ub85c \uc904\uc5c8\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 13 minutes ago Exited (137) 8 minutes ago demo2\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 16 minutes ago Exited (0) 16 minutes ago demo1\n')),(0,r.kt)("p",null,"\ub098\uba38\uc9c0 \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \uc0ad\uc81c\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm demo2\ndocker rm demo1\n")),(0,r.kt)("h2",{id:"10-docker-rmi"},"10. Docker rmi"),(0,r.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rmi --help\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ud604\uc7ac \uc5b4\ub5a4 \uc774\ubbf8\uc9c0\ub4e4\uc774 \ub85c\uceec\uc5d0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nbusybox latest a8440bba1bc0 32 hours ago 1.41MB\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"busybox")," \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rmi busybox\n")),(0,r.kt)("p",null,"\ub2e4\uc2dc ",(0,r.kt)("inlineCode",{parentName:"p"},"docker images"),"\ub97c \uce60 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"},"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/29c7a46b.3c66c008.js b/assets/js/29c7a46b.3c66c008.js new file mode 100644 index 00000000..fb05788e --- /dev/null +++ b/assets/js/29c7a46b.3c66c008.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1612],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function p(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):p(p({},n),e)),t},m=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},s="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),s=u(t),d=o,f=s["".concat(l,".").concat(d)]||s[d]||c[d]||a;return t?r.createElement(f,p(p({ref:n},m),{},{components:t})):r.createElement(f,p({ref:n},m))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,p=new Array(a);p[0]=d;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i[s]="string"==typeof e?e:o,p[1]=i;for(var u=2;u{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(7462),o=(t(7294),t(3905));const a={title:"4. Component - Write",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},p=void 0,i={unversionedId:"kubeflow/basic-component",id:"version-1.0/kubeflow/basic-component",title:"4. Component - Write",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-component.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-component",permalink:"/docs/1.0/kubeflow/basic-component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-component.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Component - Write",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"3. Install Requirements",permalink:"/docs/1.0/kubeflow/basic-requirements"},next:{title:"5. Pipeline - Write",permalink:"/docs/1.0/kubeflow/basic-pipeline"}},l={},u=[{value:"Component",id:"component",level:2},{value:"Component Contents",id:"component-contents",level:2},{value:"Component Wrapper",id:"component-wrapper",level:2},{value:"Define a standalone Python function",id:"define-a-standalone-python-function",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"Share component with yaml file",id:"share-component-with-yaml-file",level:3},{value:"How Kubeflow executes component",id:"how-kubeflow-executes-component",level:2},{value:"References:",id:"references",level:2}],m={toc:u},s="wrapper";function c(e){let{components:n,...t}=e;return(0,o.kt)(s,(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"component"},"Component"),(0,o.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8(Component)\ub97c \uc791\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20(Component Contents) \uc791\uc131"),(0,o.kt)("li",{parentName:"ol"},"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c(Component Wrapper) \uc791\uc131")),(0,o.kt)("p",null,"\uc774\uc81c \uac01 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"component-contents"},"Component Contents"),(0,o.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub294 \uc6b0\ub9ac\uac00 \ud754\ud788 \uc791\uc131\ud558\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc\uc640 \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc22b\uc790\ub97c \uc785\ub825\uc73c\ub85c \ubc1b\uace0 \uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c \ucd9c\ub825\ud55c \ub4a4 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"print(number)\n")),(0,o.kt)("p",null,"\uadf8\ub7f0\ub370 \uc774 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 \uc5d0\ub7ec\uac00 \ub098\uace0 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294\ub370 \uadf8 \uc774\uc720\ub294 \ucd9c\ub825\ud574\uc57c \ud560 ",(0,o.kt)("inlineCode",{parentName:"p"},"number"),"\uac00 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/kubeflow-concepts"},"Kubeflow Concepts"),"\uc5d0\uc11c ",(0,o.kt)("inlineCode",{parentName:"p"},"number")," \uc640 \uac19\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc5d0\uc11c \ud544\uc694\ud55c \uac12\ub4e4\uc740 ",(0,o.kt)("strong",{parentName:"p"},"Config"),"\ub85c \uc815\uc758\ud55c\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574 \ud544\uc694\ud55c Config\ub4e4\uc740 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uc5d0\uc11c \uc804\ub2ec\uc774 \ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"component-wrapper"},"Component Wrapper"),(0,o.kt)("h3",{id:"define-a-standalone-python-function"},"Define a standalone Python function"),(0,o.kt)("p",null,"\uc774\uc81c \ud544\uc694\ud55c Config\ub97c \uc804\ub2ec\ud560 \uc218 \uc788\ub3c4\ub85d \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ubcc4\ub3c4\uc758 Config \uc5c6\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub85c \uac10\uc300 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"def print_and_return_number():\n print(number)\n return number\n")),(0,o.kt)("p",null,"\uc774\uc81c \ucf58\ud150\uce20\uc5d0\uc11c \ud544\uc694\ud55c Config\ub97c \ub798\ud37c\uc758 argument\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e4\ub9cc, argument \ub9cc\uc744 \uc801\ub294 \uac83\uc774 \uc544\ub2c8\ub77c argument\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub3c4 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. Kubeflow\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 Kubeflow \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud560 \ub54c, \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc758 \uc5f0\uacb0\uc5d0\uc11c \uc815\ud574\uc9c4 \uc785\ub825\uacfc \ucd9c\ub825\uc758 \ud0c0\uc785\uc774 \uc77c\uce58\ud558\ub294\uc9c0 \uccb4\ud06c\ud569\ub2c8\ub2e4. \ub9cc\uc57d \ucef4\ud3ec\ub10c\ud2b8\uac00 \ud544\uc694\ub85c \ud558\ub294 \uc785\ub825\uacfc \ub2e4\ub978 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uc804\ub2ec\ubc1b\uc740 \ucd9c\ub825\uc758 \ud3ec\ub9f7\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0 \ud30c\uc774\ud504\ub77c\uc778 \uc0dd\uc131\uc744 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\uc81c \ub2e4\uc74c\uacfc \uac19\uc774 argument\uc640 \uadf8 \ud0c0\uc785, \uadf8\ub9ac\uace0 \ubc18\ud658\ud558\ub294 \ud0c0\uc785\uc744 \uc801\uc5b4\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc644\uc131\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"def print_and_return_number(number: int) -> int:\n print(number)\n return number\n")),(0,o.kt)("p",null,"Kubeflow\uc5d0\uc11c \ubc18\ud658 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud0c0\uc785\uc740 json\uc5d0\uc11c \ud45c\ud604\ud560 \uc218 \uc788\ub294 \ud0c0\uc785\ub4e4\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub300\ud45c\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\uba70 \uad8c\uc7a5\ud558\ub294 \ud0c0\uc785\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"int"),(0,o.kt)("li",{parentName:"ul"},"float"),(0,o.kt)("li",{parentName:"ul"},"str")),(0,o.kt)("p",null,"\ub9cc\uc57d \ub2e8\uc77c \uac12\uc774 \uc544\ub2cc \uc5ec\ub7ec \uac12\uc744 \ubc18\ud658\ud558\ub824\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"collections.namedtuple")," \uc744 \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/python-function-components/#passing-parameters-by-value"},"Kubeflow \uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ucc38\uace0 \ud558\uc2dc\uae38 \ubc14\ub78d\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c 2\ub85c \ub098\ub208 \ubaab\uacfc \ub098\uba38\uc9c0\ub97c \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from typing import NamedTuple\n\n\ndef divide_and_return_number(\n number: int,\n) -> NamedTuple("DivideOutputs", [("quotient", int), ("remainder", int)]):\n from collections import namedtuple\n\n quotient, remainder = divmod(number, 2)\n print("quotient is", quotient)\n print("remainder is", remainder)\n\n divide_outputs = namedtuple(\n "DivideOutputs",\n [\n "quotient",\n "remainder",\n ],\n )\n return divide_outputs(quotient, remainder)\n')),(0,o.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,o.kt)("p",null,"\uc774\uc81c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud574\uc57c \ud569\ub2c8\ub2e4. \ubcc0\ud658\uc740 ",(0,o.kt)("inlineCode",{parentName:"p"},"kfp.components.create_component_from_func")," \ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub807\uac8c \ubcc0\ud658\ub41c \ud615\ud0dc\ub294 \ud30c\uc774\uc36c\uc5d0\uc11c \ud568\uc218\ub85c import \ud558\uc5ec\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from kfp.components import create_component_from_func\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n")),(0,o.kt)("h3",{id:"share-component-with-yaml-file"},"Share component with yaml file"),(0,o.kt)("p",null,"\ub9cc\uc57d \ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \uacf5\uc720\ub97c \ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0 YAML \ud30c\uc77c\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uacf5\uc720\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub97c \uc704\ud574\uc11c\ub294 \uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\ub97c YAML \ud30c\uc77c\ub85c \ubcc0\ud658\ud55c \ub4a4 ",(0,o.kt)("inlineCode",{parentName:"p"},"kfp.components.load_component_from_file")," \uc744 \ud1b5\ud574 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc6b0\uc120 \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c YAML \ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import create_component_from_func\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\nif __name__ == "__main__":\n print_and_return_number.component_spec.save("print_and_return_number.yaml")\n')),(0,o.kt)("p",null,"\uc791\uc131\ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"print_and_return_number.yaml")," \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4. \ud30c\uc77c\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'name: Print and return number\ninputs:\n- {name: number, type: Integer}\noutputs:\n- {name: Output, type: Integer}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n args:\n - --number\n - {inputValue: number}\n - \'----output-paths\'\n - {outputPath: Output}\n')),(0,o.kt)("p",null,"\uc774\uc81c \uc0dd\uc131\ub41c \ud30c\uc77c\uc744 \uacf5\uc720\ud574\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import load_component_from_file\n\nprint_and_return_number = load_component_from_file("print_and_return_number.yaml")\n')),(0,o.kt)("h2",{id:"how-kubeflow-executes-component"},"How Kubeflow executes component"),(0,o.kt)("p",null,"Kubeflow\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"docker pull "),": \uc815\uc758\ub41c \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \ud658\uacbd \uc815\ubcf4\uac00 \ub2f4\uae34 \uc774\ubbf8\uc9c0\ub97c pull"),(0,o.kt)("li",{parentName:"ol"},"run ",(0,o.kt)("inlineCode",{parentName:"li"},"command"),": pull \ud55c \uc774\ubbf8\uc9c0\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. ")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"print_and_return_number.yaml")," \ub97c \uc608\uc2dc\ub85c \ub4e4\uc790\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"@create_component_from_func")," \uc758 default image \ub294 python:3.7 \uc774\ubbc0\ub85c \ud574\ub2f9 \uc774\ubbf8\uc9c0\ub97c \uae30\uc900\uc73c\ub85c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"print(number)"))),(0,o.kt)("h2",{id:"references"},"References:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/python-function-components/#getting-started-with-python-function-based-components"},"Getting Started With Python function based components"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/29c7a46b.807f5a08.js b/assets/js/29c7a46b.807f5a08.js deleted file mode 100644 index 67632455..00000000 --- a/assets/js/29c7a46b.807f5a08.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1612],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function p(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):p(p({},n),e)),t},m=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},s="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),s=u(t),d=o,f=s["".concat(l,".").concat(d)]||s[d]||c[d]||a;return t?r.createElement(f,p(p({ref:n},m),{},{components:t})):r.createElement(f,p({ref:n},m))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,p=new Array(a);p[0]=d;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i[s]="string"==typeof e?e:o,p[1]=i;for(var u=2;u{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(7462),o=(t(7294),t(3905));const a={title:"4. Component - Write",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},p=void 0,i={unversionedId:"kubeflow/basic-component",id:"version-1.0/kubeflow/basic-component",title:"4. Component - Write",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-component.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-component",permalink:"/docs/1.0/kubeflow/basic-component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-component.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Component - Write",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"3. Install Requirements",permalink:"/docs/1.0/kubeflow/basic-requirements"},next:{title:"5. Pipeline - Write",permalink:"/docs/1.0/kubeflow/basic-pipeline"}},l={},u=[{value:"Component",id:"component",level:2},{value:"Component Contents",id:"component-contents",level:2},{value:"Component Wrapper",id:"component-wrapper",level:2},{value:"Define a standalone Python function",id:"define-a-standalone-python-function",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"Share component with yaml file",id:"share-component-with-yaml-file",level:3},{value:"How Kubeflow executes component",id:"how-kubeflow-executes-component",level:2},{value:"References:",id:"references",level:2}],m={toc:u},s="wrapper";function c(e){let{components:n,...t}=e;return(0,o.kt)(s,(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"component"},"Component"),(0,o.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8(Component)\ub97c \uc791\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20(Component Contents) \uc791\uc131"),(0,o.kt)("li",{parentName:"ol"},"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c(Component Wrapper) \uc791\uc131")),(0,o.kt)("p",null,"\uc774\uc81c \uac01 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"component-contents"},"Component Contents"),(0,o.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub294 \uc6b0\ub9ac\uac00 \ud754\ud788 \uc791\uc131\ud558\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc\uc640 \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc22b\uc790\ub97c \uc785\ub825\uc73c\ub85c \ubc1b\uace0 \uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c \ucd9c\ub825\ud55c \ub4a4 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"print(number)\n")),(0,o.kt)("p",null,"\uadf8\ub7f0\ub370 \uc774 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 \uc5d0\ub7ec\uac00 \ub098\uace0 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294\ub370 \uadf8 \uc774\uc720\ub294 \ucd9c\ub825\ud574\uc57c \ud560 ",(0,o.kt)("inlineCode",{parentName:"p"},"number"),"\uac00 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/kubeflow-concepts"},"Kubeflow Concepts"),"\uc5d0\uc11c ",(0,o.kt)("inlineCode",{parentName:"p"},"number")," \uc640 \uac19\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc5d0\uc11c \ud544\uc694\ud55c \uac12\ub4e4\uc740 ",(0,o.kt)("strong",{parentName:"p"},"Config"),"\ub85c \uc815\uc758\ud55c\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574 \ud544\uc694\ud55c Config\ub4e4\uc740 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uc5d0\uc11c \uc804\ub2ec\uc774 \ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"component-wrapper"},"Component Wrapper"),(0,o.kt)("h3",{id:"define-a-standalone-python-function"},"Define a standalone Python function"),(0,o.kt)("p",null,"\uc774\uc81c \ud544\uc694\ud55c Config\ub97c \uc804\ub2ec\ud560 \uc218 \uc788\ub3c4\ub85d \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ubcc4\ub3c4\uc758 Config \uc5c6\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub85c \uac10\uc300 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"def print_and_return_number():\n print(number)\n return number\n")),(0,o.kt)("p",null,"\uc774\uc81c \ucf58\ud150\uce20\uc5d0\uc11c \ud544\uc694\ud55c Config\ub97c \ub798\ud37c\uc758 argument\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e4\ub9cc, argument \ub9cc\uc744 \uc801\ub294 \uac83\uc774 \uc544\ub2c8\ub77c argument\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub3c4 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. Kubeflow\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 Kubeflow \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud560 \ub54c, \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc758 \uc5f0\uacb0\uc5d0\uc11c \uc815\ud574\uc9c4 \uc785\ub825\uacfc \ucd9c\ub825\uc758 \ud0c0\uc785\uc774 \uc77c\uce58\ud558\ub294\uc9c0 \uccb4\ud06c\ud569\ub2c8\ub2e4. \ub9cc\uc57d \ucef4\ud3ec\ub10c\ud2b8\uac00 \ud544\uc694\ub85c \ud558\ub294 \uc785\ub825\uacfc \ub2e4\ub978 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uc804\ub2ec\ubc1b\uc740 \ucd9c\ub825\uc758 \ud3ec\ub9f7\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0 \ud30c\uc774\ud504\ub77c\uc778 \uc0dd\uc131\uc744 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\uc81c \ub2e4\uc74c\uacfc \uac19\uc774 argument\uc640 \uadf8 \ud0c0\uc785, \uadf8\ub9ac\uace0 \ubc18\ud658\ud558\ub294 \ud0c0\uc785\uc744 \uc801\uc5b4\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc644\uc131\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"def print_and_return_number(number: int) -> int:\n print(number)\n return number\n")),(0,o.kt)("p",null,"Kubeflow\uc5d0\uc11c \ubc18\ud658 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud0c0\uc785\uc740 json\uc5d0\uc11c \ud45c\ud604\ud560 \uc218 \uc788\ub294 \ud0c0\uc785\ub4e4\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub300\ud45c\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\uba70 \uad8c\uc7a5\ud558\ub294 \ud0c0\uc785\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"int"),(0,o.kt)("li",{parentName:"ul"},"float"),(0,o.kt)("li",{parentName:"ul"},"str")),(0,o.kt)("p",null,"\ub9cc\uc57d \ub2e8\uc77c \uac12\uc774 \uc544\ub2cc \uc5ec\ub7ec \uac12\uc744 \ubc18\ud658\ud558\ub824\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"collections.namedtuple")," \uc744 \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/python-function-components/#passing-parameters-by-value"},"Kubeflow \uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ucc38\uace0 \ud558\uc2dc\uae38 \ubc14\ub78d\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c 2\ub85c \ub098\ub208 \ubaab\uacfc \ub098\uba38\uc9c0\ub97c \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from typing import NamedTuple\n\n\ndef divide_and_return_number(\n number: int,\n) -> NamedTuple("DivideOutputs", [("quotient", int), ("remainder", int)]):\n from collections import namedtuple\n\n quotient, remainder = divmod(number, 2)\n print("quotient is", quotient)\n print("remainder is", remainder)\n\n divide_outputs = namedtuple(\n "DivideOutputs",\n [\n "quotient",\n "remainder",\n ],\n )\n return divide_outputs(quotient, remainder)\n')),(0,o.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,o.kt)("p",null,"\uc774\uc81c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud574\uc57c \ud569\ub2c8\ub2e4. \ubcc0\ud658\uc740 ",(0,o.kt)("inlineCode",{parentName:"p"},"kfp.components.create_component_from_func")," \ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub807\uac8c \ubcc0\ud658\ub41c \ud615\ud0dc\ub294 \ud30c\uc774\uc36c\uc5d0\uc11c \ud568\uc218\ub85c import \ud558\uc5ec\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from kfp.components import create_component_from_func\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n")),(0,o.kt)("h3",{id:"share-component-with-yaml-file"},"Share component with yaml file"),(0,o.kt)("p",null,"\ub9cc\uc57d \ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \uacf5\uc720\ub97c \ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0 YAML \ud30c\uc77c\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uacf5\uc720\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub97c \uc704\ud574\uc11c\ub294 \uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\ub97c YAML \ud30c\uc77c\ub85c \ubcc0\ud658\ud55c \ub4a4 ",(0,o.kt)("inlineCode",{parentName:"p"},"kfp.components.load_component_from_file")," \uc744 \ud1b5\ud574 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc6b0\uc120 \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c YAML \ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import create_component_from_func\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\nif __name__ == "__main__":\n print_and_return_number.component_spec.save("print_and_return_number.yaml")\n')),(0,o.kt)("p",null,"\uc791\uc131\ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"print_and_return_number.yaml")," \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4. \ud30c\uc77c\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'name: Print and return number\ninputs:\n- {name: number, type: Integer}\noutputs:\n- {name: Output, type: Integer}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n args:\n - --number\n - {inputValue: number}\n - \'----output-paths\'\n - {outputPath: Output}\n')),(0,o.kt)("p",null,"\uc774\uc81c \uc0dd\uc131\ub41c \ud30c\uc77c\uc744 \uacf5\uc720\ud574\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import load_component_from_file\n\nprint_and_return_number = load_component_from_file("print_and_return_number.yaml")\n')),(0,o.kt)("h2",{id:"how-kubeflow-executes-component"},"How Kubeflow executes component"),(0,o.kt)("p",null,"Kubeflow\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"docker pull "),": \uc815\uc758\ub41c \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \ud658\uacbd \uc815\ubcf4\uac00 \ub2f4\uae34 \uc774\ubbf8\uc9c0\ub97c pull"),(0,o.kt)("li",{parentName:"ol"},"run ",(0,o.kt)("inlineCode",{parentName:"li"},"command"),": pull \ud55c \uc774\ubbf8\uc9c0\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. ")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"print_and_return_number.yaml")," \ub97c \uc608\uc2dc\ub85c \ub4e4\uc790\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"@create_component_from_func")," \uc758 default image \ub294 python:3.7 \uc774\ubbc0\ub85c \ud574\ub2f9 \uc774\ubbf8\uc9c0\ub97c \uae30\uc900\uc73c\ub85c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"print(number)"))),(0,o.kt)("h2",{id:"references"},"References:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/python-function-components/#getting-started-with-python-function-based-components"},"Getting Started With Python function based components"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2a07449d.6d85d882.js b/assets/js/2a07449d.6d85d882.js deleted file mode 100644 index 48f2fa5c..00000000 --- a/assets/js/2a07449d.6d85d882.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[200],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var l=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=l.createContext({}),s=function(e){var t=l.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return l.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},m=l.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,p=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),u=s(n),m=i,f=u["".concat(p,".").concat(m)]||u[m]||d[m]||r;return n?l.createElement(f,o(o({ref:t},c),{},{components:n})):l.createElement(f,o({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=m;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[u]="string"==typeof e?e:i,o[1]=a;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>s});var l=n(7462),i=(n(7294),n(3905));const r={title:"2. Levels of MLOps",description:"Levels of MLOps",sidebar_position:2,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2022-03-05T00:00:00.000Z"),contributors:["Jongseob Jeon"]},o=void 0,a={unversionedId:"introduction/levels",id:"introduction/levels",title:"2. Levels of MLOps",description:"Levels of MLOps",source:"@site/docs/introduction/levels.md",sourceDirName:"introduction",slug:"/introduction/levels",permalink:"/docs/introduction/levels",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/introduction/levels.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Levels of MLOps",description:"Levels of MLOps",sidebar_position:2,date:"2021-12-03T00:00:00.000Z",lastmod:"2022-03-05T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"1. What is MLOps?",permalink:"/docs/introduction/intro"},next:{title:"3. Components of MLOps",permalink:"/docs/introduction/component"}},p={},s=[{value:"Hidden Technical Debt in ML System",id:"hidden-technical-debt-in-ml-system",level:2},{value:"0\ub2e8\uacc4: \uc218\ub3d9 \ud504\ub85c\uc138\uc2a4",id:"0\ub2e8\uacc4-\uc218\ub3d9-\ud504\ub85c\uc138\uc2a4",level:2},{value:"1\ub2e8\uacc4: ML \ud30c\uc774\ud504\ub77c\uc778 \uc790\ub3d9\ud654",id:"1\ub2e8\uacc4-ml-\ud30c\uc774\ud504\ub77c\uc778-\uc790\ub3d9\ud654",level:2},{value:"Pipeline",id:"pipeline",level:3},{value:"Continuous Training",id:"continuous-training",level:3},{value:"Auto Retrain",id:"auto-retrain",level:4},{value:"Auto Deploy",id:"auto-deploy",level:4},{value:"2\ub2e8\uacc4: CI/CD \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc790\ub3d9\ud654",id:"2\ub2e8\uacc4-cicd-\ud30c\uc774\ud504\ub77c\uc778\uc758-\uc790\ub3d9\ud654",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(u,(0,l.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uad6c\uae00\uc5d0\uc11c \ubc1c\ud45c\ud55c MLOps\uc758 \ub2e8\uacc4\ub97c \ubcf4\uba70 MLOps\uc758 \ud575\uc2ec \uae30\ub2a5\uc740 \ubb34\uc5c7\uc778\uc9c0 \uc54c\uc544 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"hidden-technical-debt-in-ml-system"},"Hidden Technical Debt in ML System"),(0,i.kt)("p",null,"\uad6c\uae00\uc740 \ubb34\ub824 2015\ub144\ubd80\ud130 MLOps\uc758 \ud544\uc694\uc131\uc744 \ub9d0\ud588\uc2b5\ub2c8\ub2e4. Hidden Technical Debt in Machine Learning Systems \uc740 \uadf8\ub7f0 \uad6c\uae00\uc758 \uc0dd\uac01\uc744 \ub2f4\uc740 \ub17c\ubb38\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"paper",src:n(7097).Z,width:"840",height:"638"})),(0,i.kt)("p",null,"\uc774 \ub17c\ubb38\uc758 \ud575\uc2ec\uc740 \ubc14\ub85c \uba38\uc2e0\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \uc81c\ud488\uc744 \ub9cc\ub4dc\ub294\ub370 \uc788\uc5b4\uc11c \uba38\uc2e0\ub7ec\ub2dd \ucf54\ub4dc\ub294 \uc804\uccb4 \uc2dc\uc2a4\ud15c\uc744 \uad6c\uc131\ud558\ub294\ub370 \uc788\uc5b4\uc11c \uc544\uc8fc \uc77c\ubd80\uc77c \ubfd0\uc774\ub77c\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"paper-2",src:n(3110).Z,width:"1186",height:"422"})),(0,i.kt)("p",null,"\uad6c\uae00\uc740 \uc774 \ub17c\ubb38\uc744 \ub354 \ubc1c\uc804\uc2dc\ucf1c\uc11c MLOps\ub77c\ub294 \uc6a9\uc5b4\ub97c \ub9cc\ub4e4\uc5b4 \ud655\uc7a5\uc2dc\ucf30\uc2b5\ub2c8\ub2e4. \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,i.kt)("a",{parentName:"p",href:"https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning"},"\uad6c\uae00 \ud074\ub77c\uc6b0\ub4dc \ud648\ud398\uc774\uc9c0"),"\uc5d0\uc11c \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 \uad6c\uae00\uc5d0\uc11c \ub9d0\ud558\ub294 MLOps\ub780 \uc5b4\ub5a4 \uac83\uc778\uc9c0\uc5d0 \ub300\ud574\uc11c \uc124\uba85\ud574\ubcf4\uace0\uc790 \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uad6c\uae00\uc5d0\uc11c\ub294 MLOps\uc758 \ubc1c\uc804 \ub2e8\uacc4\ub97c \ucd1d 3(0~2)\ub2e8\uacc4\ub85c \ub098\ub204\uc5c8\uc2b5\ub2c8\ub2e4. \uac01 \ub2e8\uacc4\ub4e4\uc5d0 \ub300\ud574 \uc124\uba85\ud558\uae30 \uc55e\uc11c \uc774\uc804 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c \uc124\uba85\ud588\ub358 \uac1c\ub150 \uc911 \ud544\uc694\ud55c \ubd80\ubd84\uc744 \ub2e4\uc2dc \ud55c\ubc88 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc6b4\uc601\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uacfc \ubc30\ud3ec \ubc0f \uc6b4\uc601\uc744 \ub2f4\ub2f9\ud558\ub294 \uc6b4\uc601\ud300\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \ud300\uc758 \uc6d0\ud560\ud55c \ud611\uc5c5\uc744 \uc704\ud574\uc11c MLOps\uac00 \ud544\uc694\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub294 \uac04\ub2e8\ud788 Continuous Integration(CI)/Continuous Deployment(CD)\ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\ub2e4\uace0 \ud558\uc600\ub294\ub370, \uc5b4\ub5bb\uac8c CI/CD\ub97c \ud558\ub294\uc9c0\uc5d0 \ub300\ud574\uc11c \uc54c\uc544 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"0\ub2e8\uacc4-\uc218\ub3d9-\ud504\ub85c\uc138\uc2a4"},"0\ub2e8\uacc4: \uc218\ub3d9 \ud504\ub85c\uc138\uc2a4"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-0",src:n(5833).Z,width:"1332",height:"494"})),(0,i.kt)("p",null,"0\ub2e8\uacc4\uc5d0\uc11c \ub450 \ud300\uc740 \u201c\ubaa8\ub378\u201d\uc744 \ud1b5\ud574 \uc18c\ud1b5\ud569\ub2c8\ub2e4. \uba38\uc2e0 \ub7ec\ub2dd\ud300\uc740 \uc313\uc5ec\uc788\ub294 \ub370\uc774\ud130\ub85c \ubaa8\ub378\uc744 \ud559\uc2b5\uc2dc\ud0a4\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc6b4\uc601\ud300\uc5d0\uac8c \uc804\ub2ec \ud569\ub2c8\ub2e4. \uc6b4\uc601\ud300\uc740 \uc774\ub807\uac8c \uc804\ub2ec\ubc1b\uc740 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"toon",src:n(9869).Z,width:"1282",height:"1746"})),(0,i.kt)("p",null,"\ucd08\uae30\uc758 \uba38\uc2e0 \ub7ec\ub2dd \ubaa8\ub378\ub4e4\uc740 \uc774 \u201c\ubaa8\ub378\u201d \uc911\uc2ec\uc758 \uc18c\ud1b5\uc744 \ud1b5\ud574 \ubc30\ud3ec\ud569\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uc774\ub7f0 \ubc30\ud3ec \ubc29\uc2dd\uc740 \uc5ec\ub7ec \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc5b4\ub5a4 \uae30\ub2a5\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c 3.7\uc744 \uc4f0\uace0 \uc5b4\ub5a4 \uae30\ub2a5\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c 3.8\uc744 \uc4f4\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0c1\ud669\uc744 \uc790\uc8fc \ubaa9\uaca9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c \uc0c1\ud669\uc774 \uc77c\uc5b4\ub098\ub294 \uc774\uc720\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \ud2b9\uc131\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud559\uc2b5\ub41c \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uae30 \uc704\ud574\uc11c\ub294 3\uac00\uc9c0\uac00 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"\ud30c\uc774\uc36c \ucf54\ub4dc"),(0,i.kt)("li",{parentName:"ol"},"\ud559\uc2b5\ub41c \uac00\uc911\uce58"),(0,i.kt)("li",{parentName:"ol"},"\ud658\uacbd (\ud328\ud0a4\uc9c0, \ubc84\uc804 \ub4f1)")),(0,i.kt)("p",null,"\ub9cc\uc57d \uc774 3\uac00\uc9c0 \uc911 \ud55c \uac00\uc9c0\ub77c\ub3c4 \uc804\ub2ec\uc774 \uc798\ubabb \ub41c\ub2e4\uba74 \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\uac70\ub098 \uc608\uc0c1\ud558\uc9c0 \ubabb\ud55c \uc608\uce21\uc744 \ud560\uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9ce\uc740 \uacbd\uc6b0 \ud658\uacbd\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc544\uc11c \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uc740 \ub2e4\uc591\ud55c \uc624\ud508\uc18c\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294\ub370 \uc624\ud508\uc18c\uc2a4\ub294 \ud2b9\uc131\uc0c1 \uc5b4\ub5a4 \ubc84\uc804\uc744 \uc4f0\ub294\uc9c0\uc5d0 \ub530\ub77c\uc11c \uac19\uc740 \ud568\uc218\ub77c\ub3c4 \uacb0\uacfc\uac00 \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c \ubb38\uc81c\ub294 \uc11c\ube44\uc2a4 \ucd08\uae30\uc5d0\ub294 \uad00\ub9ac\ud560 \ubaa8\ub378\uc774 \ub9ce\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uae08\ubc29 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\ub4e4\uc774 \ub9ce\uc544\uc9c0\uace0 \uc11c\ub85c \uc18c\ud1b5\uc5d0 \uc5b4\ub824\uc6c0\uc744 \uacaa\uac8c \ub41c\ub2e4\uba74 \uc131\ub2a5\uc774 \ub354 \uc88b\uc740 \ubaa8\ub378\uc744 \ube60\ub974\uac8c \ubc30\ud3ec\ud560 \uc218 \uc5c6\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"1\ub2e8\uacc4-ml-\ud30c\uc774\ud504\ub77c\uc778-\uc790\ub3d9\ud654"},"1\ub2e8\uacc4: ML \ud30c\uc774\ud504\ub77c\uc778 \uc790\ub3d9\ud654"),(0,i.kt)("h3",{id:"pipeline"},"Pipeline"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-1-pipeline",src:n(287).Z,width:"1356",height:"942"})),(0,i.kt)("p",null,"\uadf8\ub798\uc11c MLOps\uc5d0\uc11c\ub294 \u201c\ud30c\uc774\ud504\ub77c\uc778(Pipeline)\u201d\uc744 \uc774\uc6a9\ud574 \uc774\ub7ec\ud55c \ubb38\uc81c\ub97c \ubc29\uc9c0\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4. MLOps\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub3c4\ucee4\uc640 \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc774\uc6a9\ud574 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ubaa8\ub378 \uac1c\ubc1c\uc5d0 \uc0ac\uc6a9\ud55c \uac83\uacfc \ub3d9\uc77c\ud55c \ud658\uacbd\uc73c\ub85c \ub3d9\uc791\ub418\ub294 \uac83\uc744 \ubcf4\uc7a5\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574\uc11c \ud658\uacbd\uc774 \ub2ec\ub77c\uc11c \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub7f0\ub370 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubc94\uc6a9\uc801\uc778 \uc6a9\uc5b4\ub85c \uc5ec\ub7ec \ub2e4\uc591\ud55c \ud0dc\uc2a4\ud06c\uc5d0\uc11c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc791\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc5ed\ud560\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc791\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0dd\uc0b0\ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \ud30c\uc774\ud504\ub77c\uc778 \ub300\uc2e0 \ud559\uc2b5 \ud30c\uc774\ud504\ub77c\uc778(Training Pipeline)\uc774 \ub354 \uc815\ud655\ud558\ub2e4\uace0 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"continuous-training"},"Continuous Training"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-1-ct.png",src:n(1242).Z,width:"1356",height:"942"})),(0,i.kt)("p",null,"\uadf8\ub9ac\uace0 Continuous Training(CT) \uac1c\ub150\uc774 \ucd94\uac00\ub429\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 CT\ub294 \uc65c \ud544\uc694\ud560\uae4c\uc694?"),(0,i.kt)("h4",{id:"auto-retrain"},"Auto Retrain"),(0,i.kt)("p",null,"Real World\uc5d0\uc11c \ub370\uc774\ud130\ub294 Data Shift\ub77c\ub294 \ub370\uc774\ud130\uc758 \ubd84\ud3ec\uac00 \uacc4\uc18d\ud574\uc11c \ubcc0\ud558\ub294 \ud2b9\uc9d5\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uacfc\uac70\uc5d0 \ud559\uc2b5\ud55c \ubaa8\ub378\uc774 \uc2dc\uac04\uc774 \uc9c0\ub0a8\uc5d0 \ub530\ub77c \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \uc800\ud558\ub418\ub294 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294 \uac00\uc7a5 \uac04\ub2e8\ud558\uace0 \ud6a8\uacfc\uc801\uc778 \ud574\uacb0\ucc45\uc740 \ubc14\ub85c \ucd5c\uadfc \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ubcc0\ud654\ub41c \ub370\uc774\ud130 \ubd84\ud3ec\uc5d0 \ub9de\ucdb0\uc11c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5\ud558\uba74 \ub2e4\uc2dc \uc900\uc218\ud55c \uc131\ub2a5\uc744 \ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"auto-deploy"},"Auto Deploy"),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \uc81c\uc870\uc5c5\uacfc \uac19\uc774 \ud55c \uacf5\uc7a5\uc5d0\uc11c \uc5ec\ub7ec \ub808\uc2dc\ud53c\ub97c \ucc98\ub9ac\ud558\ub294 \uacbd\uc6b0 \ubb34\uc870\uac74 \uc7ac\ud559\uc2b5\uc744 \ud558\ub294 \uac83\uc774 \uc88b\uc9c0 \uc54a\uc744 \uc218 \ub3c4 \uc788\uc2b5\ub2c8\ub2e4. Blind Spot\uc774 \ub300\ud45c\uc801\uc778 \uc608\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \uc790\ub3d9\ucc28 \uc0dd\uc0b0 \ub77c\uc778\uc5d0\uc11c \ubaa8\ub378 A\uc5d0 \ub300\ud574\uc11c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uace0 \uc774\ub97c \uc774\uc6a9\ud574 \uc608\uce21\uc744 \uc9c4\ud589\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \uc804\ud600 \ub2e4\ub978 \ubaa8\ub378 B\uac00 \ub4e4\uc5b4\uc624\uba74 \uc774\uc804\uc5d0 \ubcf4\uc9c0 \ubabb\ud55c \ub370\uc774\ud130 \ud328\ud134\uc774\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub378 B\uc5d0 \ub300\ud574\uc11c \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ud559\uc2b5\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\uc81c \ubaa8\ub378 B\uc5d0 \ub300\ud574\uc11c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uc5c8\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub378\uc740 \uc608\uce21\uc744 \uc9c4\ud589\ud560 \uac83 \uc785\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9cc\uc57d \ub370\uc774\ud130\uac00 \ub2e4\uc2dc \ubaa8\ub378 A\ub85c \ubc14\ub010\ub2e4\uba74 \uc5b4\ub5bb\uac8c \ud560\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d Retraining \uaddc\uce59\ub9cc \uc788\ub2e4\uba74 \ub2e4\uc2dc \ubaa8\ub378 A\uc5d0 \ub300\ud574\uc11c \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\uac8c \ub429\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc774 \ucda9\ubd84\ud55c \uc131\ub2a5\uc744 \ubcf4\uc774\uae30 \uc704\ud574\uc11c\ub294 \ucda9\ubd84\ud55c \uc591\uc758 \ub370\uc774\ud130\uac00 \ubaa8\uc5ec\uc57c \ud569\ub2c8\ub2e4. Blind Spot\uc774\ub780 \uc774\ub807\uac8c \ub370\uc774\ud130\ub97c \ubaa8\uc73c\uae30 \uc704\ud574\uc11c \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uad6c\uac04\uc744 \ub9d0\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c Blind Spot\uc744 \ud574\uacb0\ud558\ub294 \ubc29\ubc95\uc740 \uac04\ub2e8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc14\ub85c \ubaa8\ub378 A\uc5d0 \ub300\ud55c \ubaa8\ub378\uc774 \uacfc\uac70\uc5d0 \uc788\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uace0 \ub9cc\uc57d \uc788\uc5c8\ub2e4\uba74 \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ubc14\ub85c \ud559\uc2b5\ud558\uae30 \ubcf4\ub2e4\ub294 \uc774 \uc804 \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \ub2e4\uc2dc \uc608\uce21\uc744 \ud558\uba74 \uc774\ub7f0 Blind Spot\uc744 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ubaa8\ub378\uc640 \uac19\uc740 \uba54\ud0c0 \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \ubaa8\ub378\uc744 \uc790\ub3d9\uc73c\ub85c \ubcc0\ud658\ud574\uc8fc\ub294 \uac83\uc744 Auto Deploy\ub77c\uace0 \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc815\ub9ac\ud558\uc790\uba74 CT\ub97c \uc704\ud574\uc11c\ub294 Auto Retraining\uc758\uacfc Auto Deploy \ub450 \uac00\uc9c0 \uae30\ub2a5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub458\uc740 \uc11c\ub85c\uc758 \ub2e8\uc810\uc744 \ubcf4\uc644\ud574 \uacc4\uc18d\ud574\uc11c \ubaa8\ub378\uc758 \uc131\ub2a5\uc744 \uc720\uc9c0\ud560 \uc218 \uc788\uac8c \ud569\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"2\ub2e8\uacc4-cicd-\ud30c\uc774\ud504\ub77c\uc778\uc758-\uc790\ub3d9\ud654"},"2\ub2e8\uacc4: CI/CD \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc790\ub3d9\ud654"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-2",src:n(2586).Z,width:"1356",height:"862"})),(0,i.kt)("p",null,"2\ub2e8\uacc4\uc758 \uc81c\ubaa9\uc740 CI\uc640 CD\uc758 \uc790\ub3d9\ud654 \uc785\ub2c8\ub2e4. DevOps\uc5d0\uc11c\uc758 CI/CD\uc758 \ub300\uc0c1\uc740 \uc18c\uc2a4 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 MLOps\ub294 \uc5b4\ub5a4 \uac83\uc774 CI/CD\uc758 \ub300\uc0c1\uc77c\uae4c\uc694?"),(0,i.kt)("p",null,"MLOps\uc758 CI/CD \ub300\uc0c1 \ub610\ud55c \uc18c\uc2a4 \ucf54\ub4dc\uc778 \uac83\uc740 \ub9de\uc9c0\ub9cc \uc870\uae08 \ub354 \uc5c4\ubc00\ud788 \uc815\uc758\ud558\uc790\uba74 \ud559\uc2b5 \ud30c\uc774\ud504\ub77c\uc778\uc774\ub77c\uace0 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub798\uc11c \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294\ub370 \uc788\uc5b4\uc11c \uc601\ud5a5\uc774 \uc788\ub294 \ubcc0\ud654\uc5d0 \ub300\ud574\uc11c \uc2e4\uc81c\ub85c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ud559\uc2b5\uc774 \ub418\ub294\uc9c0 (CI), \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\ub294\uc9c0 (CD)\ub97c \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \ud559\uc2b5\uc744 \ud558\ub294 \ucf54\ub4dc\uc5d0 \uc9c1\uc811\uc801\uc778 \uc218\uc815\uc774 \uc788\ub294 \uacbd\uc6b0\uc5d0\ub294 CI/CD\ub97c \uc9c4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ucf54\ub4dc \uc678\uc5d0\ub3c4 \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\uc758 \ubc84\uc804, \ud30c\uc774\uc36c\uc758 \ubc84\uc804 \ubcc0\uacbd\ub3c4 CI/CD\uc758 \ub300\uc0c1\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uacbd\uc6b0 \uba38\uc2e0 \ub7ec\ub2dd\uc740 \uc624\ud508 \uc18c\uc2a4\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc624\ud508 \uc18c\uc2a4\ub294 \uadf8 \ud2b9\uc131\uc0c1 \ubc84\uc804\uc774 \ubc14\ub00c\uc5c8\uc744 \ub54c \ud568\uc218\uc758 \ub0b4\ubd80 \ub85c\uc9c1\uc774 \ubcc0\ud558\ub294 \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ubb3c\ub860 \uc5b4\ub290 \uc815\ub3c4 \ubc84\uc804\uc774 \uc62c\ub77c \uac08 \ub54c \uc774\uc640 \uad00\ub828\ub41c \uc54c\ub9bc\uc744 \uc8fc\uc9c0\ub9cc \ud55c \ubc88\uc5d0 \ubc84\uc804\uc774 \ud06c\uac8c \ubc14\ub010\ub2e4\uba74 \uc774\ub7ec\ud55c \ubcc0\ud654\ub97c \ubaa8\ub97c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\uc758 \ubc84\uc804\uc774 \ubcc0\ud558\ub294 \uacbd\uc6b0\uc5d0\ub3c4 CI/CD\ub97c \ud1b5\ud574 \uc815\uc0c1\uc801\uc73c\ub85c \ubaa8\ub378\uc774 \ud559\uc2b5, \ub3d9\uc791\ud558\ub294\uc9c0 \ud655\uc778\uc744 \ud574\uc57c \ud569\ub2c8\ub2e4."))}d.isMDXComponent=!0},5833:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-0-85b288b20c458e64055199fc50b1fe86.png"},1242:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-1-ct-a1ac90943bd5dd8e9af840cbcf51e985.png"},287:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-1-pipeline-b2979b34d4804546ef4005cdf0f6311a.png"},2586:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-2-a4bb6a840eb99f33f3027217a5a04d8e.png"},3110:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/paper-2-b10bd2ae7445c3098c9f133131859466.png"},7097:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/paper-67df32c03d5288f214c8cd189f85b2ea.png"},9869:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/toon-8ff2a8fb63a502a2b419a4cd459a7e41.png"}}]); \ No newline at end of file diff --git a/assets/js/2a07449d.f46def27.js b/assets/js/2a07449d.f46def27.js new file mode 100644 index 00000000..9bd061b5 --- /dev/null +++ b/assets/js/2a07449d.f46def27.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[200],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var l=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=l.createContext({}),s=function(e){var t=l.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return l.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},m=l.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,p=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),u=s(n),m=i,f=u["".concat(p,".").concat(m)]||u[m]||d[m]||r;return n?l.createElement(f,o(o({ref:t},c),{},{components:n})):l.createElement(f,o({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=m;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[u]="string"==typeof e?e:i,o[1]=a;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>s});var l=n(7462),i=(n(7294),n(3905));const r={title:"2. Levels of MLOps",description:"Levels of MLOps",sidebar_position:2,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2022-03-05T00:00:00.000Z"),contributors:["Jongseob Jeon"]},o=void 0,a={unversionedId:"introduction/levels",id:"introduction/levels",title:"2. Levels of MLOps",description:"Levels of MLOps",source:"@site/docs/introduction/levels.md",sourceDirName:"introduction",slug:"/introduction/levels",permalink:"/docs/introduction/levels",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/introduction/levels.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Levels of MLOps",description:"Levels of MLOps",sidebar_position:2,date:"2021-12-03T00:00:00.000Z",lastmod:"2022-03-05T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"1. What is MLOps?",permalink:"/docs/introduction/intro"},next:{title:"3. Components of MLOps",permalink:"/docs/introduction/component"}},p={},s=[{value:"Hidden Technical Debt in ML System",id:"hidden-technical-debt-in-ml-system",level:2},{value:"0\ub2e8\uacc4: \uc218\ub3d9 \ud504\ub85c\uc138\uc2a4",id:"0\ub2e8\uacc4-\uc218\ub3d9-\ud504\ub85c\uc138\uc2a4",level:2},{value:"1\ub2e8\uacc4: ML \ud30c\uc774\ud504\ub77c\uc778 \uc790\ub3d9\ud654",id:"1\ub2e8\uacc4-ml-\ud30c\uc774\ud504\ub77c\uc778-\uc790\ub3d9\ud654",level:2},{value:"Pipeline",id:"pipeline",level:3},{value:"Continuous Training",id:"continuous-training",level:3},{value:"Auto Retrain",id:"auto-retrain",level:4},{value:"Auto Deploy",id:"auto-deploy",level:4},{value:"2\ub2e8\uacc4: CI/CD \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc790\ub3d9\ud654",id:"2\ub2e8\uacc4-cicd-\ud30c\uc774\ud504\ub77c\uc778\uc758-\uc790\ub3d9\ud654",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(u,(0,l.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uad6c\uae00\uc5d0\uc11c \ubc1c\ud45c\ud55c MLOps\uc758 \ub2e8\uacc4\ub97c \ubcf4\uba70 MLOps\uc758 \ud575\uc2ec \uae30\ub2a5\uc740 \ubb34\uc5c7\uc778\uc9c0 \uc54c\uc544 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"hidden-technical-debt-in-ml-system"},"Hidden Technical Debt in ML System"),(0,i.kt)("p",null,"\uad6c\uae00\uc740 \ubb34\ub824 2015\ub144\ubd80\ud130 MLOps\uc758 \ud544\uc694\uc131\uc744 \ub9d0\ud588\uc2b5\ub2c8\ub2e4. Hidden Technical Debt in Machine Learning Systems \uc740 \uadf8\ub7f0 \uad6c\uae00\uc758 \uc0dd\uac01\uc744 \ub2f4\uc740 \ub17c\ubb38\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"paper",src:n(7097).Z,width:"840",height:"638"})),(0,i.kt)("p",null,"\uc774 \ub17c\ubb38\uc758 \ud575\uc2ec\uc740 \ubc14\ub85c \uba38\uc2e0\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \uc81c\ud488\uc744 \ub9cc\ub4dc\ub294\ub370 \uc788\uc5b4\uc11c \uba38\uc2e0\ub7ec\ub2dd \ucf54\ub4dc\ub294 \uc804\uccb4 \uc2dc\uc2a4\ud15c\uc744 \uad6c\uc131\ud558\ub294\ub370 \uc788\uc5b4\uc11c \uc544\uc8fc \uc77c\ubd80\uc77c \ubfd0\uc774\ub77c\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"paper-2",src:n(3110).Z,width:"1186",height:"422"})),(0,i.kt)("p",null,"\uad6c\uae00\uc740 \uc774 \ub17c\ubb38\uc744 \ub354 \ubc1c\uc804\uc2dc\ucf1c\uc11c MLOps\ub77c\ub294 \uc6a9\uc5b4\ub97c \ub9cc\ub4e4\uc5b4 \ud655\uc7a5\uc2dc\ucf30\uc2b5\ub2c8\ub2e4. \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,i.kt)("a",{parentName:"p",href:"https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning"},"\uad6c\uae00 \ud074\ub77c\uc6b0\ub4dc \ud648\ud398\uc774\uc9c0"),"\uc5d0\uc11c \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 \uad6c\uae00\uc5d0\uc11c \ub9d0\ud558\ub294 MLOps\ub780 \uc5b4\ub5a4 \uac83\uc778\uc9c0\uc5d0 \ub300\ud574\uc11c \uc124\uba85\ud574\ubcf4\uace0\uc790 \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uad6c\uae00\uc5d0\uc11c\ub294 MLOps\uc758 \ubc1c\uc804 \ub2e8\uacc4\ub97c \ucd1d 3(0~2)\ub2e8\uacc4\ub85c \ub098\ub204\uc5c8\uc2b5\ub2c8\ub2e4. \uac01 \ub2e8\uacc4\ub4e4\uc5d0 \ub300\ud574 \uc124\uba85\ud558\uae30 \uc55e\uc11c \uc774\uc804 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c \uc124\uba85\ud588\ub358 \uac1c\ub150 \uc911 \ud544\uc694\ud55c \ubd80\ubd84\uc744 \ub2e4\uc2dc \ud55c\ubc88 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc6b4\uc601\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uacfc \ubc30\ud3ec \ubc0f \uc6b4\uc601\uc744 \ub2f4\ub2f9\ud558\ub294 \uc6b4\uc601\ud300\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \ud300\uc758 \uc6d0\ud560\ud55c \ud611\uc5c5\uc744 \uc704\ud574\uc11c MLOps\uac00 \ud544\uc694\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub294 \uac04\ub2e8\ud788 Continuous Integration(CI)/Continuous Deployment(CD)\ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\ub2e4\uace0 \ud558\uc600\ub294\ub370, \uc5b4\ub5bb\uac8c CI/CD\ub97c \ud558\ub294\uc9c0\uc5d0 \ub300\ud574\uc11c \uc54c\uc544 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"0\ub2e8\uacc4-\uc218\ub3d9-\ud504\ub85c\uc138\uc2a4"},"0\ub2e8\uacc4: \uc218\ub3d9 \ud504\ub85c\uc138\uc2a4"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-0",src:n(5833).Z,width:"1332",height:"494"})),(0,i.kt)("p",null,"0\ub2e8\uacc4\uc5d0\uc11c \ub450 \ud300\uc740 \u201c\ubaa8\ub378\u201d\uc744 \ud1b5\ud574 \uc18c\ud1b5\ud569\ub2c8\ub2e4. \uba38\uc2e0 \ub7ec\ub2dd\ud300\uc740 \uc313\uc5ec\uc788\ub294 \ub370\uc774\ud130\ub85c \ubaa8\ub378\uc744 \ud559\uc2b5\uc2dc\ud0a4\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc6b4\uc601\ud300\uc5d0\uac8c \uc804\ub2ec \ud569\ub2c8\ub2e4. \uc6b4\uc601\ud300\uc740 \uc774\ub807\uac8c \uc804\ub2ec\ubc1b\uc740 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"toon",src:n(9869).Z,width:"1282",height:"1746"})),(0,i.kt)("p",null,"\ucd08\uae30\uc758 \uba38\uc2e0 \ub7ec\ub2dd \ubaa8\ub378\ub4e4\uc740 \uc774 \u201c\ubaa8\ub378\u201d \uc911\uc2ec\uc758 \uc18c\ud1b5\uc744 \ud1b5\ud574 \ubc30\ud3ec\ud569\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uc774\ub7f0 \ubc30\ud3ec \ubc29\uc2dd\uc740 \uc5ec\ub7ec \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc5b4\ub5a4 \uae30\ub2a5\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c 3.7\uc744 \uc4f0\uace0 \uc5b4\ub5a4 \uae30\ub2a5\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c 3.8\uc744 \uc4f4\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0c1\ud669\uc744 \uc790\uc8fc \ubaa9\uaca9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c \uc0c1\ud669\uc774 \uc77c\uc5b4\ub098\ub294 \uc774\uc720\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \ud2b9\uc131\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud559\uc2b5\ub41c \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uae30 \uc704\ud574\uc11c\ub294 3\uac00\uc9c0\uac00 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"\ud30c\uc774\uc36c \ucf54\ub4dc"),(0,i.kt)("li",{parentName:"ol"},"\ud559\uc2b5\ub41c \uac00\uc911\uce58"),(0,i.kt)("li",{parentName:"ol"},"\ud658\uacbd (\ud328\ud0a4\uc9c0, \ubc84\uc804 \ub4f1)")),(0,i.kt)("p",null,"\ub9cc\uc57d \uc774 3\uac00\uc9c0 \uc911 \ud55c \uac00\uc9c0\ub77c\ub3c4 \uc804\ub2ec\uc774 \uc798\ubabb \ub41c\ub2e4\uba74 \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\uac70\ub098 \uc608\uc0c1\ud558\uc9c0 \ubabb\ud55c \uc608\uce21\uc744 \ud560\uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9ce\uc740 \uacbd\uc6b0 \ud658\uacbd\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc544\uc11c \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uc740 \ub2e4\uc591\ud55c \uc624\ud508\uc18c\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294\ub370 \uc624\ud508\uc18c\uc2a4\ub294 \ud2b9\uc131\uc0c1 \uc5b4\ub5a4 \ubc84\uc804\uc744 \uc4f0\ub294\uc9c0\uc5d0 \ub530\ub77c\uc11c \uac19\uc740 \ud568\uc218\ub77c\ub3c4 \uacb0\uacfc\uac00 \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c \ubb38\uc81c\ub294 \uc11c\ube44\uc2a4 \ucd08\uae30\uc5d0\ub294 \uad00\ub9ac\ud560 \ubaa8\ub378\uc774 \ub9ce\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uae08\ubc29 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\ub4e4\uc774 \ub9ce\uc544\uc9c0\uace0 \uc11c\ub85c \uc18c\ud1b5\uc5d0 \uc5b4\ub824\uc6c0\uc744 \uacaa\uac8c \ub41c\ub2e4\uba74 \uc131\ub2a5\uc774 \ub354 \uc88b\uc740 \ubaa8\ub378\uc744 \ube60\ub974\uac8c \ubc30\ud3ec\ud560 \uc218 \uc5c6\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"1\ub2e8\uacc4-ml-\ud30c\uc774\ud504\ub77c\uc778-\uc790\ub3d9\ud654"},"1\ub2e8\uacc4: ML \ud30c\uc774\ud504\ub77c\uc778 \uc790\ub3d9\ud654"),(0,i.kt)("h3",{id:"pipeline"},"Pipeline"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-1-pipeline",src:n(287).Z,width:"1356",height:"942"})),(0,i.kt)("p",null,"\uadf8\ub798\uc11c MLOps\uc5d0\uc11c\ub294 \u201c\ud30c\uc774\ud504\ub77c\uc778(Pipeline)\u201d\uc744 \uc774\uc6a9\ud574 \uc774\ub7ec\ud55c \ubb38\uc81c\ub97c \ubc29\uc9c0\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4. MLOps\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub3c4\ucee4\uc640 \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc774\uc6a9\ud574 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ubaa8\ub378 \uac1c\ubc1c\uc5d0 \uc0ac\uc6a9\ud55c \uac83\uacfc \ub3d9\uc77c\ud55c \ud658\uacbd\uc73c\ub85c \ub3d9\uc791\ub418\ub294 \uac83\uc744 \ubcf4\uc7a5\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574\uc11c \ud658\uacbd\uc774 \ub2ec\ub77c\uc11c \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub7f0\ub370 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubc94\uc6a9\uc801\uc778 \uc6a9\uc5b4\ub85c \uc5ec\ub7ec \ub2e4\uc591\ud55c \ud0dc\uc2a4\ud06c\uc5d0\uc11c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc791\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc5ed\ud560\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc791\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0dd\uc0b0\ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \ud30c\uc774\ud504\ub77c\uc778 \ub300\uc2e0 \ud559\uc2b5 \ud30c\uc774\ud504\ub77c\uc778(Training Pipeline)\uc774 \ub354 \uc815\ud655\ud558\ub2e4\uace0 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"continuous-training"},"Continuous Training"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-1-ct.png",src:n(1242).Z,width:"1356",height:"942"})),(0,i.kt)("p",null,"\uadf8\ub9ac\uace0 Continuous Training(CT) \uac1c\ub150\uc774 \ucd94\uac00\ub429\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 CT\ub294 \uc65c \ud544\uc694\ud560\uae4c\uc694?"),(0,i.kt)("h4",{id:"auto-retrain"},"Auto Retrain"),(0,i.kt)("p",null,"Real World\uc5d0\uc11c \ub370\uc774\ud130\ub294 Data Shift\ub77c\ub294 \ub370\uc774\ud130\uc758 \ubd84\ud3ec\uac00 \uacc4\uc18d\ud574\uc11c \ubcc0\ud558\ub294 \ud2b9\uc9d5\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uacfc\uac70\uc5d0 \ud559\uc2b5\ud55c \ubaa8\ub378\uc774 \uc2dc\uac04\uc774 \uc9c0\ub0a8\uc5d0 \ub530\ub77c \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \uc800\ud558\ub418\ub294 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294 \uac00\uc7a5 \uac04\ub2e8\ud558\uace0 \ud6a8\uacfc\uc801\uc778 \ud574\uacb0\ucc45\uc740 \ubc14\ub85c \ucd5c\uadfc \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ubcc0\ud654\ub41c \ub370\uc774\ud130 \ubd84\ud3ec\uc5d0 \ub9de\ucdb0\uc11c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5\ud558\uba74 \ub2e4\uc2dc \uc900\uc218\ud55c \uc131\ub2a5\uc744 \ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"auto-deploy"},"Auto Deploy"),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \uc81c\uc870\uc5c5\uacfc \uac19\uc774 \ud55c \uacf5\uc7a5\uc5d0\uc11c \uc5ec\ub7ec \ub808\uc2dc\ud53c\ub97c \ucc98\ub9ac\ud558\ub294 \uacbd\uc6b0 \ubb34\uc870\uac74 \uc7ac\ud559\uc2b5\uc744 \ud558\ub294 \uac83\uc774 \uc88b\uc9c0 \uc54a\uc744 \uc218 \ub3c4 \uc788\uc2b5\ub2c8\ub2e4. Blind Spot\uc774 \ub300\ud45c\uc801\uc778 \uc608\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \uc790\ub3d9\ucc28 \uc0dd\uc0b0 \ub77c\uc778\uc5d0\uc11c \ubaa8\ub378 A\uc5d0 \ub300\ud574\uc11c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uace0 \uc774\ub97c \uc774\uc6a9\ud574 \uc608\uce21\uc744 \uc9c4\ud589\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \uc804\ud600 \ub2e4\ub978 \ubaa8\ub378 B\uac00 \ub4e4\uc5b4\uc624\uba74 \uc774\uc804\uc5d0 \ubcf4\uc9c0 \ubabb\ud55c \ub370\uc774\ud130 \ud328\ud134\uc774\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub378 B\uc5d0 \ub300\ud574\uc11c \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ud559\uc2b5\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\uc81c \ubaa8\ub378 B\uc5d0 \ub300\ud574\uc11c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uc5c8\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub378\uc740 \uc608\uce21\uc744 \uc9c4\ud589\ud560 \uac83 \uc785\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9cc\uc57d \ub370\uc774\ud130\uac00 \ub2e4\uc2dc \ubaa8\ub378 A\ub85c \ubc14\ub010\ub2e4\uba74 \uc5b4\ub5bb\uac8c \ud560\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d Retraining \uaddc\uce59\ub9cc \uc788\ub2e4\uba74 \ub2e4\uc2dc \ubaa8\ub378 A\uc5d0 \ub300\ud574\uc11c \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\uac8c \ub429\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc774 \ucda9\ubd84\ud55c \uc131\ub2a5\uc744 \ubcf4\uc774\uae30 \uc704\ud574\uc11c\ub294 \ucda9\ubd84\ud55c \uc591\uc758 \ub370\uc774\ud130\uac00 \ubaa8\uc5ec\uc57c \ud569\ub2c8\ub2e4. Blind Spot\uc774\ub780 \uc774\ub807\uac8c \ub370\uc774\ud130\ub97c \ubaa8\uc73c\uae30 \uc704\ud574\uc11c \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uad6c\uac04\uc744 \ub9d0\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c Blind Spot\uc744 \ud574\uacb0\ud558\ub294 \ubc29\ubc95\uc740 \uac04\ub2e8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc14\ub85c \ubaa8\ub378 A\uc5d0 \ub300\ud55c \ubaa8\ub378\uc774 \uacfc\uac70\uc5d0 \uc788\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uace0 \ub9cc\uc57d \uc788\uc5c8\ub2e4\uba74 \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ubc14\ub85c \ud559\uc2b5\ud558\uae30 \ubcf4\ub2e4\ub294 \uc774 \uc804 \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \ub2e4\uc2dc \uc608\uce21\uc744 \ud558\uba74 \uc774\ub7f0 Blind Spot\uc744 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ubaa8\ub378\uc640 \uac19\uc740 \uba54\ud0c0 \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \ubaa8\ub378\uc744 \uc790\ub3d9\uc73c\ub85c \ubcc0\ud658\ud574\uc8fc\ub294 \uac83\uc744 Auto Deploy\ub77c\uace0 \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc815\ub9ac\ud558\uc790\uba74 CT\ub97c \uc704\ud574\uc11c\ub294 Auto Retraining\uacfc Auto Deploy \ub450 \uac00\uc9c0 \uae30\ub2a5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub458\uc740 \uc11c\ub85c\uc758 \ub2e8\uc810\uc744 \ubcf4\uc644\ud574 \uacc4\uc18d\ud574\uc11c \ubaa8\ub378\uc758 \uc131\ub2a5\uc744 \uc720\uc9c0\ud560 \uc218 \uc788\uac8c \ud569\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"2\ub2e8\uacc4-cicd-\ud30c\uc774\ud504\ub77c\uc778\uc758-\uc790\ub3d9\ud654"},"2\ub2e8\uacc4: CI/CD \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc790\ub3d9\ud654"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-2",src:n(2586).Z,width:"1356",height:"862"})),(0,i.kt)("p",null,"2\ub2e8\uacc4\uc758 \uc81c\ubaa9\uc740 CI\uc640 CD\uc758 \uc790\ub3d9\ud654 \uc785\ub2c8\ub2e4. DevOps\uc5d0\uc11c\uc758 CI/CD\uc758 \ub300\uc0c1\uc740 \uc18c\uc2a4 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 MLOps\ub294 \uc5b4\ub5a4 \uac83\uc774 CI/CD\uc758 \ub300\uc0c1\uc77c\uae4c\uc694?"),(0,i.kt)("p",null,"MLOps\uc758 CI/CD \ub300\uc0c1 \ub610\ud55c \uc18c\uc2a4 \ucf54\ub4dc\uc778 \uac83\uc740 \ub9de\uc9c0\ub9cc \uc870\uae08 \ub354 \uc5c4\ubc00\ud788 \uc815\uc758\ud558\uc790\uba74 \ud559\uc2b5 \ud30c\uc774\ud504\ub77c\uc778\uc774\ub77c\uace0 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub798\uc11c \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294\ub370 \uc788\uc5b4\uc11c \uc601\ud5a5\uc774 \uc788\ub294 \ubcc0\ud654\uc5d0 \ub300\ud574\uc11c \uc2e4\uc81c\ub85c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ud559\uc2b5\uc774 \ub418\ub294\uc9c0 (CI), \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\ub294\uc9c0 (CD)\ub97c \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \ud559\uc2b5\uc744 \ud558\ub294 \ucf54\ub4dc\uc5d0 \uc9c1\uc811\uc801\uc778 \uc218\uc815\uc774 \uc788\ub294 \uacbd\uc6b0\uc5d0\ub294 CI/CD\ub97c \uc9c4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ucf54\ub4dc \uc678\uc5d0\ub3c4 \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\uc758 \ubc84\uc804, \ud30c\uc774\uc36c\uc758 \ubc84\uc804 \ubcc0\uacbd\ub3c4 CI/CD\uc758 \ub300\uc0c1\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uacbd\uc6b0 \uba38\uc2e0 \ub7ec\ub2dd\uc740 \uc624\ud508 \uc18c\uc2a4\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc624\ud508 \uc18c\uc2a4\ub294 \uadf8 \ud2b9\uc131\uc0c1 \ubc84\uc804\uc774 \ubc14\ub00c\uc5c8\uc744 \ub54c \ud568\uc218\uc758 \ub0b4\ubd80 \ub85c\uc9c1\uc774 \ubcc0\ud558\ub294 \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ubb3c\ub860 \uc5b4\ub290 \uc815\ub3c4 \ubc84\uc804\uc774 \uc62c\ub77c \uac08 \ub54c \uc774\uc640 \uad00\ub828\ub41c \uc54c\ub9bc\uc744 \uc8fc\uc9c0\ub9cc \ud55c \ubc88\uc5d0 \ubc84\uc804\uc774 \ud06c\uac8c \ubc14\ub010\ub2e4\uba74 \uc774\ub7ec\ud55c \ubcc0\ud654\ub97c \ubaa8\ub97c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\uc758 \ubc84\uc804\uc774 \ubcc0\ud558\ub294 \uacbd\uc6b0\uc5d0\ub3c4 CI/CD\ub97c \ud1b5\ud574 \uc815\uc0c1\uc801\uc73c\ub85c \ubaa8\ub378\uc774 \ud559\uc2b5, \ub3d9\uc791\ud558\ub294\uc9c0 \ud655\uc778\uc744 \ud574\uc57c \ud569\ub2c8\ub2e4."))}d.isMDXComponent=!0},5833:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-0-85b288b20c458e64055199fc50b1fe86.png"},1242:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-1-ct-a1ac90943bd5dd8e9af840cbcf51e985.png"},287:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-1-pipeline-b2979b34d4804546ef4005cdf0f6311a.png"},2586:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-2-a4bb6a840eb99f33f3027217a5a04d8e.png"},3110:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/paper-2-b10bd2ae7445c3098c9f133131859466.png"},7097:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/paper-67df32c03d5288f214c8cd189f85b2ea.png"},9869:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/toon-8ff2a8fb63a502a2b419a4cd459a7e41.png"}}]); \ No newline at end of file diff --git a/assets/js/2bbcffe4.84e8927c.js b/assets/js/2bbcffe4.84e8927c.js new file mode 100644 index 00000000..425ca940 --- /dev/null +++ b/assets/js/2bbcffe4.84e8927c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9558],{3905:(e,t,l)=>{l.d(t,{Zo:()=>m,kt:()=>k});var n=l(7294);function r(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function a(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,n)}return l}function o(e){for(var t=1;t=0||(r[l]=e[l]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(r[l]=e[l])}return r}var p=n.createContext({}),i=function(e){var t=n.useContext(p),l=t;return e&&(l="function"==typeof e?e(t):o(o({},t),e)),l},m=function(e){var t=i(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var l=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=i(l),f=r,k=c["".concat(p,".").concat(f)]||c[f]||u[f]||a;return l?n.createElement(k,o(o({ref:t},m),{},{components:l})):n.createElement(k,o({ref:t},m))}));function k(e,t){var l=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=l.length,o=new Array(a);o[0]=f;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,o[1]=s;for(var i=2;i{l.r(t),l.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>i});var n=l(7462),r=(l(7294),l(3905));const a={title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,s={unversionedId:"setup-components/install-components-mlflow",id:"version-1.0/setup-components/install-components-mlflow",title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",source:"@site/versioned_docs/version-1.0/setup-components/install-components-mlflow.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-mlflow",permalink:"/docs/1.0/setup-components/install-components-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-components/install-components-mlflow.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Kubeflow",permalink:"/docs/1.0/setup-components/install-components-kf"},next:{title:"3. Seldon-Core",permalink:"/docs/1.0/setup-components/install-components-seldon"}},p={},i=[{value:"Install MLflow Tracking Server",id:"install-mlflow-tracking-server",level:2},{value:"Before Install MLflow Tracking Server",id:"before-install-mlflow-tracking-server",level:2},{value:"PostgreSQL DB \uc124\uce58",id:"postgresql-db-\uc124\uce58",level:3},{value:"Minio \uc124\uc815",id:"minio-\uc124\uc815",level:3},{value:"Let's Install MLflow Tracking Server",id:"lets-install-mlflow-tracking-server",level:2},{value:"Helm Repository \ucd94\uac00",id:"helm-repository-\ucd94\uac00",level:3},{value:"Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Helm Install",id:"helm-install",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:3}],m={toc:i},c="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"install-mlflow-tracking-server"},"Install MLflow Tracking Server"),(0,r.kt)("p",null,"MLflow\ub294 \ub300\ud45c\uc801\uc778 \uc624\ud508\uc18c\uc2a4 ML \uc2e4\ud5d8 \uad00\ub9ac \ub3c4\uad6c\uc785\ub2c8\ub2e4. MLflow\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/tracking.html#tracking"},"\uc2e4\ud5d8 \uad00\ub9ac \uc6a9\ub3c4")," \uc678\uc5d0\ub3c4 ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/projects.html#projects"},"ML Model \ud328\ud0a4\uc9d5"),", ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/models.html#models"},"ML \ubaa8\ub378 \ubc30\ud3ec \uad00\ub9ac"),", ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/model-registry.html#registry"},"ML \ubaa8\ub378 \uc800\uc7a5"),"\uacfc \uac19\uc740 \uae30\ub2a5\ub3c4 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 MLflow\ub97c \uc2e4\ud5d8 \uad00\ub9ac \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c MLflow\uc5d0\uc11c \uad00\ub9ac\ud558\ub294 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 UI\ub97c \uc81c\uacf5\ud558\ub294 MLflow Tracking Server\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"before-install-mlflow-tracking-server"},"Before Install MLflow Tracking Server"),(0,r.kt)("h3",{id:"postgresql-db-\uc124\uce58"},"PostgreSQL DB \uc124\uce58"),(0,r.kt)("p",null,"MLflow Tracking Server\uac00 Backend Store\ub85c \uc0ac\uc6a9\ud560 \uc6a9\ub3c4\uc758 PostgreSQL DB\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uba3c\uc800 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow-system"),"\uc774\ub77c\ub294 namespace \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create ns mlflow-system\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/mlflow-system created\n")),(0,r.kt)("p",null,"postgresql DB\ub97c ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow-system")," namespace \uc5d0 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n mlflow-system apply -f https://raw.githubusercontent.com/mlops-for-all/helm-charts/b94b5fe4133f769c04b25068b98ccfa7a505aa60/mlflow/manifests/postgres.yaml \n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"service/postgresql-mlflow-service created\ndeployment.apps/postgresql-mlflow created\npersistentvolumeclaim/postgresql-mlflow-pvc created\n")),(0,r.kt)("p",null,"mlflow-system namespace \uc5d0 1\uac1c\uc758 postgresql \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n mlflow-system | grep postgresql\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub41c \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"postgresql-mlflow-7b9bc8c79f-srkh7 1/1 Running 0 38s\n")),(0,r.kt)("h3",{id:"minio-\uc124\uc815"},"Minio \uc124\uc815"),(0,r.kt)("p",null,"MLflow Tracking Server\uac00 Artifacts Store\ub85c \uc0ac\uc6a9\ud560 \uc6a9\ub3c4\uc758 Minio\ub294 \uc774\uc804 Kubeflow \uc124\uce58 \ub2e8\uacc4\uc5d0\uc11c \uc124\uce58\ud55c Minio\ub97c \ud65c\uc6a9\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e8, kubeflow \uc6a9\ub3c4\uc640 mlflow \uc6a9\ub3c4\ub97c \ubd84\ub9ac\ud558\uae30 \uc704\ud574, mlflow \uc804\uc6a9 \ubc84\ud0b7(bucket)\uc744 \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","minio \uc5d0 \uc811\uc18d\ud558\uc5ec \ubc84\ud0b7\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574, \uc6b0\uc120 minio-service \ub97c \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/minio-service -n kubeflow 9000:9000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:9000"},"localhost:9000"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"minio-install",src:l(5580).Z,width:"2906",height:"1946"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc811\uc18d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \ub85c\uadf8\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Username: ",(0,r.kt)("inlineCode",{parentName:"li"},"minio")),(0,r.kt)("li",{parentName:"ul"},"Password: ",(0,r.kt)("inlineCode",{parentName:"li"},"minio123"))),(0,r.kt)("p",null,"\uc6b0\uce21 \ud558\ub2e8\uc758 ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"+"))," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"Create Bucket"),"\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"create-bucket",src:l(5161).Z,width:"2902",height:"1950"})),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Bucket Name"),"\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow"),"\ub97c \uc785\ub825\ud558\uc5ec \ubc84\ud0b7\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc67c\ucabd\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow"),"\ub77c\ub294 \uc774\ub984\uc758 \ubc84\ud0b7\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-bucket",src:l(8757).Z,width:"2902",height:"1950"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"lets-install-mlflow-tracking-server"},"Let's Install MLflow Tracking Server"),(0,r.kt)("h3",{id:"helm-repository-\ucd94\uac00"},"Helm Repository \ucd94\uac00"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add mlops-for-all https://mlops-for-all.github.io/helm-charts\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'"mlops-for-all" has been added to your repositories\n')),(0,r.kt)("h3",{id:"helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "mlops-for-all" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,r.kt)("h3",{id:"helm-install"},"Helm Install"),(0,r.kt)("p",null,"mlflow-server Helm Chart 0.2.0 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm install mlflow-server mlops-for-all/mlflow-server \\\n --namespace mlflow-system \\\n --version 0.2.0\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\uc8fc\uc758"),": \uc704\uc758 helm chart\ub294 MLflow \uc758 backend store \uc640 artifacts store \uc758 \uc811\uc18d \uc815\ubcf4\ub97c kubeflow \uc124\uce58 \uacfc\uc815\uc5d0\uc11c \uc0dd\uc131\ud55c minio\uc640 \uc704\uc758 ",(0,r.kt)("a",{parentName:"li",href:"#postgresql-db-%EC%84%A4%EC%B9%98"},"PostgreSQL DB \uc124\uce58"),"\uc5d0\uc11c \uc0dd\uc131\ud55c postgresql \uc815\ubcf4\ub97c default\ub85c \ud558\uc5ec \uc124\uce58\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ubcc4\uac1c\ub85c \uc0dd\uc131\ud55c DB \ud639\uc740 Object storage\ub97c \ud65c\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0, ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/mlops-for-all/helm-charts/tree/main/mlflow/chart"},"Helm Chart Repo"),"\ub97c \ucc38\uace0\ud558\uc5ec helm install \uc2dc value\ub97c \ub530\ub85c \uc124\uc815\ud558\uc5ec \uc124\uce58\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.")))),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME: mlflow-server\nLAST DEPLOYED: Sat Dec 18 22:02:13 2021\nNAMESPACE: mlflow-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n mlflow-system | grep mlflow-server\n")),(0,r.kt)("p",null,"mlflow-system namespace \uc5d0 1 \uac1c\uc758 mlflow-server \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub41c \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlflow-server-ffd66d858-6hm62 1/1 Running 0 74s\n")),(0,r.kt)("h3",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c MLflow Server\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc811\uc18d\ud558\uae30 \uc704\ud574, \ud3ec\ud2b8\ud3ec\uc6cc\ub529\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/mlflow-server-service -n mlflow-system 5000:5000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:5000"},"localhost:5000"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-install",src:l(6905).Z,width:"2882",height:"1464"})))}u.isMDXComponent=!0},5161:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/create-bucket-58bd2a673744c0144ffb14a2aeeef821.png"},5580:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/minio-install-587ecd302eecc621dbb568c124c80ccf.png"},8757:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/mlflow-bucket-63b427bd7a5147b8bae2ac69c57facff.png"},6905:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/mlflow-install-b3920befde2af7fdbf3677ab12036440.png"}}]); \ No newline at end of file diff --git a/assets/js/2bbcffe4.aff5a9d5.js b/assets/js/2bbcffe4.aff5a9d5.js deleted file mode 100644 index 4185ff68..00000000 --- a/assets/js/2bbcffe4.aff5a9d5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9558],{3905:(e,t,l)=>{l.d(t,{Zo:()=>m,kt:()=>k});var n=l(7294);function r(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function a(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,n)}return l}function o(e){for(var t=1;t=0||(r[l]=e[l]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(r[l]=e[l])}return r}var p=n.createContext({}),i=function(e){var t=n.useContext(p),l=t;return e&&(l="function"==typeof e?e(t):o(o({},t),e)),l},m=function(e){var t=i(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var l=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=i(l),f=r,k=c["".concat(p,".").concat(f)]||c[f]||u[f]||a;return l?n.createElement(k,o(o({ref:t},m),{},{components:l})):n.createElement(k,o({ref:t},m))}));function k(e,t){var l=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=l.length,o=new Array(a);o[0]=f;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,o[1]=s;for(var i=2;i{l.r(t),l.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>i});var n=l(7462),r=(l(7294),l(3905));const a={title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,s={unversionedId:"setup-components/install-components-mlflow",id:"version-1.0/setup-components/install-components-mlflow",title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",source:"@site/versioned_docs/version-1.0/setup-components/install-components-mlflow.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-mlflow",permalink:"/docs/1.0/setup-components/install-components-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-components/install-components-mlflow.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. MLflow Tracking Server",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - MLflow",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Kubeflow",permalink:"/docs/1.0/setup-components/install-components-kf"},next:{title:"3. Seldon-Core",permalink:"/docs/1.0/setup-components/install-components-seldon"}},p={},i=[{value:"Install MLflow Tracking Server",id:"install-mlflow-tracking-server",level:2},{value:"Before Install MLflow Tracking Server",id:"before-install-mlflow-tracking-server",level:2},{value:"PostgreSQL DB \uc124\uce58",id:"postgresql-db-\uc124\uce58",level:3},{value:"Minio \uc124\uc815",id:"minio-\uc124\uc815",level:3},{value:"Let's Install MLflow Tracking Server",id:"lets-install-mlflow-tracking-server",level:2},{value:"Helm Repository \ucd94\uac00",id:"helm-repository-\ucd94\uac00",level:3},{value:"Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Helm Install",id:"helm-install",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:3}],m={toc:i},c="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"install-mlflow-tracking-server"},"Install MLflow Tracking Server"),(0,r.kt)("p",null,"MLflow\ub294 \ub300\ud45c\uc801\uc778 \uc624\ud508\uc18c\uc2a4 ML \uc2e4\ud5d8 \uad00\ub9ac \ub3c4\uad6c\uc785\ub2c8\ub2e4. MLflow\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/tracking.html#tracking"},"\uc2e4\ud5d8 \uad00\ub9ac \uc6a9\ub3c4")," \uc678\uc5d0\ub3c4 ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/projects.html#projects"},"ML Model \ud328\ud0a4\uc9d5"),", ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/models.html#models"},"ML \ubaa8\ub378 \ubc30\ud3ec \uad00\ub9ac"),", ",(0,r.kt)("a",{parentName:"p",href:"https://mlflow.org/docs/latest/model-registry.html#registry"},"ML \ubaa8\ub378 \uc800\uc7a5"),"\uacfc \uac19\uc740 \uae30\ub2a5\ub3c4 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 MLflow\ub97c \uc2e4\ud5d8 \uad00\ub9ac \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c MLflow\uc5d0\uc11c \uad00\ub9ac\ud558\ub294 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 UI\ub97c \uc81c\uacf5\ud558\ub294 MLflow Tracking Server\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"before-install-mlflow-tracking-server"},"Before Install MLflow Tracking Server"),(0,r.kt)("h3",{id:"postgresql-db-\uc124\uce58"},"PostgreSQL DB \uc124\uce58"),(0,r.kt)("p",null,"MLflow Tracking Server\uac00 Backend Store\ub85c \uc0ac\uc6a9\ud560 \uc6a9\ub3c4\uc758 PostgreSQL DB\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uba3c\uc800 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow-system"),"\uc774\ub77c\ub294 namespace \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create ns mlflow-system\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/mlflow-system created\n")),(0,r.kt)("p",null,"postgresql DB\ub97c ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow-system")," namespace \uc5d0 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n mlflow-system apply -f https://raw.githubusercontent.com/mlops-for-all/helm-charts/b94b5fe4133f769c04b25068b98ccfa7a505aa60/mlflow/manifests/postgres.yaml \n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"service/postgresql-mlflow-service created\ndeployment.apps/postgresql-mlflow created\npersistentvolumeclaim/postgresql-mlflow-pvc created\n")),(0,r.kt)("p",null,"mlflow-system namespace \uc5d0 1\uac1c\uc758 postgresql \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n mlflow-system | grep postgresql\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub41c \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"postgresql-mlflow-7b9bc8c79f-srkh7 1/1 Running 0 38s\n")),(0,r.kt)("h3",{id:"minio-\uc124\uc815"},"Minio \uc124\uc815"),(0,r.kt)("p",null,"MLflow Tracking Server\uac00 Artifacts Store\ub85c \uc0ac\uc6a9\ud560 \uc6a9\ub3c4\uc758 Minio\ub294 \uc774\uc804 Kubeflow \uc124\uce58 \ub2e8\uacc4\uc5d0\uc11c \uc124\uce58\ud55c Minio\ub97c \ud65c\uc6a9\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e8, kubeflow \uc6a9\ub3c4\uc640 mlflow \uc6a9\ub3c4\ub97c \ubd84\ub9ac\ud558\uae30 \uc704\ud574, mlflow \uc804\uc6a9 \ubc84\ud0b7(bucket)\uc744 \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","minio \uc5d0 \uc811\uc18d\ud558\uc5ec \ubc84\ud0b7\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574, \uc6b0\uc120 minio-service \ub97c \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/minio-service -n kubeflow 9000:9000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:9000"},"localhost:9000"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"minio-install",src:l(5580).Z,width:"2906",height:"1946"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc811\uc18d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \ub85c\uadf8\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Username: ",(0,r.kt)("inlineCode",{parentName:"li"},"minio")),(0,r.kt)("li",{parentName:"ul"},"Password: ",(0,r.kt)("inlineCode",{parentName:"li"},"minio123"))),(0,r.kt)("p",null,"\uc6b0\uce21 \ud558\ub2e8\uc758 ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"+"))," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"Create Bucket"),"\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"create-bucket",src:l(5161).Z,width:"2902",height:"1950"})),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Bucket Name"),"\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow"),"\ub97c \uc785\ub825\ud558\uc5ec \ubc84\ud0b7\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc67c\ucabd\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow"),"\ub77c\ub294 \uc774\ub984\uc758 \ubc84\ud0b7\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-bucket",src:l(8757).Z,width:"2902",height:"1950"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"lets-install-mlflow-tracking-server"},"Let's Install MLflow Tracking Server"),(0,r.kt)("h3",{id:"helm-repository-\ucd94\uac00"},"Helm Repository \ucd94\uac00"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add mlops-for-all https://mlops-for-all.github.io/helm-charts\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'"mlops-for-all" has been added to your repositories\n')),(0,r.kt)("h3",{id:"helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "mlops-for-all" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,r.kt)("h3",{id:"helm-install"},"Helm Install"),(0,r.kt)("p",null,"mlflow-server Helm Chart 0.2.0 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm install mlflow-server mlops-for-all/mlflow-server \\\n --namespace mlflow-system \\\n --version 0.2.0\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\uc8fc\uc758"),": \uc704\uc758 helm chart\ub294 MLflow \uc758 backend store \uc640 artifacts store \uc758 \uc811\uc18d \uc815\ubcf4\ub97c kubeflow \uc124\uce58 \uacfc\uc815\uc5d0\uc11c \uc0dd\uc131\ud55c minio\uc640 \uc704\uc758 ",(0,r.kt)("a",{parentName:"li",href:"#postgresql-db-%EC%84%A4%EC%B9%98"},"PostgreSQL DB \uc124\uce58"),"\uc5d0\uc11c \uc0dd\uc131\ud55c postgresql \uc815\ubcf4\ub97c default\ub85c \ud558\uc5ec \uc124\uce58\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ubcc4\uac1c\ub85c \uc0dd\uc131\ud55c DB \ud639\uc740 Object storage\ub97c \ud65c\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0, ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/mlops-for-all/helm-charts/tree/main/mlflow/chart"},"Helm Chart Repo"),"\ub97c \ucc38\uace0\ud558\uc5ec helm install \uc2dc value\ub97c \ub530\ub85c \uc124\uc815\ud558\uc5ec \uc124\uce58\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.")))),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME: mlflow-server\nLAST DEPLOYED: Sat Dec 18 22:02:13 2021\nNAMESPACE: mlflow-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n mlflow-system | grep mlflow-server\n")),(0,r.kt)("p",null,"mlflow-system namespace \uc5d0 1 \uac1c\uc758 mlflow-server \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub41c \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlflow-server-ffd66d858-6hm62 1/1 Running 0 74s\n")),(0,r.kt)("h3",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c MLflow Server\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc811\uc18d\ud558\uae30 \uc704\ud574, \ud3ec\ud2b8\ud3ec\uc6cc\ub529\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/mlflow-server-service -n mlflow-system 5000:5000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:5000"},"localhost:5000"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-install",src:l(6905).Z,width:"2882",height:"1464"})))}u.isMDXComponent=!0},5161:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/create-bucket-58bd2a673744c0144ffb14a2aeeef821.png"},5580:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/minio-install-587ecd302eecc621dbb568c124c80ccf.png"},8757:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/mlflow-bucket-63b427bd7a5147b8bae2ac69c57facff.png"},6905:(e,t,l)=>{l.d(t,{Z:()=>n});const n=l.p+"assets/images/mlflow-install-b3920befde2af7fdbf3677ab12036440.png"}}]); \ No newline at end of file diff --git a/assets/js/2d9584e5.5a743056.js b/assets/js/2d9584e5.5a743056.js deleted file mode 100644 index a04e408e..00000000 --- a/assets/js/2d9584e5.5a743056.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3870],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var l=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function r(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=l.createContext({}),s=function(e){var t=l.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=s(e.components);return l.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},m=l.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,p=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),u=s(n),m=i,f=u["".concat(p,".").concat(m)]||u[m]||d[m]||o;return n?l.createElement(f,r(r({ref:t},c),{},{components:n})):l.createElement(f,r({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=m;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[u]="string"==typeof e?e:i,r[1]=a;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>s});var l=n(7462),i=(n(7294),n(3905));const o={title:"2. Levels of MLOps",description:"Levels of MLOps",sidebar_position:2,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2022-03-05T00:00:00.000Z"),contributors:["Jongseob Jeon"]},r=void 0,a={unversionedId:"introduction/levels",id:"version-1.0/introduction/levels",title:"2. Levels of MLOps",description:"Levels of MLOps",source:"@site/versioned_docs/version-1.0/introduction/levels.md",sourceDirName:"introduction",slug:"/introduction/levels",permalink:"/docs/1.0/introduction/levels",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/introduction/levels.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Levels of MLOps",description:"Levels of MLOps",sidebar_position:2,date:"2021-12-03T00:00:00.000Z",lastmod:"2022-03-05T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"1. What is MLOps?",permalink:"/docs/1.0/introduction/intro"},next:{title:"3. Components of MLOps",permalink:"/docs/1.0/introduction/component"}},p={},s=[{value:"Hidden Technical Debt in ML System",id:"hidden-technical-debt-in-ml-system",level:2},{value:"0\ub2e8\uacc4: \uc218\ub3d9 \ud504\ub85c\uc138\uc2a4",id:"0\ub2e8\uacc4-\uc218\ub3d9-\ud504\ub85c\uc138\uc2a4",level:2},{value:"1\ub2e8\uacc4: ML \ud30c\uc774\ud504\ub77c\uc778 \uc790\ub3d9\ud654",id:"1\ub2e8\uacc4-ml-\ud30c\uc774\ud504\ub77c\uc778-\uc790\ub3d9\ud654",level:2},{value:"Pipeline",id:"pipeline",level:3},{value:"Continuous Training",id:"continuous-training",level:3},{value:"Auto Retrain",id:"auto-retrain",level:4},{value:"Auto Deploy",id:"auto-deploy",level:4},{value:"2\ub2e8\uacc4: CI/CD \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc790\ub3d9\ud654",id:"2\ub2e8\uacc4-cicd-\ud30c\uc774\ud504\ub77c\uc778\uc758-\uc790\ub3d9\ud654",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...o}=e;return(0,i.kt)(u,(0,l.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uad6c\uae00\uc5d0\uc11c \ubc1c\ud45c\ud55c MLOps\uc758 \ub2e8\uacc4\ub97c \ubcf4\uba70 MLOps\uc758 \ud575\uc2ec \uae30\ub2a5\uc740 \ubb34\uc5c7\uc778\uc9c0 \uc54c\uc544 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"hidden-technical-debt-in-ml-system"},"Hidden Technical Debt in ML System"),(0,i.kt)("p",null,"\uad6c\uae00\uc740 \ubb34\ub824 2015\ub144\ubd80\ud130 MLOps\uc758 \ud544\uc694\uc131\uc744 \ub9d0\ud588\uc2b5\ub2c8\ub2e4. Hidden Technical Debt in Machine Learning Systems \uc740 \uadf8\ub7f0 \uad6c\uae00\uc758 \uc0dd\uac01\uc744 \ub2f4\uc740 \ub17c\ubb38\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"paper",src:n(765).Z,width:"840",height:"638"})),(0,i.kt)("p",null,"\uc774 \ub17c\ubb38\uc758 \ud575\uc2ec\uc740 \ubc14\ub85c \uba38\uc2e0\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \uc81c\ud488\uc744 \ub9cc\ub4dc\ub294\ub370 \uc788\uc5b4\uc11c \uba38\uc2e0\ub7ec\ub2dd \ucf54\ub4dc\ub294 \uc804\uccb4 \uc2dc\uc2a4\ud15c\uc744 \uad6c\uc131\ud558\ub294\ub370 \uc788\uc5b4\uc11c \uc544\uc8fc \uc77c\ubd80\uc77c \ubfd0\uc774\ub77c\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"paper-2",src:n(2422).Z,width:"1186",height:"422"})),(0,i.kt)("p",null,"\uad6c\uae00\uc740 \uc774 \ub17c\ubb38\uc744 \ub354 \ubc1c\uc804\uc2dc\ucf1c\uc11c MLOps\ub77c\ub294 \uc6a9\uc5b4\ub97c \ub9cc\ub4e4\uc5b4 \ud655\uc7a5\uc2dc\ucf30\uc2b5\ub2c8\ub2e4. \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,i.kt)("a",{parentName:"p",href:"https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning"},"\uad6c\uae00 \ud074\ub77c\uc6b0\ub4dc \ud648\ud398\uc774\uc9c0"),"\uc5d0\uc11c \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 \uad6c\uae00\uc5d0\uc11c \ub9d0\ud558\ub294 MLOps\ub780 \uc5b4\ub5a4 \uac83\uc778\uc9c0\uc5d0 \ub300\ud574\uc11c \uc124\uba85\ud574\ubcf4\uace0\uc790 \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uad6c\uae00\uc5d0\uc11c\ub294 MLOps\uc758 \ubc1c\uc804 \ub2e8\uacc4\ub97c \ucd1d 3(0~2)\ub2e8\uacc4\ub85c \ub098\ub204\uc5c8\uc2b5\ub2c8\ub2e4. \uac01 \ub2e8\uacc4\ub4e4\uc5d0 \ub300\ud574 \uc124\uba85\ud558\uae30 \uc55e\uc11c \uc774\uc804 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c \uc124\uba85\ud588\ub358 \uac1c\ub150 \uc911 \ud544\uc694\ud55c \ubd80\ubd84\uc744 \ub2e4\uc2dc \ud55c\ubc88 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc6b4\uc601\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uacfc \ubc30\ud3ec \ubc0f \uc6b4\uc601\uc744 \ub2f4\ub2f9\ud558\ub294 \uc6b4\uc601\ud300\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \ud300\uc758 \uc6d0\ud560\ud55c \ud611\uc5c5\uc744 \uc704\ud574\uc11c MLOps\uac00 \ud544\uc694\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub294 \uac04\ub2e8\ud788 Continuous Integration(CI)/Continuous Deployment(CD)\ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\ub2e4\uace0 \ud558\uc600\ub294\ub370, \uc5b4\ub5bb\uac8c CI/CD\ub97c \ud558\ub294\uc9c0\uc5d0 \ub300\ud574\uc11c \uc54c\uc544 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"0\ub2e8\uacc4-\uc218\ub3d9-\ud504\ub85c\uc138\uc2a4"},"0\ub2e8\uacc4: \uc218\ub3d9 \ud504\ub85c\uc138\uc2a4"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-0",src:n(5450).Z,width:"1332",height:"494"})),(0,i.kt)("p",null,"0\ub2e8\uacc4\uc5d0\uc11c \ub450 \ud300\uc740 \u201c\ubaa8\ub378\u201d\uc744 \ud1b5\ud574 \uc18c\ud1b5\ud569\ub2c8\ub2e4. \uba38\uc2e0 \ub7ec\ub2dd\ud300\uc740 \uc313\uc5ec\uc788\ub294 \ub370\uc774\ud130\ub85c \ubaa8\ub378\uc744 \ud559\uc2b5\uc2dc\ud0a4\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc6b4\uc601\ud300\uc5d0\uac8c \uc804\ub2ec \ud569\ub2c8\ub2e4. \uc6b4\uc601\ud300\uc740 \uc774\ub807\uac8c \uc804\ub2ec\ubc1b\uc740 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"toon",src:n(2412).Z,width:"1282",height:"1746"})),(0,i.kt)("p",null,"\ucd08\uae30\uc758 \uba38\uc2e0 \ub7ec\ub2dd \ubaa8\ub378\ub4e4\uc740 \uc774 \u201c\ubaa8\ub378\u201d \uc911\uc2ec\uc758 \uc18c\ud1b5\uc744 \ud1b5\ud574 \ubc30\ud3ec\ud569\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uc774\ub7f0 \ubc30\ud3ec \ubc29\uc2dd\uc740 \uc5ec\ub7ec \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc5b4\ub5a4 \uae30\ub2a5\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c 3.7\uc744 \uc4f0\uace0 \uc5b4\ub5a4 \uae30\ub2a5\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c 3.8\uc744 \uc4f4\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0c1\ud669\uc744 \uc790\uc8fc \ubaa9\uaca9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c \uc0c1\ud669\uc774 \uc77c\uc5b4\ub098\ub294 \uc774\uc720\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \ud2b9\uc131\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud559\uc2b5\ub41c \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uae30 \uc704\ud574\uc11c\ub294 3\uac00\uc9c0\uac00 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"\ud30c\uc774\uc36c \ucf54\ub4dc"),(0,i.kt)("li",{parentName:"ol"},"\ud559\uc2b5\ub41c \uac00\uc911\uce58"),(0,i.kt)("li",{parentName:"ol"},"\ud658\uacbd (\ud328\ud0a4\uc9c0, \ubc84\uc804 \ub4f1)")),(0,i.kt)("p",null,"\ub9cc\uc57d \uc774 3\uac00\uc9c0 \uc911 \ud55c \uac00\uc9c0\ub77c\ub3c4 \uc804\ub2ec\uc774 \uc798\ubabb \ub41c\ub2e4\uba74 \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\uac70\ub098 \uc608\uc0c1\ud558\uc9c0 \ubabb\ud55c \uc608\uce21\uc744 \ud560\uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9ce\uc740 \uacbd\uc6b0 \ud658\uacbd\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc544\uc11c \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uc740 \ub2e4\uc591\ud55c \uc624\ud508\uc18c\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294\ub370 \uc624\ud508\uc18c\uc2a4\ub294 \ud2b9\uc131\uc0c1 \uc5b4\ub5a4 \ubc84\uc804\uc744 \uc4f0\ub294\uc9c0\uc5d0 \ub530\ub77c\uc11c \uac19\uc740 \ud568\uc218\ub77c\ub3c4 \uacb0\uacfc\uac00 \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c \ubb38\uc81c\ub294 \uc11c\ube44\uc2a4 \ucd08\uae30\uc5d0\ub294 \uad00\ub9ac\ud560 \ubaa8\ub378\uc774 \ub9ce\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uae08\ubc29 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\ub4e4\uc774 \ub9ce\uc544\uc9c0\uace0 \uc11c\ub85c \uc18c\ud1b5\uc5d0 \uc5b4\ub824\uc6c0\uc744 \uacaa\uac8c \ub41c\ub2e4\uba74 \uc131\ub2a5\uc774 \ub354 \uc88b\uc740 \ubaa8\ub378\uc744 \ube60\ub974\uac8c \ubc30\ud3ec\ud560 \uc218 \uc5c6\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"1\ub2e8\uacc4-ml-\ud30c\uc774\ud504\ub77c\uc778-\uc790\ub3d9\ud654"},"1\ub2e8\uacc4: ML \ud30c\uc774\ud504\ub77c\uc778 \uc790\ub3d9\ud654"),(0,i.kt)("h3",{id:"pipeline"},"Pipeline"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-1-pipeline",src:n(1972).Z,width:"1356",height:"942"})),(0,i.kt)("p",null,"\uadf8\ub798\uc11c MLOps\uc5d0\uc11c\ub294 \u201c\ud30c\uc774\ud504\ub77c\uc778(Pipeline)\u201d\uc744 \uc774\uc6a9\ud574 \uc774\ub7ec\ud55c \ubb38\uc81c\ub97c \ubc29\uc9c0\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4. MLOps\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub3c4\ucee4\uc640 \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc774\uc6a9\ud574 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ubaa8\ub378 \uac1c\ubc1c\uc5d0 \uc0ac\uc6a9\ud55c \uac83\uacfc \ub3d9\uc77c\ud55c \ud658\uacbd\uc73c\ub85c \ub3d9\uc791\ub418\ub294 \uac83\uc744 \ubcf4\uc7a5\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574\uc11c \ud658\uacbd\uc774 \ub2ec\ub77c\uc11c \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub7f0\ub370 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubc94\uc6a9\uc801\uc778 \uc6a9\uc5b4\ub85c \uc5ec\ub7ec \ub2e4\uc591\ud55c \ud0dc\uc2a4\ud06c\uc5d0\uc11c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc791\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc5ed\ud560\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc791\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0dd\uc0b0\ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \ud30c\uc774\ud504\ub77c\uc778 \ub300\uc2e0 \ud559\uc2b5 \ud30c\uc774\ud504\ub77c\uc778(Training Pipeline)\uc774 \ub354 \uc815\ud655\ud558\ub2e4\uace0 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"continuous-training"},"Continuous Training"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-1-ct.png",src:n(3155).Z,width:"1356",height:"942"})),(0,i.kt)("p",null,"\uadf8\ub9ac\uace0 Continuous Training(CT) \uac1c\ub150\uc774 \ucd94\uac00\ub429\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 CT\ub294 \uc65c \ud544\uc694\ud560\uae4c\uc694?"),(0,i.kt)("h4",{id:"auto-retrain"},"Auto Retrain"),(0,i.kt)("p",null,"Real World\uc5d0\uc11c \ub370\uc774\ud130\ub294 Data Shift\ub77c\ub294 \ub370\uc774\ud130\uc758 \ubd84\ud3ec\uac00 \uacc4\uc18d\ud574\uc11c \ubcc0\ud558\ub294 \ud2b9\uc9d5\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uacfc\uac70\uc5d0 \ud559\uc2b5\ud55c \ubaa8\ub378\uc774 \uc2dc\uac04\uc774 \uc9c0\ub0a8\uc5d0 \ub530\ub77c \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \uc800\ud558\ub418\ub294 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294 \uac00\uc7a5 \uac04\ub2e8\ud558\uace0 \ud6a8\uacfc\uc801\uc778 \ud574\uacb0\ucc45\uc740 \ubc14\ub85c \ucd5c\uadfc \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ubcc0\ud654\ub41c \ub370\uc774\ud130 \ubd84\ud3ec\uc5d0 \ub9de\ucdb0\uc11c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5\ud558\uba74 \ub2e4\uc2dc \uc900\uc218\ud55c \uc131\ub2a5\uc744 \ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"auto-deploy"},"Auto Deploy"),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \uc81c\uc870\uc5c5\uacfc \uac19\uc774 \ud55c \uacf5\uc7a5\uc5d0\uc11c \uc5ec\ub7ec \ub808\uc2dc\ud53c\ub97c \ucc98\ub9ac\ud558\ub294 \uacbd\uc6b0 \ubb34\uc870\uac74 \uc7ac\ud559\uc2b5\uc744 \ud558\ub294 \uac83\uc774 \uc88b\uc9c0 \uc54a\uc744 \uc218 \ub3c4 \uc788\uc2b5\ub2c8\ub2e4. Blind Spot\uc774 \ub300\ud45c\uc801\uc778 \uc608\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \uc790\ub3d9\ucc28 \uc0dd\uc0b0 \ub77c\uc778\uc5d0\uc11c \ubaa8\ub378 A\uc5d0 \ub300\ud574\uc11c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uace0 \uc774\ub97c \uc774\uc6a9\ud574 \uc608\uce21\uc744 \uc9c4\ud589\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \uc804\ud600 \ub2e4\ub978 \ubaa8\ub378 B\uac00 \ub4e4\uc5b4\uc624\uba74 \uc774\uc804\uc5d0 \ubcf4\uc9c0 \ubabb\ud55c \ub370\uc774\ud130 \ud328\ud134\uc774\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub378 B\uc5d0 \ub300\ud574\uc11c \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ud559\uc2b5\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\uc81c \ubaa8\ub378 B\uc5d0 \ub300\ud574\uc11c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uc5c8\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub378\uc740 \uc608\uce21\uc744 \uc9c4\ud589\ud560 \uac83 \uc785\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9cc\uc57d \ub370\uc774\ud130\uac00 \ub2e4\uc2dc \ubaa8\ub378 A\ub85c \ubc14\ub010\ub2e4\uba74 \uc5b4\ub5bb\uac8c \ud560\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d Retraining \uaddc\uce59\ub9cc \uc788\ub2e4\uba74 \ub2e4\uc2dc \ubaa8\ub378 A\uc5d0 \ub300\ud574\uc11c \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\uac8c \ub429\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc774 \ucda9\ubd84\ud55c \uc131\ub2a5\uc744 \ubcf4\uc774\uae30 \uc704\ud574\uc11c\ub294 \ucda9\ubd84\ud55c \uc591\uc758 \ub370\uc774\ud130\uac00 \ubaa8\uc5ec\uc57c \ud569\ub2c8\ub2e4. Blind Spot\uc774\ub780 \uc774\ub807\uac8c \ub370\uc774\ud130\ub97c \ubaa8\uc73c\uae30 \uc704\ud574\uc11c \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uad6c\uac04\uc744 \ub9d0\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c Blind Spot\uc744 \ud574\uacb0\ud558\ub294 \ubc29\ubc95\uc740 \uac04\ub2e8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc14\ub85c \ubaa8\ub378 A\uc5d0 \ub300\ud55c \ubaa8\ub378\uc774 \uacfc\uac70\uc5d0 \uc788\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uace0 \ub9cc\uc57d \uc788\uc5c8\ub2e4\uba74 \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ubc14\ub85c \ud559\uc2b5\ud558\uae30 \ubcf4\ub2e4\ub294 \uc774 \uc804 \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \ub2e4\uc2dc \uc608\uce21\uc744 \ud558\uba74 \uc774\ub7f0 Blind Spot\uc744 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ubaa8\ub378\uc640 \uac19\uc740 \uba54\ud0c0 \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \ubaa8\ub378\uc744 \uc790\ub3d9\uc73c\ub85c \ubcc0\ud658\ud574\uc8fc\ub294 \uac83\uc744 Auto Deploy\ub77c\uace0 \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc815\ub9ac\ud558\uc790\uba74 CT\ub97c \uc704\ud574\uc11c\ub294 Auto Retraining\uc758\uacfc Auto Deploy \ub450 \uac00\uc9c0 \uae30\ub2a5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub458\uc740 \uc11c\ub85c\uc758 \ub2e8\uc810\uc744 \ubcf4\uc644\ud574 \uacc4\uc18d\ud574\uc11c \ubaa8\ub378\uc758 \uc131\ub2a5\uc744 \uc720\uc9c0\ud560 \uc218 \uc788\uac8c \ud569\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"2\ub2e8\uacc4-cicd-\ud30c\uc774\ud504\ub77c\uc778\uc758-\uc790\ub3d9\ud654"},"2\ub2e8\uacc4: CI/CD \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc790\ub3d9\ud654"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-2",src:n(6730).Z,width:"1356",height:"862"})),(0,i.kt)("p",null,"2\ub2e8\uacc4\uc758 \uc81c\ubaa9\uc740 CI\uc640 CD\uc758 \uc790\ub3d9\ud654 \uc785\ub2c8\ub2e4. DevOps\uc5d0\uc11c\uc758 CI/CD\uc758 \ub300\uc0c1\uc740 \uc18c\uc2a4 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 MLOps\ub294 \uc5b4\ub5a4 \uac83\uc774 CI/CD\uc758 \ub300\uc0c1\uc77c\uae4c\uc694?"),(0,i.kt)("p",null,"MLOps\uc758 CI/CD \ub300\uc0c1 \ub610\ud55c \uc18c\uc2a4 \ucf54\ub4dc\uc778 \uac83\uc740 \ub9de\uc9c0\ub9cc \uc870\uae08 \ub354 \uc5c4\ubc00\ud788 \uc815\uc758\ud558\uc790\uba74 \ud559\uc2b5 \ud30c\uc774\ud504\ub77c\uc778\uc774\ub77c\uace0 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub798\uc11c \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294\ub370 \uc788\uc5b4\uc11c \uc601\ud5a5\uc774 \uc788\ub294 \ubcc0\ud654\uc5d0 \ub300\ud574\uc11c \uc2e4\uc81c\ub85c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ud559\uc2b5\uc774 \ub418\ub294\uc9c0 (CI), \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\ub294\uc9c0 (CD)\ub97c \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \ud559\uc2b5\uc744 \ud558\ub294 \ucf54\ub4dc\uc5d0 \uc9c1\uc811\uc801\uc778 \uc218\uc815\uc774 \uc788\ub294 \uacbd\uc6b0\uc5d0\ub294 CI/CD\ub97c \uc9c4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ucf54\ub4dc \uc678\uc5d0\ub3c4 \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\uc758 \ubc84\uc804, \ud30c\uc774\uc36c\uc758 \ubc84\uc804 \ubcc0\uacbd\ub3c4 CI/CD\uc758 \ub300\uc0c1\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uacbd\uc6b0 \uba38\uc2e0 \ub7ec\ub2dd\uc740 \uc624\ud508 \uc18c\uc2a4\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc624\ud508 \uc18c\uc2a4\ub294 \uadf8 \ud2b9\uc131\uc0c1 \ubc84\uc804\uc774 \ubc14\ub00c\uc5c8\uc744 \ub54c \ud568\uc218\uc758 \ub0b4\ubd80 \ub85c\uc9c1\uc774 \ubcc0\ud558\ub294 \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ubb3c\ub860 \uc5b4\ub290 \uc815\ub3c4 \ubc84\uc804\uc774 \uc62c\ub77c \uac08 \ub54c \uc774\uc640 \uad00\ub828\ub41c \uc54c\ub9bc\uc744 \uc8fc\uc9c0\ub9cc \ud55c \ubc88\uc5d0 \ubc84\uc804\uc774 \ud06c\uac8c \ubc14\ub010\ub2e4\uba74 \uc774\ub7ec\ud55c \ubcc0\ud654\ub97c \ubaa8\ub97c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\uc758 \ubc84\uc804\uc774 \ubcc0\ud558\ub294 \uacbd\uc6b0\uc5d0\ub3c4 CI/CD\ub97c \ud1b5\ud574 \uc815\uc0c1\uc801\uc73c\ub85c \ubaa8\ub378\uc774 \ud559\uc2b5, \ub3d9\uc791\ud558\ub294\uc9c0 \ud655\uc778\uc744 \ud574\uc57c \ud569\ub2c8\ub2e4."))}d.isMDXComponent=!0},5450:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-0-85b288b20c458e64055199fc50b1fe86.png"},3155:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-1-ct-a1ac90943bd5dd8e9af840cbcf51e985.png"},1972:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-1-pipeline-b2979b34d4804546ef4005cdf0f6311a.png"},6730:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-2-a4bb6a840eb99f33f3027217a5a04d8e.png"},2422:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/paper-2-b10bd2ae7445c3098c9f133131859466.png"},765:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/paper-67df32c03d5288f214c8cd189f85b2ea.png"},2412:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/toon-8ff2a8fb63a502a2b419a4cd459a7e41.png"}}]); \ No newline at end of file diff --git a/assets/js/2d9584e5.cf9f451f.js b/assets/js/2d9584e5.cf9f451f.js new file mode 100644 index 00000000..2128c0e6 --- /dev/null +++ b/assets/js/2d9584e5.cf9f451f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3870],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var l=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,l)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=l.createContext({}),s=function(e){var t=l.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return l.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},m=l.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,p=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),u=s(n),m=i,f=u["".concat(p,".").concat(m)]||u[m]||d[m]||r;return n?l.createElement(f,o(o({ref:t},c),{},{components:n})):l.createElement(f,o({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=m;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[u]="string"==typeof e?e:i,o[1]=a;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>s});var l=n(7462),i=(n(7294),n(3905));const r={title:"2. Levels of MLOps",description:"Levels of MLOps",sidebar_position:2,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2022-03-05T00:00:00.000Z"),contributors:["Jongseob Jeon"]},o=void 0,a={unversionedId:"introduction/levels",id:"version-1.0/introduction/levels",title:"2. Levels of MLOps",description:"Levels of MLOps",source:"@site/versioned_docs/version-1.0/introduction/levels.md",sourceDirName:"introduction",slug:"/introduction/levels",permalink:"/docs/1.0/introduction/levels",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/introduction/levels.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Levels of MLOps",description:"Levels of MLOps",sidebar_position:2,date:"2021-12-03T00:00:00.000Z",lastmod:"2022-03-05T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"1. What is MLOps?",permalink:"/docs/1.0/introduction/intro"},next:{title:"3. Components of MLOps",permalink:"/docs/1.0/introduction/component"}},p={},s=[{value:"Hidden Technical Debt in ML System",id:"hidden-technical-debt-in-ml-system",level:2},{value:"0\ub2e8\uacc4: \uc218\ub3d9 \ud504\ub85c\uc138\uc2a4",id:"0\ub2e8\uacc4-\uc218\ub3d9-\ud504\ub85c\uc138\uc2a4",level:2},{value:"1\ub2e8\uacc4: ML \ud30c\uc774\ud504\ub77c\uc778 \uc790\ub3d9\ud654",id:"1\ub2e8\uacc4-ml-\ud30c\uc774\ud504\ub77c\uc778-\uc790\ub3d9\ud654",level:2},{value:"Pipeline",id:"pipeline",level:3},{value:"Continuous Training",id:"continuous-training",level:3},{value:"Auto Retrain",id:"auto-retrain",level:4},{value:"Auto Deploy",id:"auto-deploy",level:4},{value:"2\ub2e8\uacc4: CI/CD \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc790\ub3d9\ud654",id:"2\ub2e8\uacc4-cicd-\ud30c\uc774\ud504\ub77c\uc778\uc758-\uc790\ub3d9\ud654",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(u,(0,l.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uad6c\uae00\uc5d0\uc11c \ubc1c\ud45c\ud55c MLOps\uc758 \ub2e8\uacc4\ub97c \ubcf4\uba70 MLOps\uc758 \ud575\uc2ec \uae30\ub2a5\uc740 \ubb34\uc5c7\uc778\uc9c0 \uc54c\uc544 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"hidden-technical-debt-in-ml-system"},"Hidden Technical Debt in ML System"),(0,i.kt)("p",null,"\uad6c\uae00\uc740 \ubb34\ub824 2015\ub144\ubd80\ud130 MLOps\uc758 \ud544\uc694\uc131\uc744 \ub9d0\ud588\uc2b5\ub2c8\ub2e4. Hidden Technical Debt in Machine Learning Systems \uc740 \uadf8\ub7f0 \uad6c\uae00\uc758 \uc0dd\uac01\uc744 \ub2f4\uc740 \ub17c\ubb38\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"paper",src:n(765).Z,width:"840",height:"638"})),(0,i.kt)("p",null,"\uc774 \ub17c\ubb38\uc758 \ud575\uc2ec\uc740 \ubc14\ub85c \uba38\uc2e0\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \uc81c\ud488\uc744 \ub9cc\ub4dc\ub294\ub370 \uc788\uc5b4\uc11c \uba38\uc2e0\ub7ec\ub2dd \ucf54\ub4dc\ub294 \uc804\uccb4 \uc2dc\uc2a4\ud15c\uc744 \uad6c\uc131\ud558\ub294\ub370 \uc788\uc5b4\uc11c \uc544\uc8fc \uc77c\ubd80\uc77c \ubfd0\uc774\ub77c\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"paper-2",src:n(2422).Z,width:"1186",height:"422"})),(0,i.kt)("p",null,"\uad6c\uae00\uc740 \uc774 \ub17c\ubb38\uc744 \ub354 \ubc1c\uc804\uc2dc\ucf1c\uc11c MLOps\ub77c\ub294 \uc6a9\uc5b4\ub97c \ub9cc\ub4e4\uc5b4 \ud655\uc7a5\uc2dc\ucf30\uc2b5\ub2c8\ub2e4. \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,i.kt)("a",{parentName:"p",href:"https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning"},"\uad6c\uae00 \ud074\ub77c\uc6b0\ub4dc \ud648\ud398\uc774\uc9c0"),"\uc5d0\uc11c \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 \uad6c\uae00\uc5d0\uc11c \ub9d0\ud558\ub294 MLOps\ub780 \uc5b4\ub5a4 \uac83\uc778\uc9c0\uc5d0 \ub300\ud574\uc11c \uc124\uba85\ud574\ubcf4\uace0\uc790 \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uad6c\uae00\uc5d0\uc11c\ub294 MLOps\uc758 \ubc1c\uc804 \ub2e8\uacc4\ub97c \ucd1d 3(0~2)\ub2e8\uacc4\ub85c \ub098\ub204\uc5c8\uc2b5\ub2c8\ub2e4. \uac01 \ub2e8\uacc4\ub4e4\uc5d0 \ub300\ud574 \uc124\uba85\ud558\uae30 \uc55e\uc11c \uc774\uc804 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c \uc124\uba85\ud588\ub358 \uac1c\ub150 \uc911 \ud544\uc694\ud55c \ubd80\ubd84\uc744 \ub2e4\uc2dc \ud55c\ubc88 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc6b4\uc601\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uacfc \ubc30\ud3ec \ubc0f \uc6b4\uc601\uc744 \ub2f4\ub2f9\ud558\ub294 \uc6b4\uc601\ud300\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \ud300\uc758 \uc6d0\ud560\ud55c \ud611\uc5c5\uc744 \uc704\ud574\uc11c MLOps\uac00 \ud544\uc694\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804\uc5d0\ub294 \uac04\ub2e8\ud788 Continuous Integration(CI)/Continuous Deployment(CD)\ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\ub2e4\uace0 \ud558\uc600\ub294\ub370, \uc5b4\ub5bb\uac8c CI/CD\ub97c \ud558\ub294\uc9c0\uc5d0 \ub300\ud574\uc11c \uc54c\uc544 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"0\ub2e8\uacc4-\uc218\ub3d9-\ud504\ub85c\uc138\uc2a4"},"0\ub2e8\uacc4: \uc218\ub3d9 \ud504\ub85c\uc138\uc2a4"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-0",src:n(5450).Z,width:"1332",height:"494"})),(0,i.kt)("p",null,"0\ub2e8\uacc4\uc5d0\uc11c \ub450 \ud300\uc740 \u201c\ubaa8\ub378\u201d\uc744 \ud1b5\ud574 \uc18c\ud1b5\ud569\ub2c8\ub2e4. \uba38\uc2e0 \ub7ec\ub2dd\ud300\uc740 \uc313\uc5ec\uc788\ub294 \ub370\uc774\ud130\ub85c \ubaa8\ub378\uc744 \ud559\uc2b5\uc2dc\ud0a4\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc6b4\uc601\ud300\uc5d0\uac8c \uc804\ub2ec \ud569\ub2c8\ub2e4. \uc6b4\uc601\ud300\uc740 \uc774\ub807\uac8c \uc804\ub2ec\ubc1b\uc740 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"toon",src:n(2412).Z,width:"1282",height:"1746"})),(0,i.kt)("p",null,"\ucd08\uae30\uc758 \uba38\uc2e0 \ub7ec\ub2dd \ubaa8\ub378\ub4e4\uc740 \uc774 \u201c\ubaa8\ub378\u201d \uc911\uc2ec\uc758 \uc18c\ud1b5\uc744 \ud1b5\ud574 \ubc30\ud3ec\ud569\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uc774\ub7f0 \ubc30\ud3ec \ubc29\uc2dd\uc740 \uc5ec\ub7ec \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc5b4\ub5a4 \uae30\ub2a5\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c 3.7\uc744 \uc4f0\uace0 \uc5b4\ub5a4 \uae30\ub2a5\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c 3.8\uc744 \uc4f4\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0c1\ud669\uc744 \uc790\uc8fc \ubaa9\uaca9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c \uc0c1\ud669\uc774 \uc77c\uc5b4\ub098\ub294 \uc774\uc720\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \ud2b9\uc131\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud559\uc2b5\ub41c \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uae30 \uc704\ud574\uc11c\ub294 3\uac00\uc9c0\uac00 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"\ud30c\uc774\uc36c \ucf54\ub4dc"),(0,i.kt)("li",{parentName:"ol"},"\ud559\uc2b5\ub41c \uac00\uc911\uce58"),(0,i.kt)("li",{parentName:"ol"},"\ud658\uacbd (\ud328\ud0a4\uc9c0, \ubc84\uc804 \ub4f1)")),(0,i.kt)("p",null,"\ub9cc\uc57d \uc774 3\uac00\uc9c0 \uc911 \ud55c \uac00\uc9c0\ub77c\ub3c4 \uc804\ub2ec\uc774 \uc798\ubabb \ub41c\ub2e4\uba74 \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\uac70\ub098 \uc608\uc0c1\ud558\uc9c0 \ubabb\ud55c \uc608\uce21\uc744 \ud560\uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9ce\uc740 \uacbd\uc6b0 \ud658\uacbd\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc544\uc11c \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uc740 \ub2e4\uc591\ud55c \uc624\ud508\uc18c\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294\ub370 \uc624\ud508\uc18c\uc2a4\ub294 \ud2b9\uc131\uc0c1 \uc5b4\ub5a4 \ubc84\uc804\uc744 \uc4f0\ub294\uc9c0\uc5d0 \ub530\ub77c\uc11c \uac19\uc740 \ud568\uc218\ub77c\ub3c4 \uacb0\uacfc\uac00 \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c \ubb38\uc81c\ub294 \uc11c\ube44\uc2a4 \ucd08\uae30\uc5d0\ub294 \uad00\ub9ac\ud560 \ubaa8\ub378\uc774 \ub9ce\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uae08\ubc29 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\ub4e4\uc774 \ub9ce\uc544\uc9c0\uace0 \uc11c\ub85c \uc18c\ud1b5\uc5d0 \uc5b4\ub824\uc6c0\uc744 \uacaa\uac8c \ub41c\ub2e4\uba74 \uc131\ub2a5\uc774 \ub354 \uc88b\uc740 \ubaa8\ub378\uc744 \ube60\ub974\uac8c \ubc30\ud3ec\ud560 \uc218 \uc5c6\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"1\ub2e8\uacc4-ml-\ud30c\uc774\ud504\ub77c\uc778-\uc790\ub3d9\ud654"},"1\ub2e8\uacc4: ML \ud30c\uc774\ud504\ub77c\uc778 \uc790\ub3d9\ud654"),(0,i.kt)("h3",{id:"pipeline"},"Pipeline"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-1-pipeline",src:n(1972).Z,width:"1356",height:"942"})),(0,i.kt)("p",null,"\uadf8\ub798\uc11c MLOps\uc5d0\uc11c\ub294 \u201c\ud30c\uc774\ud504\ub77c\uc778(Pipeline)\u201d\uc744 \uc774\uc6a9\ud574 \uc774\ub7ec\ud55c \ubb38\uc81c\ub97c \ubc29\uc9c0\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4. MLOps\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub3c4\ucee4\uc640 \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc774\uc6a9\ud574 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ubaa8\ub378 \uac1c\ubc1c\uc5d0 \uc0ac\uc6a9\ud55c \uac83\uacfc \ub3d9\uc77c\ud55c \ud658\uacbd\uc73c\ub85c \ub3d9\uc791\ub418\ub294 \uac83\uc744 \ubcf4\uc7a5\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574\uc11c \ud658\uacbd\uc774 \ub2ec\ub77c\uc11c \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub7f0\ub370 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubc94\uc6a9\uc801\uc778 \uc6a9\uc5b4\ub85c \uc5ec\ub7ec \ub2e4\uc591\ud55c \ud0dc\uc2a4\ud06c\uc5d0\uc11c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc791\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc5ed\ud560\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \uc791\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0dd\uc0b0\ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \ud30c\uc774\ud504\ub77c\uc778 \ub300\uc2e0 \ud559\uc2b5 \ud30c\uc774\ud504\ub77c\uc778(Training Pipeline)\uc774 \ub354 \uc815\ud655\ud558\ub2e4\uace0 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"continuous-training"},"Continuous Training"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-1-ct.png",src:n(3155).Z,width:"1356",height:"942"})),(0,i.kt)("p",null,"\uadf8\ub9ac\uace0 Continuous Training(CT) \uac1c\ub150\uc774 \ucd94\uac00\ub429\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 CT\ub294 \uc65c \ud544\uc694\ud560\uae4c\uc694?"),(0,i.kt)("h4",{id:"auto-retrain"},"Auto Retrain"),(0,i.kt)("p",null,"Real World\uc5d0\uc11c \ub370\uc774\ud130\ub294 Data Shift\ub77c\ub294 \ub370\uc774\ud130\uc758 \ubd84\ud3ec\uac00 \uacc4\uc18d\ud574\uc11c \ubcc0\ud558\ub294 \ud2b9\uc9d5\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c \uacfc\uac70\uc5d0 \ud559\uc2b5\ud55c \ubaa8\ub378\uc774 \uc2dc\uac04\uc774 \uc9c0\ub0a8\uc5d0 \ub530\ub77c \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \uc800\ud558\ub418\ub294 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294 \uac00\uc7a5 \uac04\ub2e8\ud558\uace0 \ud6a8\uacfc\uc801\uc778 \ud574\uacb0\ucc45\uc740 \ubc14\ub85c \ucd5c\uadfc \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ubcc0\ud654\ub41c \ub370\uc774\ud130 \ubd84\ud3ec\uc5d0 \ub9de\ucdb0\uc11c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5\ud558\uba74 \ub2e4\uc2dc \uc900\uc218\ud55c \uc131\ub2a5\uc744 \ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"auto-deploy"},"Auto Deploy"),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \uc81c\uc870\uc5c5\uacfc \uac19\uc774 \ud55c \uacf5\uc7a5\uc5d0\uc11c \uc5ec\ub7ec \ub808\uc2dc\ud53c\ub97c \ucc98\ub9ac\ud558\ub294 \uacbd\uc6b0 \ubb34\uc870\uac74 \uc7ac\ud559\uc2b5\uc744 \ud558\ub294 \uac83\uc774 \uc88b\uc9c0 \uc54a\uc744 \uc218 \ub3c4 \uc788\uc2b5\ub2c8\ub2e4. Blind Spot\uc774 \ub300\ud45c\uc801\uc778 \uc608\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \uc790\ub3d9\ucc28 \uc0dd\uc0b0 \ub77c\uc778\uc5d0\uc11c \ubaa8\ub378 A\uc5d0 \ub300\ud574\uc11c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uace0 \uc774\ub97c \uc774\uc6a9\ud574 \uc608\uce21\uc744 \uc9c4\ud589\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ub9cc\uc57d \uc804\ud600 \ub2e4\ub978 \ubaa8\ub378 B\uac00 \ub4e4\uc5b4\uc624\uba74 \uc774\uc804\uc5d0 \ubcf4\uc9c0 \ubabb\ud55c \ub370\uc774\ud130 \ud328\ud134\uc774\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub378 B\uc5d0 \ub300\ud574\uc11c \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ud559\uc2b5\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\uc81c \ubaa8\ub378 B\uc5d0 \ub300\ud574\uc11c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uc5c8\uae30 \ub54c\ubb38\uc5d0 \ubaa8\ub378\uc740 \uc608\uce21\uc744 \uc9c4\ud589\ud560 \uac83 \uc785\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9cc\uc57d \ub370\uc774\ud130\uac00 \ub2e4\uc2dc \ubaa8\ub378 A\ub85c \ubc14\ub010\ub2e4\uba74 \uc5b4\ub5bb\uac8c \ud560\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d Retraining \uaddc\uce59\ub9cc \uc788\ub2e4\uba74 \ub2e4\uc2dc \ubaa8\ub378 A\uc5d0 \ub300\ud574\uc11c \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\uac8c \ub429\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc774 \ucda9\ubd84\ud55c \uc131\ub2a5\uc744 \ubcf4\uc774\uae30 \uc704\ud574\uc11c\ub294 \ucda9\ubd84\ud55c \uc591\uc758 \ub370\uc774\ud130\uac00 \ubaa8\uc5ec\uc57c \ud569\ub2c8\ub2e4. Blind Spot\uc774\ub780 \uc774\ub807\uac8c \ub370\uc774\ud130\ub97c \ubaa8\uc73c\uae30 \uc704\ud574\uc11c \ubaa8\ub378\uc774 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uad6c\uac04\uc744 \ub9d0\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ub7ec\ud55c Blind Spot\uc744 \ud574\uacb0\ud558\ub294 \ubc29\ubc95\uc740 \uac04\ub2e8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc14\ub85c \ubaa8\ub378 A\uc5d0 \ub300\ud55c \ubaa8\ub378\uc774 \uacfc\uac70\uc5d0 \uc788\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uace0 \ub9cc\uc57d \uc788\uc5c8\ub2e4\uba74 \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc744 \ubc14\ub85c \ud559\uc2b5\ud558\uae30 \ubcf4\ub2e4\ub294 \uc774 \uc804 \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \ub2e4\uc2dc \uc608\uce21\uc744 \ud558\uba74 \uc774\ub7f0 Blind Spot\uc744 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ubaa8\ub378\uc640 \uac19\uc740 \uba54\ud0c0 \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \ubaa8\ub378\uc744 \uc790\ub3d9\uc73c\ub85c \ubcc0\ud658\ud574\uc8fc\ub294 \uac83\uc744 Auto Deploy\ub77c\uace0 \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc815\ub9ac\ud558\uc790\uba74 CT\ub97c \uc704\ud574\uc11c\ub294 Auto Retraining\uacfc Auto Deploy \ub450 \uac00\uc9c0 \uae30\ub2a5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub458\uc740 \uc11c\ub85c\uc758 \ub2e8\uc810\uc744 \ubcf4\uc644\ud574 \uacc4\uc18d\ud574\uc11c \ubaa8\ub378\uc758 \uc131\ub2a5\uc744 \uc720\uc9c0\ud560 \uc218 \uc788\uac8c \ud569\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"2\ub2e8\uacc4-cicd-\ud30c\uc774\ud504\ub77c\uc778\uc758-\uc790\ub3d9\ud654"},"2\ub2e8\uacc4: CI/CD \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc790\ub3d9\ud654"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"level-2",src:n(6730).Z,width:"1356",height:"862"})),(0,i.kt)("p",null,"2\ub2e8\uacc4\uc758 \uc81c\ubaa9\uc740 CI\uc640 CD\uc758 \uc790\ub3d9\ud654 \uc785\ub2c8\ub2e4. DevOps\uc5d0\uc11c\uc758 CI/CD\uc758 \ub300\uc0c1\uc740 \uc18c\uc2a4 \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 MLOps\ub294 \uc5b4\ub5a4 \uac83\uc774 CI/CD\uc758 \ub300\uc0c1\uc77c\uae4c\uc694?"),(0,i.kt)("p",null,"MLOps\uc758 CI/CD \ub300\uc0c1 \ub610\ud55c \uc18c\uc2a4 \ucf54\ub4dc\uc778 \uac83\uc740 \ub9de\uc9c0\ub9cc \uc870\uae08 \ub354 \uc5c4\ubc00\ud788 \uc815\uc758\ud558\uc790\uba74 \ud559\uc2b5 \ud30c\uc774\ud504\ub77c\uc778\uc774\ub77c\uace0 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub798\uc11c \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294\ub370 \uc788\uc5b4\uc11c \uc601\ud5a5\uc774 \uc788\ub294 \ubcc0\ud654\uc5d0 \ub300\ud574\uc11c \uc2e4\uc81c\ub85c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ud559\uc2b5\uc774 \ub418\ub294\uc9c0 (CI), \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\ub294\uc9c0 (CD)\ub97c \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub798\uc11c \ud559\uc2b5\uc744 \ud558\ub294 \ucf54\ub4dc\uc5d0 \uc9c1\uc811\uc801\uc778 \uc218\uc815\uc774 \uc788\ub294 \uacbd\uc6b0\uc5d0\ub294 CI/CD\ub97c \uc9c4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ucf54\ub4dc \uc678\uc5d0\ub3c4 \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\uc758 \ubc84\uc804, \ud30c\uc774\uc36c\uc758 \ubc84\uc804 \ubcc0\uacbd\ub3c4 CI/CD\uc758 \ub300\uc0c1\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uacbd\uc6b0 \uba38\uc2e0 \ub7ec\ub2dd\uc740 \uc624\ud508 \uc18c\uc2a4\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc624\ud508 \uc18c\uc2a4\ub294 \uadf8 \ud2b9\uc131\uc0c1 \ubc84\uc804\uc774 \ubc14\ub00c\uc5c8\uc744 \ub54c \ud568\uc218\uc758 \ub0b4\ubd80 \ub85c\uc9c1\uc774 \ubcc0\ud558\ub294 \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ubb3c\ub860 \uc5b4\ub290 \uc815\ub3c4 \ubc84\uc804\uc774 \uc62c\ub77c \uac08 \ub54c \uc774\uc640 \uad00\ub828\ub41c \uc54c\ub9bc\uc744 \uc8fc\uc9c0\ub9cc \ud55c \ubc88\uc5d0 \ubc84\uc804\uc774 \ud06c\uac8c \ubc14\ub010\ub2e4\uba74 \uc774\ub7ec\ud55c \ubcc0\ud654\ub97c \ubaa8\ub97c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\uc758 \ubc84\uc804\uc774 \ubcc0\ud558\ub294 \uacbd\uc6b0\uc5d0\ub3c4 CI/CD\ub97c \ud1b5\ud574 \uc815\uc0c1\uc801\uc73c\ub85c \ubaa8\ub378\uc774 \ud559\uc2b5, \ub3d9\uc791\ud558\ub294\uc9c0 \ud655\uc778\uc744 \ud574\uc57c \ud569\ub2c8\ub2e4."))}d.isMDXComponent=!0},5450:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-0-85b288b20c458e64055199fc50b1fe86.png"},3155:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-1-ct-a1ac90943bd5dd8e9af840cbcf51e985.png"},1972:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-1-pipeline-b2979b34d4804546ef4005cdf0f6311a.png"},6730:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/level-2-a4bb6a840eb99f33f3027217a5a04d8e.png"},2422:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/paper-2-b10bd2ae7445c3098c9f133131859466.png"},765:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/paper-67df32c03d5288f214c8cd189f85b2ea.png"},2412:(e,t,n)=>{n.d(t,{Z:()=>l});const l=n.p+"assets/images/toon-8ff2a8fb63a502a2b419a4cd459a7e41.png"}}]); \ No newline at end of file diff --git a/assets/js/317f9d80.800253e8.js b/assets/js/317f9d80.800253e8.js deleted file mode 100644 index 9aad316e..00000000 --- a/assets/js/317f9d80.800253e8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4119],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=p(a),k=r,d=u["".concat(s,".").concat(k)]||u[k]||c[k]||l;return a?n.createElement(d,o(o({ref:t},m),{},{components:a})):n.createElement(d,o({ref:t},m))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const l={title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",sidebar_position:5,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,i={unversionedId:"setup-kubernetes/install-kubernetes-module",id:"version-1.0/setup-kubernetes/install-kubernetes-module",title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes-module.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/install-kubernetes-module",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes-module",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes-module.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",sidebar_position:5,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4.2. Minikube",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube"},next:{title:"6. (Optional) Setup GPU",permalink:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu"}},s={},p=[{value:"Setup Kubernetes Modules",id:"setup-kubernetes-modules",level:2},{value:"Helm",id:"helm",level:2},{value:"Kustomize",id:"kustomize",level:2},{value:"CSI Plugin : Local Path Provisioner",id:"csi-plugin--local-path-provisioner",level:2}],m={toc:p},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"setup-kubernetes-modules"},"Setup Kubernetes Modules"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ubaa8\ub4c8\uc744 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc124\uce58\ud558\ub294 \uacfc\uc815\uc5d0 \uad00\ud574\uc11c \uc124\uba85\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc55e\uc73c\ub85c \uc18c\uac1c\ub418\ub294 \uacfc\uc815\uc740 \ubaa8\ub450 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc"),"\uc5d0\uc11c \uc9c4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"helm"},"Helm"),(0,r.kt)("p",null,"Helm\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud328\ud0a4\uc9c0\uc640 \uad00\ub828\ub41c \uc790\uc6d0\uc744 \ud55c \ubc88\uc5d0 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ub3c4\uc640\uc8fc\ub294 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc9d5 \ub3c4\uad6c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 Helm v3.7.1 \ubc84\uc804\uc744 \ub0b4\ub824\ubc1b\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For Linux amd64"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\ub978 OS\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/helm/helm/releases/tag/v3.7.1"},"\uacf5\uc2dd \ud648\ud398\uc774\uc9c0"),"\ub97c \ucc38\uace0\ud558\uc2dc\uc5b4, \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc758 OS\uc640 CPU\uc5d0 \ub9de\ub294 \ubc14\uc774\ub108\ub9ac\uc758 \ub2e4\uc6b4 \uacbd\ub85c\ub97c \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"helm\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc555\ucd95\uc744 \ud480\uace0, \ud30c\uc77c\uc758 \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -zxvf helm-v3.7.1-linux-amd64.tar.gz\nsudo mv linux-amd64/helm /usr/local/bin/helm\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm help\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"The Kubernetes package manager\n\nCommon actions for Helm:\n")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm search: search for charts")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm pull: download a chart to your local directory to view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm install: upload the chart to Kubernetes")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm list: list releases of charts"),(0,r.kt)("p",{parentName:"li"},"Environment variables:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_CACHE_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing cached files.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_CONFIG_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing Helm configuration.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_DATA_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing Helm data.")))),(0,r.kt)("p",{parentName:"li"},"..."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"")))),(0,r.kt)("h2",{id:"kustomize"},"Kustomize"),(0,r.kt)("p",null,"kustomize \ub610\ud55c \uc5ec\ub7ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ub9ac\uc18c\uc2a4\ub97c \ud55c \ubc88\uc5d0 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ub3c4\uc640\uc8fc\ub294 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc9d5 \ub3c4\uad6c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 kustomize v3.10.0 \ubc84\uc804\uc758 \ubc14\uc774\ub108\ub9ac\ub97c \ub2e4\uc6b4\ubc1b\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For Linux amd64"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.10.0/kustomize_v3.10.0_linux_amd64.tar.gz\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\ub978 OS\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv3.10.0"},"kustomize/v3.10.0"),"\uc5d0\uc11c \ud655\uc778 \ud6c4 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"kustomize \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc555\ucd95\uc744 \ud480\uace0, \ud30c\uc77c\uc758 \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -zxvf kustomize_v3.10.0_linux_amd64.tar.gz\nsudo mv kustomize /usr/local/bin/kustomize\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize help\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Manages declarative configuration of Kubernetes.\nSee https://sigs.k8s.io/kustomize\n\nUsage:\n kustomize [command]\n\nAvailable Commands:\n build Print configuration per contents of kustomization.yaml\n cfg Commands for reading and writing configuration.\n completion Generate shell completion script\n create Create a new kustomization in the current directory\n edit Edits a kustomization file\n fn Commands for running functions against configuration.\n...\n")))),(0,r.kt)("h2",{id:"csi-plugin--local-path-provisioner"},"CSI Plugin : Local Path Provisioner"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"CSI Plugin\uc740 kubernetes \ub0b4\uc758 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \ub2f4\ub2f9\ud558\ub294 \ubaa8\ub4c8\uc785\ub2c8\ub2e4. \ub2e8\uc77c \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 CSI Plugin\uc778 Local Path Provisioner\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.20/deploy/local-path-storage.yaml\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/local-path-storage created\nserviceaccount/local-path-provisioner-service-account created\nclusterrole.rbac.authorization.k8s.io/local-path-provisioner-role created\nclusterrolebinding.rbac.authorization.k8s.io/local-path-provisioner-bind created\ndeployment.apps/local-path-provisioner created\nstorageclass.storage.k8s.io/local-path created\nconfigmap/local-path-config created\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub610\ud55c, \ub2e4\uc74c\uacfc \uac19\uc774 local-path-storage namespace \uc5d0 provisioner pod\uc774 Running \uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n local-path-storage get pod\n")),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nlocal-path-provisioner-d744ccf98-xfcbk 1/1 Running 0 7m\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uc744 \uc218\ud589\ud558\uc5ec default storage class\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl patch storageclass local-path -p \'{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}\'\n')),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"storageclass.storage.k8s.io/local-path patched\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"default storage class\ub85c \uc124\uc815\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get sc\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc774 NAME\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"local-path (default)")," \uc778 storage class\uac00 \uc874\uc7ac\ud558\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nlocal-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 2h\n")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/317f9d80.d0357708.js b/assets/js/317f9d80.d0357708.js new file mode 100644 index 00000000..ebc4cb58 --- /dev/null +++ b/assets/js/317f9d80.d0357708.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4119],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},m=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=p(a),k=r,d=u["".concat(s,".").concat(k)]||u[k]||c[k]||l;return a?n.createElement(d,o(o({ref:t},m),{},{components:a})):n.createElement(d,o({ref:t},m))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const l={title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",sidebar_position:5,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,i={unversionedId:"setup-kubernetes/install-kubernetes-module",id:"version-1.0/setup-kubernetes/install-kubernetes-module",title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes-module.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/install-kubernetes-module",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes-module",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes-module.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"5. Install Kubernetes Modules",description:"Install Helm, Kustomize",sidebar_position:5,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4.2. Minikube",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube"},next:{title:"6. (Optional) Setup GPU",permalink:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu"}},s={},p=[{value:"Setup Kubernetes Modules",id:"setup-kubernetes-modules",level:2},{value:"Helm",id:"helm",level:2},{value:"Kustomize",id:"kustomize",level:2},{value:"CSI Plugin : Local Path Provisioner",id:"csi-plugin--local-path-provisioner",level:2}],m={toc:p},u="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"setup-kubernetes-modules"},"Setup Kubernetes Modules"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ubaa8\ub4c8\uc744 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc124\uce58\ud558\ub294 \uacfc\uc815\uc5d0 \uad00\ud574\uc11c \uc124\uba85\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc55e\uc73c\ub85c \uc18c\uac1c\ub418\ub294 \uacfc\uc815\uc740 \ubaa8\ub450 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc"),"\uc5d0\uc11c \uc9c4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"helm"},"Helm"),(0,r.kt)("p",null,"Helm\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud328\ud0a4\uc9c0\uc640 \uad00\ub828\ub41c \uc790\uc6d0\uc744 \ud55c \ubc88\uc5d0 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ub3c4\uc640\uc8fc\ub294 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc9d5 \ub3c4\uad6c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 Helm v3.7.1 \ubc84\uc804\uc744 \ub0b4\ub824\ubc1b\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For Linux amd64"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\ub978 OS\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/helm/helm/releases/tag/v3.7.1"},"\uacf5\uc2dd \ud648\ud398\uc774\uc9c0"),"\ub97c \ucc38\uace0\ud558\uc2dc\uc5b4, \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc758 OS\uc640 CPU\uc5d0 \ub9de\ub294 \ubc14\uc774\ub108\ub9ac\uc758 \ub2e4\uc6b4 \uacbd\ub85c\ub97c \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"helm\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc555\ucd95\uc744 \ud480\uace0, \ud30c\uc77c\uc758 \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -zxvf helm-v3.7.1-linux-amd64.tar.gz\nsudo mv linux-amd64/helm /usr/local/bin/helm\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm help\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"The Kubernetes package manager\n\nCommon actions for Helm:\n")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm search: search for charts")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm pull: download a chart to your local directory to view")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm install: upload the chart to Kubernetes")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"helm list: list releases of charts"),(0,r.kt)("p",{parentName:"li"},"Environment variables:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_CACHE_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing cached files.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_CONFIG_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing Helm configuration.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"$HELM_DATA_HOME"),(0,r.kt)("td",{parentName:"tr",align:null},"set an alternative location for storing Helm data.")))),(0,r.kt)("p",{parentName:"li"},"..."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"")))),(0,r.kt)("h2",{id:"kustomize"},"Kustomize"),(0,r.kt)("p",null,"kustomize \ub610\ud55c \uc5ec\ub7ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ub9ac\uc18c\uc2a4\ub97c \ud55c \ubc88\uc5d0 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ub3c4\uc640\uc8fc\ub294 \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc9d5 \ub3c4\uad6c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 kustomize v3.10.0 \ubc84\uc804\uc758 \ubc14\uc774\ub108\ub9ac\ub97c \ub2e4\uc6b4\ubc1b\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"For Linux amd64"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.10.0/kustomize_v3.10.0_linux_amd64.tar.gz\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\ub978 OS\ub294 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv3.10.0"},"kustomize/v3.10.0"),"\uc5d0\uc11c \ud655\uc778 \ud6c4 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"kustomize \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc555\ucd95\uc744 \ud480\uace0, \ud30c\uc77c\uc758 \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -zxvf kustomize_v3.10.0_linux_amd64.tar.gz\nsudo mv kustomize /usr/local/bin/kustomize\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize help\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Manages declarative configuration of Kubernetes.\nSee https://sigs.k8s.io/kustomize\n\nUsage:\n kustomize [command]\n\nAvailable Commands:\n build Print configuration per contents of kustomization.yaml\n cfg Commands for reading and writing configuration.\n completion Generate shell completion script\n create Create a new kustomization in the current directory\n edit Edits a kustomization file\n fn Commands for running functions against configuration.\n...\n")))),(0,r.kt)("h2",{id:"csi-plugin--local-path-provisioner"},"CSI Plugin : Local Path Provisioner"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"CSI Plugin\uc740 kubernetes \ub0b4\uc758 \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \ub2f4\ub2f9\ud558\ub294 \ubaa8\ub4c8\uc785\ub2c8\ub2e4. \ub2e8\uc77c \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 CSI Plugin\uc778 Local Path Provisioner\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.20/deploy/local-path-storage.yaml\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/local-path-storage created\nserviceaccount/local-path-provisioner-service-account created\nclusterrole.rbac.authorization.k8s.io/local-path-provisioner-role created\nclusterrolebinding.rbac.authorization.k8s.io/local-path-provisioner-bind created\ndeployment.apps/local-path-provisioner created\nstorageclass.storage.k8s.io/local-path created\nconfigmap/local-path-config created\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub610\ud55c, \ub2e4\uc74c\uacfc \uac19\uc774 local-path-storage namespace \uc5d0 provisioner pod\uc774 Running \uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n local-path-storage get pod\n")),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nlocal-path-provisioner-d744ccf98-xfcbk 1/1 Running 0 7m\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uc744 \uc218\ud589\ud558\uc5ec default storage class\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl patch storageclass local-path -p \'{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}\'\n')),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"storageclass.storage.k8s.io/local-path patched\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"default storage class\ub85c \uc124\uc815\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get sc\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc774 NAME\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"local-path (default)")," \uc778 storage class\uac00 \uc874\uc7ac\ud558\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nlocal-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 2h\n")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3546d36b.3ff9ee15.js b/assets/js/3546d36b.3ff9ee15.js new file mode 100644 index 00000000..84049c1f --- /dev/null +++ b/assets/js/3546d36b.3ff9ee15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8677],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=s(r),k=a,m=u["".concat(p,".").concat(k)]||u[k]||d[k]||l;return r?n.createElement(m,o(o({ref:t},c),{},{components:r})):n.createElement(m,o({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=k;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:a,o[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=r(7462),a=(r(7294),r(3905));const l={title:"Install Docker",description:"Install docker to start.",sidebar_position:1,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/install",id:"prerequisites/docker/install",title:"Install Docker",description:"Install docker to start.",source:"@site/docs/prerequisites/docker/install.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/install",permalink:"/docs/prerequisites/docker/install",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/install.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"Install Docker",description:"Install docker to start.",sidebar_position:1,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",next:{title:"Why Docker & Kubernetes ?",permalink:"/docs/prerequisites/docker/introduction"}},p={},s=[{value:"Docker",id:"docker",level:2},{value:"\uc124\uce58 \ud655\uc778",id:"\uc124\uce58-\ud655\uc778",level:2},{value:"\ub4e4\uc5b4\uac00\uae30 \uc55e\uc11c\uc11c..",id:"\ub4e4\uc5b4\uac00\uae30-\uc55e\uc11c\uc11c",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"docker"},"Docker"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc2e4\uc2b5\uc744 \uc704\ud574 \ub3c4\ucee4\ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc124\uce58\ub294 \uc5b4\ub5a4 OS\ub97c \uc0ac\uc6a9\ud558\ub294\uc9c0\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9d1\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uac01 \ud658\uacbd\uc5d0 \ub9de\ub294 \ub3c4\ucee4 \uc124\uce58\ub294 \uacf5\uc2dd \ud648\ud398\uc774\uc9c0\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/ubuntu/"},"ubuntu")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/desktop/mac/install/"},"mac")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/desktop/windows/install/"},"windows"))),(0,a.kt)("h2",{id:"\uc124\uce58-\ud655\uc778"},"\uc124\uce58 \ud655\uc778"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"docker run hello-world")," \uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294 OS, \ud130\ubbf8\ub110 \ud658\uacbd\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"OS"),(0,a.kt)("th",{parentName:"tr",align:null},"Docker Engine"),(0,a.kt)("th",{parentName:"tr",align:null},"Terminal"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"MacOS"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"zsh")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Windows"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"Powershell")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Windows"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"WSL2")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Ubuntu"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Engine"),(0,a.kt)("td",{parentName:"tr",align:null},"bash")))),(0,a.kt)("h2",{id:"\ub4e4\uc5b4\uac00\uae30-\uc55e\uc11c\uc11c"},"\ub4e4\uc5b4\uac00\uae30 \uc55e\uc11c\uc11c.."),(0,a.kt)("p",null,"MLOps\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \ub3c4\ucee4 \uc0ac\uc6a9\ubc95\uc744 \uc124\uba85\ud558\ub2c8 \ub9ce\uc740 \ube44\uc720\uc640 \uc608\uc2dc\uac00 MLOps \ucabd\uc73c\ub85c \uce58\uc911\ub418\uc5b4 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3546d36b.fa41182d.js b/assets/js/3546d36b.fa41182d.js deleted file mode 100644 index 6b54ff04..00000000 --- a/assets/js/3546d36b.fa41182d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8677],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=s(r),k=a,m=u["".concat(p,".").concat(k)]||u[k]||d[k]||l;return r?n.createElement(m,o(o({ref:t},c),{},{components:r})):n.createElement(m,o({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=k;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:a,o[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=r(7462),a=(r(7294),r(3905));const l={title:"Install Docker",description:"Install docker to start.",sidebar_position:1,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/install",id:"prerequisites/docker/install",title:"Install Docker",description:"Install docker to start.",source:"@site/docs/prerequisites/docker/install.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/install",permalink:"/docs/prerequisites/docker/install",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/install.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"Install Docker",description:"Install docker to start.",sidebar_position:1,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",next:{title:"Why Docker & Kubernetes ?",permalink:"/docs/prerequisites/docker/introduction"}},p={},s=[{value:"Docker",id:"docker",level:2},{value:"\uc124\uce58 \ud655\uc778",id:"\uc124\uce58-\ud655\uc778",level:2},{value:"\ub4e4\uc5b4\uac00\uae30 \uc55e\uc11c\uc11c..",id:"\ub4e4\uc5b4\uac00\uae30-\uc55e\uc11c\uc11c",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"docker"},"Docker"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc2e4\uc2b5\uc744 \uc704\ud574 \ub3c4\ucee4\ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc124\uce58\ub294 \uc5b4\ub5a4 OS\ub97c \uc0ac\uc6a9\ud558\ub294\uc9c0\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9d1\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uac01 \ud658\uacbd\uc5d0 \ub9de\ub294 \ub3c4\ucee4 \uc124\uce58\ub294 \uacf5\uc2dd \ud648\ud398\uc774\uc9c0\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/ubuntu/"},"ubuntu")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/desktop/mac/install/"},"mac")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/desktop/windows/install/"},"windows"))),(0,a.kt)("h2",{id:"\uc124\uce58-\ud655\uc778"},"\uc124\uce58 \ud655\uc778"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"docker run hello-world")," \uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294 OS, \ud130\ubbf8\ub110 \ud658\uacbd\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"OS"),(0,a.kt)("th",{parentName:"tr",align:null},"Docker Engine"),(0,a.kt)("th",{parentName:"tr",align:null},"Terminal"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"MacOS"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"zsh")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Windows"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"Powershell")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Windows"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"WSL2")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Ubuntu"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Engine"),(0,a.kt)("td",{parentName:"tr",align:null},"bash")))),(0,a.kt)("h2",{id:"\ub4e4\uc5b4\uac00\uae30-\uc55e\uc11c\uc11c"},"\ub4e4\uc5b4\uac00\uae30 \uc55e\uc11c\uc11c.."),(0,a.kt)("p",null,"MLOps\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \ub3c4\ucee4 \uc0ac\uc6a9\ubc95\uc744 \uc124\uba85\ud558\ub2c8 \ub9ce\uc740 \ube44\uc720\uc640 \uc608\uc2dc\uac00 MLOps \ucabd\uc73c\ub85c \uce58\uc911\ub418\uc5b4 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/36614f1b.012b668e.js b/assets/js/36614f1b.012b668e.js new file mode 100644 index 00000000..fc65a286 --- /dev/null +++ b/assets/js/36614f1b.012b668e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5865],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var a=r.createContext({}),s=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(a.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},v=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,a=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(n),v=i,f=d["".concat(a,".").concat(v)]||d[v]||u[v]||o;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=v;var p={};for(var a in t)hasOwnProperty.call(t,a)&&(p[a]=t[a]);p.originalType=e,p[d]="string"==typeof e?e:i,l[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var r=n(7462),i=(n(7294),n(3905));const o={title:"1. What is MLOps?",description:"Introduction to MLOps",sidebar_position:1,date:'2021-1./img to MLOps"',lastmod:new Date("2022-03-05T00:00:00.000Z"),contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"introduction/intro",id:"version-1.0/introduction/intro",title:"1. What is MLOps?",description:"Introduction to MLOps",source:"@site/versioned_docs/version-1.0/introduction/intro.md",sourceDirName:"introduction",slug:"/introduction/intro",permalink:"/docs/1.0/introduction/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/introduction/intro.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. What is MLOps?",description:"Introduction to MLOps",sidebar_position:1,date:'2021-1./img to MLOps"',lastmod:"2022-03-05T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",next:{title:"2. Levels of MLOps",permalink:"/docs/1.0/introduction/levels"}},a={},s=[{value:"Machine Learning Project",id:"machine-learning-project",level:2},{value:"Devops",id:"devops",level:2},{value:"DevOps",id:"devops-1",level:3},{value:"Silo Effect",id:"silo-effect",level:3},{value:"CI/CD",id:"cicd",level:3},{value:"MLOps",id:"mlops",level:2},{value:"1) ML+Ops",id:"1-mlops",level:3},{value:"Rule Based",id:"rule-based",level:4},{value:"Machine Learning",id:"machine-learning",level:4},{value:"Deep Learning",id:"deep-learning",level:4},{value:"2) ML -> Ops",id:"2-ml---ops",level:3},{value:"3) \uacb0\ub860",id:"3-\uacb0\ub860",level:3}],c={toc:s},d="wrapper";function u(e){let{components:t,...o}=e;return(0,i.kt)(d,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"machine-learning-project"},"Machine Learning Project"),(0,i.kt)("p",null,"2012\ub144 Alexnet \uc774\ud6c4 CV, NLP\ub97c \ube44\ub86f\ud558\uc5ec \ub370\uc774\ud130\uac00 \uc874\uc7ac\ud558\ub294 \ub3c4\uba54\uc778\uc774\ub77c\uba74 \uc5b4\ub514\uc11c\ub4e0 \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc744 \ub3c4\uc785\ud558\uace0\uc790 \ud558\uc600\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ub525\ub7ec\ub2dd\uacfc \uba38\uc2e0\ub7ec\ub2dd\uc740 AI\ub77c\ub294 \ub2e8\uc5b4\ub85c \ubb36\uc774\uba70 \ubd88\ub838\uace0 \ub9ce\uc740 \ub9e4\uccb4\uc5d0\uc11c AI\uc758 \ud544\uc694\uc131\uc744 \uc678\ucce4\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ubb34\uc218\ud788 \ub9ce\uc740 \uae30\uc5c5\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \uc218\ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\ub97c \uc9c4\ud589\ud558\uc600\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uadf8 \uacb0\uacfc\ub294 \uc5b4\ub5bb\uac8c \ub418\uc5c8\uc744\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uc5d8\ub9ac\uba3c\ud2b8 AI\uc758 \uc74c\ubcd1\ucc2c \ub3d9\ubd81\uc544 \uc9c0\uc5ed \ucd1d\uad04\ucc45\uc784\uc790\ub294 ",(0,i.kt)("a",{parentName:"p",href:"https://zdnet.co.kr/view/?no=20200611062002"},(0,i.kt)("em",{parentName:"a"},'"10\uac1c \uae30\uc5c5\uc5d0 AI \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud55c\ub2e4\uba74 \uadf8\uc911 9\uac1c\ub294 \ucee8\uc149\uac80\uc99d(POC)\ub9cc \ud558\ub2e4 \ub05d\ub09c\ub2e4"')),"\uace0 \ub9d0\ud588\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ucc98\ub7fc \ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc740 \uc774 \ubb38\uc81c\ub97c \ud480 \uc218 \uc788\uc744 \uac83 \uac19\ub2e4\ub294 \uac00\ub2a5\uc131\ub9cc\uc744 \ubcf4\uc5ec\uc8fc\uace0 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774 \uc2dc\uae30\ucbe4\uc5d0 ",(0,i.kt)("a",{parentName:"p",href:"https://www.aifutures.org/2021/ai-winter-is-coming/"},"AI\uc5d0 \ub2e4\uc2dc \uaca8\uc6b8"),"\uc774 \ub2e4\uac00\uc624\uace0 \uc788\ub2e4\ub294 \uc804\ub9dd\ub3c4 \ub098\uc624\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc65c \ud504\ub85c\uc81d\ud2b8 \ub300\ubd80\ubd84\uc774 \ucee8\uc149\uac80\uc99d(POC) \ub2e8\uacc4\uc5d0\uc11c \ub05d\ub0ac\uc744\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd \ucf54\ub4dc\ub9cc\uc73c\ub85c\ub294 \uc2e4\uc81c \uc11c\ube44\uc2a4\ub97c \uc6b4\uc601\ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc2e4\uc81c \uc11c\ube44\uc2a4 \ub2e8\uacc4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc758 \ucf54\ub4dc\uac00 \ucc28\uc9c0\ud558\ub294 \ubd80\ubd84\uc740 \uc0dd\uac01\ubcf4\ub2e4 \ud06c\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ub2e8\uc21c\ud788 \ubaa8\ub378\uc758 \uc131\ub2a5\ub9cc\uc774 \uc544\ub2cc \ub2e4\ub978 \ub9ce\uc740 \ubd80\ubd84\uc744 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uad6c\uae00\uc740 \uc774\ub7f0 \ubb38\uc81c\ub97c 2015\ub144 ",(0,i.kt)("a",{parentName:"p",href:"https://proceedings.neurips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf"},"Hidden Technical Debt in Machine Learning Systems"),"\uc5d0\uc11c \uc9c0\uc801\ud55c \ubc14 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \uc774 \ub17c\ubb38\uc774 \ub098\uc62c \ub2f9\uc2dc\uc5d0\ub294 \uc544\uc9c1 \ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \ub525\ub7ec\ub2dd\uacfc \uba38\uc2e0\ub7ec\ub2dd\uc758 \uac00\ub2a5\uc131\uc744 \uc785\uc99d\ud558\uae30 \ubc14\uc05c \uc2dc\uae30\uc600\uae30 \ub54c\ubb38\uc5d0, \ub17c\ubb38\uc774 \uc9c0\uc801\ud558\ub294 \ubc14\uc5d0 \ub9ce\uc740 \uc8fc\uc758\ub97c \uae30\uc6b8\uc774\uc9c0\ub294 \uc54a\uc558\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub9ac\uace0 \uba87 \ub144\uc774 \uc9c0\ub09c \ud6c4 \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc740 \uac00\ub2a5\uc131\uc744 \uc785\uc99d\ud574\ub0b4\uc5b4, \uc774\uc81c \uc0ac\ub78c\ub4e4\uc740 \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0 \uc801\uc6a9\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \uace7 \ub9ce\uc740 \uc0ac\ub78c\uc774 \uc2e4\uc81c \uc11c\ube44\uc2a4\ub294 \uc27d\uc9c0 \uc54a\ub2e4\ub294 \uac83\uc744 \uae68\ub2ec\uc558\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"devops"},"Devops"),(0,i.kt)("p",null,"MLOps\ub294 \uc774\uc804\uc5d0 \uc5c6\ub358 \uc0c8\ub85c\uc6b4 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c DevOps\ub77c\uace0 \ubd88\ub9ac\ub294 \uac1c\ubc1c \ubc29\ubc95\ub860\uc5d0\uc11c \ud30c\uc0dd\ub41c \ub2e8\uc5b4\uc785\ub2c8\ub2e4. \uadf8\ub807\uae30\uc5d0 DevOps\ub97c \uc774\ud574\ud55c\ub2e4\uba74 MLOps\ub97c \uc774\ud574\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"devops-1"},"DevOps"),(0,i.kt)("p",null,"DevOps\ub294 Development(\uac1c\ubc1c)\uc640 Operations(\uc6b4\uc601)\uc758 \ud569\uc131\uc5b4\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc758 \uac1c\ubc1c(Development)\uacfc \uc6b4\uc601(Operations)\uc758 \ud569\uc131\uc5b4\ub85c\uc11c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc790\uc640 \uc815\ubcf4\uae30\uc220 \uc804\ubb38\uac00 \uac04\uc758 \uc18c\ud1b5, \ud611\uc5c5 \ubc0f \ud1b5\ud569\uc744 \uac15\uc870\ud558\ub294 \uac1c\ubc1c \ud658\uacbd\uc774\ub098 \ubb38\ud654\ub97c \ub9d0\ud569\ub2c8\ub2e4.\nDevOps\uc758 \ubaa9\uc801\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \uc870\uc9c1\uacfc \uc6b4\uc601 \uc870\uc9c1\uac04\uc758 \uc0c1\ud638 \uc758\uc874\uc801 \ub300\uc751\uc774\uba70 \uc870\uc9c1\uc774 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uacfc \uc11c\ube44\uc2a4\ub97c \ube60\ub978 \uc2dc\uac04\uc5d0 \uac1c\ubc1c \ubc0f \ubc30\ud3ec\ud558\ub294 \uac83\uc744 \ubaa9\uc801\uc73c\ub85c \ud569\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"silo-effect"},"Silo Effect"),(0,i.kt)("p",null,"\uadf8\ub7fc \uac04\ub2e8\ud55c \uc0c1\ud669 \uc124\uba85\uc744 \ud1b5\ud574 DevOps\uac00 \uc65c \ud544\uc694\ud55c\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc11c\ube44\uc2a4 \ucd08\uae30\uc5d0\ub294 \uc9c0\uc6d0\ud558\ub294 \uae30\ub2a5\uc774 \ub9ce\uc9c0 \uc54a\uc73c\uba70 \ud300 \ub610\ub294 \ud68c\uc0ac\uc758 \uaddc\ubaa8\uac00 \uc791\uc2b5\ub2c8\ub2e4. \uc774\ub54c\uc5d0\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc758 \uad6c\ubd84\uc774 \uc5c6\uac70\ub098 \uc791\uc740 \uaddc\ubaa8\uc758 \ud300\uc73c\ub85c \uad6c\ubd84\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ud575\uc2ec\uc740 \uaddc\ubaa8\uac00 \uc791\ub2e4\ub294 \uac83\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub54c\ub294 \uc11c\ub85c \uc18c\ud1b5\ud560 \uc218 \uc788\ub294 \uc811\uc810\uc774 \ub9ce\uace0, \uc9d1\uc911\ud574\uc57c \ud558\ub294 \uc11c\ube44\uc2a4\uac00 \uc801\uae30 \ub54c\ubb38\uc5d0 \ube60\ub974\uac8c \uc11c\ube44\uc2a4\ub97c \uac1c\uc120\ud574 \ub098\uac08 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \uc11c\ube44\uc2a4\uc758 \uaddc\ubaa8\uac00 \ucee4\uc9c8\uc218\ub85d \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc740 \ubd84\ub9ac\ub418\uace0 \uc11c\ub85c \uc18c\ud1b5\ud560 \uc218 \uc788\ub294 \ucc44\ub110\uc758 \ubb3c\ub9ac\uc801\uc778 \ud55c\uacc4\uac00 \uc624\uac8c \ub429\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\ub978 \ud300\uacfc \ud568\uaed8\ud558\ub294 \ubbf8\ud305\uc5d0 \ud300\uc6d0 \uc804\uccb4\uac00 \ubbf8\ud305\uc744 \ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \uac01 \ud300\uc758 \ud300\uc7a5 \ud639\uc740 \uc18c\uc218\uc758 \uc2dc\ub2c8\uc5b4\ub9cc \ucc38\uc11d\ud558\uc5ec \ubbf8\ud305\uc744 \uc9c4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7f0 \uc18c\ud1b5 \ucc44\ub110\uc758 \ud55c\uacc4\ub294 \ud544\uc5f0\uc801\uc73c\ub85c \uc18c\ud1b5\uc758 \ubd80\uc7ac\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4. \uadf8\ub7ec\ub2e4 \ubcf4\uba74 \uac1c\ubc1c\ud300\uc740 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\ub4e4\uc744 \uacc4\uc18d\ud574\uc11c \uac1c\ubc1c\ud558\uace0 \uc6b4\uc601\ud300 \uc785\uc7a5\uc5d0\uc11c\ub294 \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \uae30\ub2a5\uc774 \ubc30\ud3ec \uc2dc \uc7a5\uc560\ub97c \uc77c\uc73c\ud0a4\ub294 \ub4f1 \uc5ec\ub7ec \ubb38\uc81c\uac00 \uc0dd\uae30\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc704\uc640 \uac19\uc740 \uc0c1\ud669\uc774 \ubc18\ubcf5\ub418\uba74 \uc870\uc9c1 \uc774\uae30\uc8fc\uc758\ub77c\uace0 \ubd88\ub9ac\ub294 \uc0ac\uc77c\ub85c \ud604\uc0c1\uc774 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"silo",src:n(745).Z,width:"892",height:"498"})),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\uc0ac\uc77c\ub85c(silo)\ub294 \uace1\uc2dd\uc774\ub098 \uc0ac\ub8cc\ub97c \uc800\uc7a5\ud558\ub294 \uad74\ub69d \ubaa8\uc591\uc758 \ucc3d\uace0\ub97c \uc758\ubbf8\ud55c\ub2e4. \uc0ac\uc77c\ub85c\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc874\uc7ac\ud558\uba70 \uc800\uc7a5\ub418\ub294 \ubb3c\ud488\uc774 \uc11c\ub85c \uc11e\uc774\uc9c0 \uc54a\ub3c4\ub85d \ucca0\uc800\ud788 \uad00\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc900\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc0ac\uc77c\ub85c \ud6a8\uacfc(Organizational Silos Effect)\ub294 \uc870\uc9c1 \ubd80\uc11c \uac04\uc5d0 \uc11c\ub85c \ud611\ub825\ud558\uc9c0 \uc54a\uace0 \ub0b4\ubd80 \uc774\uc775\ub9cc\uc744 \ucd94\uad6c\ud558\ub294 \ud604\uc0c1\uc744 \uc758\ubbf8\ud55c\ub2e4. \uc870\uc9c1 \ub0b4\uc5d0\uc11c \uac1c\ubcc4 \ubd80\uc11c\ub07c\ub9ac \uc11c\ub85c \ub2f4\uc744 \uc313\uace0 \uac01\uc790\uc758 \uc774\uc775\uc5d0\ub9cc \ubab0\ub450\ud558\ub294 \ubd80\uc11c \uc774\uae30\uc8fc\uc758\ub97c \uc77c\uceeb\ub294\ub2e4.")),(0,i.kt)("p",null,"\uc0ac\uc77c\ub85c \ud604\uc0c1\uc740 \uc11c\ube44\uc2a4 \ud488\uc9c8\uc758 \uc800\ud558\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc0ac\uc77c\ub85c \ud604\uc0c1\uc744 \ud574\uacb0\ud558\uae30 \uc704\ud574 \ub098\uc628 \uac83\uc774 \ubc14\ub85c DevOps\uc785\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"cicd"},"CI/CD"),(0,i.kt)("p",null,"Continuous Integration(CI) \uc640 Continuous Delivery (CD)\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc758 \uc7a5\ubcbd\uc744 \ud574\uc81c\ud558\uae30 \uc704\ud55c \uad6c\uccb4\uc801\uc778 \ubc29\ubc95\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cicd",src:n(3984).Z,width:"1400",height:"299"})),(0,i.kt)("p",null,"\uc774 \ubc29\ubc95\uc744 \ud1b5\ud574\uc11c \uac1c\ubc1c\ud300\uc5d0\uc11c\ub294 \uc6b4\uc601\ud300\uc758 \ud658\uacbd\uc744 \uc774\ud574\ud558\uace0 \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c \uc911\uc778 \uae30\ub2a5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\uae4c\uc9c0 \uc774\uc5b4\uc9c8 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc6b4\uc601\ud300\uc740 \uac80\uc99d\ub41c \uae30\ub2a5 \ub610\ub294 \uac1c\uc120\ub41c \uc81c\ud488\uc744 \ub354 \uc790\uc8fc \ubc30\ud3ec\ud574 \uace0\uac1d\uc758 \uc81c\ud488 \uacbd\ud5d8\uc744 \uc0c1\uc2b9\uc2dc\ud0b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \uc885\ud569\ud558\uc790\uba74 DevOps\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300 \uac04\uc758 \ubb38\uc81c\uac00 \uc788\uc5c8\uace0 \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ubc29\ubc95\ub860\uc785\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"mlops"},"MLOps"),(0,i.kt)("h3",{id:"1-mlops"},"1) ML+Ops"),(0,i.kt)("p",null,"MLOps\ub294 Machine Learning \uacfc Operations\uc758 \ud569\uc131\uc5b4\ub85c DevOps\uc5d0\uc11c Dev\uac00 ML\ub85c \ubc14\ub00c\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uc55e\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 DevOps\ub97c \ud1b5\ud574 MLOps\uac00 \ubb34\uc5c7\uc778\uc9c0 \uc9d0\uc791\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\u201cMLOps\ub294 \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300\uc758 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ubc29\ubc95\uc785\ub2c8\ub2e4.\u201d\n\uc774 \ub9d0\uc740 \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300 \uc0ac\uc774\uc5d0 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \uadf8\ub7fc \uc65c \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300\uc5d0\ub294 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc744\uae4c\uc694? \ub450 \ud300 \uac04\uc758 \ubb38\uc81c\ub97c \uc54c\uc544\ubcf4\uae30 \uc704\ud574\uc11c \ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc744 \uc608\uc2dc\ub85c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"rule-based"},"Rule Based"),(0,i.kt)("p",null,"\ucc98\uc74c \ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc744 \ub9cc\ub4dc\ub294 \uacbd\uc6b0 \uac04\ub2e8\ud55c \uaddc\uce59\uc744 \uae30\ubc18\uc73c\ub85c \uc544\uc774\ud15c\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c 1\uc8fc\uc77c\uac04 \ud310\ub9e4\ub7c9\uc774 \uac00\uc7a5 \ub9ce\uc740 \uc21c\uc11c\ub300\ub85c \ubcf4\uc5ec\uc8fc\ub294 \uc2dd\uc758 \ubc29\uc2dd\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc774 \ubc29\uc2dd\uc73c\ub85c \ubaa8\ub378\uc744 \uc815\ud55c\ub2e4\uba74 \ud2b9\ubcc4\ud55c \uc774\uc720\uac00 \uc5c6\ub294 \uc774\uc0c1 \ubaa8\ub378\uc758 \uc218\uc815\uc774 \ud544\uc694 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"machine-learning"},"Machine Learning"),(0,i.kt)("p",null,"\uc11c\ube44\uc2a4\uc758 \uaddc\ubaa8\uac00 \uc870\uae08 \ucee4\uc9c0\uace0 \ub85c\uadf8 \ub370\uc774\ud130\uac00 \ub9ce\uc774 \uc313\uc778\ub2e4\uba74 \uc774\ub97c \uc774\uc6a9\ud574 \uc544\uc774\ud15c \uae30\ubc18 \ud639\uc740 \uc720\uc800 \uae30\ubc18\uc758 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774\ub54c \ubaa8\ub378\uc740 \uc815\ud574\uc9c4 \uc8fc\uae30\uc5d0 \ub530\ub77c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5 \ud6c4 \uc7ac\ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"deep-learning"},"Deep Learning"),(0,i.kt)("p",null,"\uac1c\uc778\ud654 \ucd94\ucc9c\uc5d0 \ub300\ud55c \uc694\uad6c\uac00 \ub354 \ucee4\uc9c0\uace0 \ub354 \uc88b\uc740 \uc131\ub2a5\uc744 \ub0b4\ub294 \ubaa8\ub378\uc744 \ud544\uc694\ud574\uc9c8 \uacbd\uc6b0 \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \uc774\ub54c \ub9cc\ub4dc\ub294 \ubaa8\ub378\uc740 \uba38\uc2e0\ub7ec\ub2dd\uacfc \uac19\uc774 \uc815\ud574\uc9c4 \uc8fc\uae30\uc5d0 \ub530\ub77c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5 \ud6c4 \uc7ac\ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"graph",src:n(4204).Z,width:"752",height:"582"})),(0,i.kt)("p",null,"\uc704\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uc744 x\ucd95\uc744 \ubaa8\ub378\uc758 \ubcf5\uc7a1\ub3c4, y\ucd95\uc744 \ubaa8\ub378\uc758 \uc131\ub2a5\uc73c\ub85c \ub450\uace0 \uadf8\ub798\ud504\ub85c \ud45c\ud604\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf5\uc7a1\ub3c4\uac00 \uc62c\ub77c\uac08 \ub54c \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \uc62c\ub77c\uac00\ub294 \uc0c1\uc2b9 \uad00\uacc4\ub97c \uac16\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c \ub525\ub7ec\ub2dd\uc73c\ub85c \ub118\uc5b4\uac08 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc774 \uc0c8\ub85c \uc0dd\uae30\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ub9cc\uc57d \uad00\ub9ac\ud574\uc57c\ud560 \ubaa8\ub378\uc774 \uc801\ub2e4\uba74 \uc11c\ub85c \ud611\uc5c5\uc744 \ud1b5\ud574\uc11c \ucda9\ubd84\ud788 \ud574\uacb0\ud560 \uc218 \uc788\uc9c0\ub9cc \uac1c\ubc1c\ud574\uc57c \ud560 \ubaa8\ub378\uc774 \ub9ce\uc544\uc9c4\ub2e4\uba74 DevOps\uc758 \uacbd\uc6b0\uc640 \uac19\uc774 \uc0ac\uc77c\ub85c \ud604\uc0c1\uc774 \ub098\ud0c0\ub098\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"DevOps\uc758 \ubaa9\ud45c\uc640 \ub9de\ucdb0\uc11c \uc0dd\uac01\ud574\ubcf4\uba74 MLOps\uc758 \ubaa9\ud45c\ub294 \uac1c\ubc1c\ud55c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \uae30\ub2a5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 DevOps\uc758 \ubaa9\ud45c\uc600\ub2e4\uba74, MLOps\uc758 \ubaa9\ud45c\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"2-ml---ops"},"2) ML -> Ops"),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \ucd5c\uadfc \ub098\uc624\uace0 \uc788\ub294 MLOps \uad00\ub828 \uc81c\ud488\uacfc \uc124\uba85\uc744 \ubcf4\uba74 \uaf2d \uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ubaa9\ud45c\ub9cc\uc744 \ub300\uc0c1\uc73c\ub85c \ud558\uace0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uc5b4\ub5a4 \uacbd\uc6b0\uc5d0\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \ub9cc\ub4e0 \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \uc9c1\uc811 \uc6b4\uc601\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub824\uace0 \ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ub2c8\uc988\ub294 \ucd5c\uadfc \uba38\uc2e0\ub7ec\ub2dd \ud504\ub85c\uc81d\ud2b8\uac00 \uc9c4\ud589\ub418\ub294 \uacfc\uc815\uc5d0\uc11c \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc758 \uacbd\uc6b0 \uc6b4\uc601\uc5d0\uc11c \uac04\ub2e8\ud55c \ubaa8\ub378\ubd80\ud130 \uc2dc\uc791\ud574 \uc6b4\uc601\ud560 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc790\uc5f0\uc5b4, \uc774\ubbf8\uc9c0\uc640 \uac19\uc740 \uacf3\uc5d0\uc11c\ub294 \uaddc\uce59 \uae30\ubc18\uc758 \ubaa8\ub378\ubcf4\ub2e4\ub294 \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud574 \uc8fc\uc5b4\uc9c4 \ud0dc\uc2a4\ud06c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\ub294\uc9c0 \uac80\uc99d(POC)\ub97c \uc120\ud589\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uac80\uc99d\uc774 \ub05d\ub09c \ud504\ub85c\uc81d\ud2b8\ub294 \uc774\uc81c \uc11c\ube44\uc2a4\ub97c \uc704\ud55c \uc6b4\uc601 \ud658\uacbd\uc744 \uac1c\ubc1c\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uba38\uc2e0\ub7ec\ub2dd \ud300 \ub0b4\uc758 \uc790\uccb4 \uc5ed\ub7c9\uc73c\ub85c\ub294 \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc27d\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574\uc11c MLOps\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"3-\uacb0\ub860"},"3) \uacb0\ub860"),(0,i.kt)("p",null,"\uc694\uc57d\ud558\uc790\uba74 MLOps\ub294 \ub450 \uac00\uc9c0 \ubaa9\ud45c\uac00 \uc788\uc2b5\ub2c8\ub2e4.\n\uc55e\uc5d0\uc11c \uc124\uba85\ud55c MLOps\ub294 ML+Ops \ub85c \ub450 \ud300\uc758 \uc0dd\uc0b0\uc131 \ud5a5\uc0c1\uc744 \uc704\ud55c \uac83\uc774\uc600\uc2b5\ub2c8\ub2e4.\n\ubc18\uba74, \ub4a4\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uc740 ML->Ops \ub85c \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \uc9c1\uc811 \uc6b4\uc601\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 \uac83\uc744 \ub9d0\ud569\ub2c8\ub2e4."))}u.isMDXComponent=!0},3984:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cicd-775808741b1fa127eadb1fce55de3dab.png"},4204:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/graph-7329fb49fdf8c0b00d3c186386b5860e.png"},745:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/silo-3cd9f9bdf17c846f82fd0dde78e01052.png"}}]); \ No newline at end of file diff --git a/assets/js/36614f1b.d1c46624.js b/assets/js/36614f1b.d1c46624.js deleted file mode 100644 index 1d8c2b6c..00000000 --- a/assets/js/36614f1b.d1c46624.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5865],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var a=r.createContext({}),s=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(a.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},v=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,a=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(n),v=i,f=d["".concat(a,".").concat(v)]||d[v]||u[v]||o;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,l=new Array(o);l[0]=v;var p={};for(var a in t)hasOwnProperty.call(t,a)&&(p[a]=t[a]);p.originalType=e,p[d]="string"==typeof e?e:i,l[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var r=n(7462),i=(n(7294),n(3905));const o={title:"1. What is MLOps?",description:"Introduction to MLOps",sidebar_position:1,date:'2021-1./img to MLOps"',lastmod:new Date("2022-03-05T00:00:00.000Z"),contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"introduction/intro",id:"version-1.0/introduction/intro",title:"1. What is MLOps?",description:"Introduction to MLOps",source:"@site/versioned_docs/version-1.0/introduction/intro.md",sourceDirName:"introduction",slug:"/introduction/intro",permalink:"/docs/1.0/introduction/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/introduction/intro.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. What is MLOps?",description:"Introduction to MLOps",sidebar_position:1,date:'2021-1./img to MLOps"',lastmod:"2022-03-05T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",next:{title:"2. Levels of MLOps",permalink:"/docs/1.0/introduction/levels"}},a={},s=[{value:"Machine Learning Project",id:"machine-learning-project",level:2},{value:"Devops",id:"devops",level:2},{value:"DevOps",id:"devops-1",level:3},{value:"Silo Effect",id:"silo-effect",level:3},{value:"CI/CD",id:"cicd",level:3},{value:"MLOps",id:"mlops",level:2},{value:"1) ML+Ops",id:"1-mlops",level:3},{value:"Rule Based",id:"rule-based",level:4},{value:"Machine Learning",id:"machine-learning",level:4},{value:"Deep Learning",id:"deep-learning",level:4},{value:"2) ML -> Ops",id:"2-ml---ops",level:3},{value:"3) \uacb0\ub860",id:"3-\uacb0\ub860",level:3}],c={toc:s},d="wrapper";function u(e){let{components:t,...o}=e;return(0,i.kt)(d,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"machine-learning-project"},"Machine Learning Project"),(0,i.kt)("p",null,"2012\ub144 Alexnet \uc774\ud6c4 CV, NLP\ub97c \ube44\ub86f\ud558\uc5ec \ub370\uc774\ud130\uac00 \uc874\uc7ac\ud558\ub294 \ub3c4\uba54\uc778\uc774\ub77c\uba74 \uc5b4\ub514\uc11c\ub4e0 \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc744 \ub3c4\uc785\ud558\uace0\uc790 \ud558\uc600\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ub525\ub7ec\ub2dd\uacfc \uba38\uc2e0\ub7ec\ub2dd\uc740 AI\ub77c\ub294 \ub2e8\uc5b4\ub85c \ubb36\uc774\uba70 \ubd88\ub838\uace0 \ub9ce\uc740 \ub9e4\uccb4\uc5d0\uc11c AI\uc758 \ud544\uc694\uc131\uc744 \uc678\ucce4\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ubb34\uc218\ud788 \ub9ce\uc740 \uae30\uc5c5\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \uc218\ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\ub97c \uc9c4\ud589\ud558\uc600\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uadf8 \uacb0\uacfc\ub294 \uc5b4\ub5bb\uac8c \ub418\uc5c8\uc744\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uc5d8\ub9ac\uba3c\ud2b8 AI\uc758 \uc74c\ubcd1\ucc2c \ub3d9\ubd81\uc544 \uc9c0\uc5ed \ucd1d\uad04\ucc45\uc784\uc790\ub294 ",(0,i.kt)("a",{parentName:"p",href:"https://zdnet.co.kr/view/?no=20200611062002"},(0,i.kt)("em",{parentName:"a"},'"10\uac1c \uae30\uc5c5\uc5d0 AI \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud55c\ub2e4\uba74 \uadf8\uc911 9\uac1c\ub294 \ucee8\uc149\uac80\uc99d(POC)\ub9cc \ud558\ub2e4 \ub05d\ub09c\ub2e4"')),"\uace0 \ub9d0\ud588\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc774\ucc98\ub7fc \ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc740 \uc774 \ubb38\uc81c\ub97c \ud480 \uc218 \uc788\uc744 \uac83 \uac19\ub2e4\ub294 \uac00\ub2a5\uc131\ub9cc\uc744 \ubcf4\uc5ec\uc8fc\uace0 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \uc774 \uc2dc\uae30\ucbe4\uc5d0 ",(0,i.kt)("a",{parentName:"p",href:"https://www.aifutures.org/2021/ai-winter-is-coming/"},"AI\uc5d0 \ub2e4\uc2dc \uaca8\uc6b8"),"\uc774 \ub2e4\uac00\uc624\uace0 \uc788\ub2e4\ub294 \uc804\ub9dd\ub3c4 \ub098\uc624\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc65c \ud504\ub85c\uc81d\ud2b8 \ub300\ubd80\ubd84\uc774 \ucee8\uc149\uac80\uc99d(POC) \ub2e8\uacc4\uc5d0\uc11c \ub05d\ub0ac\uc744\uae4c\uc694?",(0,i.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd \ucf54\ub4dc\ub9cc\uc73c\ub85c\ub294 \uc2e4\uc81c \uc11c\ube44\uc2a4\ub97c \uc6b4\uc601\ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc2e4\uc81c \uc11c\ube44\uc2a4 \ub2e8\uacc4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc758 \ucf54\ub4dc\uac00 \ucc28\uc9c0\ud558\ub294 \ubd80\ubd84\uc740 \uc0dd\uac01\ubcf4\ub2e4 \ud06c\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ub2e8\uc21c\ud788 \ubaa8\ub378\uc758 \uc131\ub2a5\ub9cc\uc774 \uc544\ub2cc \ub2e4\ub978 \ub9ce\uc740 \ubd80\ubd84\uc744 \uace0\ub824\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uad6c\uae00\uc740 \uc774\ub7f0 \ubb38\uc81c\ub97c 2015\ub144 ",(0,i.kt)("a",{parentName:"p",href:"https://proceedings.neurips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf"},"Hidden Technical Debt in Machine Learning Systems"),"\uc5d0\uc11c \uc9c0\uc801\ud55c \ubc14 \uc788\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \uc774 \ub17c\ubb38\uc774 \ub098\uc62c \ub2f9\uc2dc\uc5d0\ub294 \uc544\uc9c1 \ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \ub525\ub7ec\ub2dd\uacfc \uba38\uc2e0\ub7ec\ub2dd\uc758 \uac00\ub2a5\uc131\uc744 \uc785\uc99d\ud558\uae30 \ubc14\uc05c \uc2dc\uae30\uc600\uae30 \ub54c\ubb38\uc5d0, \ub17c\ubb38\uc774 \uc9c0\uc801\ud558\ub294 \ubc14\uc5d0 \ub9ce\uc740 \uc8fc\uc758\ub97c \uae30\uc6b8\uc774\uc9c0\ub294 \uc54a\uc558\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uadf8\ub9ac\uace0 \uba87 \ub144\uc774 \uc9c0\ub09c \ud6c4 \uba38\uc2e0\ub7ec\ub2dd\uacfc \ub525\ub7ec\ub2dd\uc740 \uac00\ub2a5\uc131\uc744 \uc785\uc99d\ud574\ub0b4\uc5b4, \uc774\uc81c \uc0ac\ub78c\ub4e4\uc740 \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0 \uc801\uc6a9\ud558\uace0\uc790 \ud588\uc2b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \uace7 \ub9ce\uc740 \uc0ac\ub78c\uc774 \uc2e4\uc81c \uc11c\ube44\uc2a4\ub294 \uc27d\uc9c0 \uc54a\ub2e4\ub294 \uac83\uc744 \uae68\ub2ec\uc558\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"devops"},"Devops"),(0,i.kt)("p",null,"MLOps\ub294 \uc774\uc804\uc5d0 \uc5c6\ub358 \uc0c8\ub85c\uc6b4 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c DevOps\ub77c\uace0 \ubd88\ub9ac\ub294 \uac1c\ubc1c \ubc29\ubc95\ub860\uc5d0\uc11c \ud30c\uc0dd\ub41c \ub2e8\uc5b4\uc785\ub2c8\ub2e4. \uadf8\ub807\uae30\uc5d0 DevOps\ub97c \uc774\ud574\ud55c\ub2e4\uba74 MLOps\ub97c \uc774\ud574\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"devops-1"},"DevOps"),(0,i.kt)("p",null,"DevOps\ub294 Development(\uac1c\ubc1c)\uc640 Operations(\uc6b4\uc601)\uc758 \ud569\uc131\uc5b4\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc758 \uac1c\ubc1c(Development)\uacfc \uc6b4\uc601(Operations)\uc758 \ud569\uc131\uc5b4\ub85c\uc11c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc790\uc640 \uc815\ubcf4\uae30\uc220 \uc804\ubb38\uac00 \uac04\uc758 \uc18c\ud1b5, \ud611\uc5c5 \ubc0f \ud1b5\ud569\uc744 \uac15\uc870\ud558\ub294 \uac1c\ubc1c \ud658\uacbd\uc774\ub098 \ubb38\ud654\ub97c \ub9d0\ud569\ub2c8\ub2e4.\nDevOps\uc758 \ubaa9\uc801\uc740 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \uc870\uc9c1\uacfc \uc6b4\uc601 \uc870\uc9c1\uac04\uc758 \uc0c1\ud638 \uc758\uc874\uc801 \ub300\uc751\uc774\uba70 \uc870\uc9c1\uc774 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uacfc \uc11c\ube44\uc2a4\ub97c \ube60\ub978 \uc2dc\uac04\uc5d0 \uac1c\ubc1c \ubc0f \ubc30\ud3ec\ud558\ub294 \uac83\uc744 \ubaa9\uc801\uc73c\ub85c \ud569\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"silo-effect"},"Silo Effect"),(0,i.kt)("p",null,"\uadf8\ub7fc \uac04\ub2e8\ud55c \uc0c1\ud669 \uc124\uba85\uc744 \ud1b5\ud574 DevOps\uac00 \uc65c \ud544\uc694\ud55c\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc11c\ube44\uc2a4 \ucd08\uae30\uc5d0\ub294 \uc9c0\uc6d0\ud558\ub294 \uae30\ub2a5\uc774 \ub9ce\uc9c0 \uc54a\uc73c\uba70 \ud300 \ub610\ub294 \ud68c\uc0ac\uc758 \uaddc\ubaa8\uac00 \uc791\uc2b5\ub2c8\ub2e4. \uc774\ub54c\uc5d0\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc758 \uad6c\ubd84\uc774 \uc5c6\uac70\ub098 \uc791\uc740 \uaddc\ubaa8\uc758 \ud300\uc73c\ub85c \uad6c\ubd84\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ud575\uc2ec\uc740 \uaddc\ubaa8\uac00 \uc791\ub2e4\ub294 \uac83\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub54c\ub294 \uc11c\ub85c \uc18c\ud1b5\ud560 \uc218 \uc788\ub294 \uc811\uc810\uc774 \ub9ce\uace0, \uc9d1\uc911\ud574\uc57c \ud558\ub294 \uc11c\ube44\uc2a4\uac00 \uc801\uae30 \ub54c\ubb38\uc5d0 \ube60\ub974\uac8c \uc11c\ube44\uc2a4\ub97c \uac1c\uc120\ud574 \ub098\uac08 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \uc11c\ube44\uc2a4\uc758 \uaddc\ubaa8\uac00 \ucee4\uc9c8\uc218\ub85d \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc740 \ubd84\ub9ac\ub418\uace0 \uc11c\ub85c \uc18c\ud1b5\ud560 \uc218 \uc788\ub294 \ucc44\ub110\uc758 \ubb3c\ub9ac\uc801\uc778 \ud55c\uacc4\uac00 \uc624\uac8c \ub429\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\ub978 \ud300\uacfc \ud568\uaed8\ud558\ub294 \ubbf8\ud305\uc5d0 \ud300\uc6d0 \uc804\uccb4\uac00 \ubbf8\ud305\uc744 \ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \uac01 \ud300\uc758 \ud300\uc7a5 \ud639\uc740 \uc18c\uc218\uc758 \uc2dc\ub2c8\uc5b4\ub9cc \ucc38\uc11d\ud558\uc5ec \ubbf8\ud305\uc744 \uc9c4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7f0 \uc18c\ud1b5 \ucc44\ub110\uc758 \ud55c\uacc4\ub294 \ud544\uc5f0\uc801\uc73c\ub85c \uc18c\ud1b5\uc758 \ubd80\uc7ac\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4. \uadf8\ub7ec\ub2e4 \ubcf4\uba74 \uac1c\ubc1c\ud300\uc740 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\ub4e4\uc744 \uacc4\uc18d\ud574\uc11c \uac1c\ubc1c\ud558\uace0 \uc6b4\uc601\ud300 \uc785\uc7a5\uc5d0\uc11c\ub294 \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \uae30\ub2a5\uc774 \ubc30\ud3ec \uc2dc \uc7a5\uc560\ub97c \uc77c\uc73c\ud0a4\ub294 \ub4f1 \uc5ec\ub7ec \ubb38\uc81c\uac00 \uc0dd\uae30\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"\uc704\uc640 \uac19\uc740 \uc0c1\ud669\uc774 \ubc18\ubcf5\ub418\uba74 \uc870\uc9c1 \uc774\uae30\uc8fc\uc758\ub77c\uace0 \ubd88\ub9ac\ub294 \uc0ac\uc77c\ub85c \ud604\uc0c1\uc774 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"silo",src:n(745).Z,width:"892",height:"498"})),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\uc0ac\uc77c\ub85c(silo)\ub294 \uace1\uc2dd\uc774\ub098 \uc0ac\ub8cc\ub97c \uc800\uc7a5\ud558\ub294 \uad74\ub69d \ubaa8\uc591\uc758 \ucc3d\uace0\ub97c \uc758\ubbf8\ud55c\ub2e4. \uc0ac\uc77c\ub85c\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc874\uc7ac\ud558\uba70 \uc800\uc7a5\ub418\ub294 \ubb3c\ud488\uc774 \uc11c\ub85c \uc11e\uc774\uc9c0 \uc54a\ub3c4\ub85d \ucca0\uc800\ud788 \uad00\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc900\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc0ac\uc77c\ub85c \ud6a8\uacfc(Organizational Silos Effect)\ub294 \uc870\uc9c1 \ubd80\uc11c \uac04\uc5d0 \uc11c\ub85c \ud611\ub825\ud558\uc9c0 \uc54a\uace0 \ub0b4\ubd80 \uc774\uc775\ub9cc\uc744 \ucd94\uad6c\ud558\ub294 \ud604\uc0c1\uc744 \uc758\ubbf8\ud55c\ub2e4. \uc870\uc9c1 \ub0b4\uc5d0\uc11c \uac1c\ubcc4 \ubd80\uc11c\ub07c\ub9ac \uc11c\ub85c \ub2f4\uc744 \uc313\uace0 \uac01\uc790\uc758 \uc774\uc775\uc5d0\ub9cc \ubab0\ub450\ud558\ub294 \ubd80\uc11c \uc774\uae30\uc8fc\uc758\ub97c \uc77c\uceeb\ub294\ub2e4.")),(0,i.kt)("p",null,"\uc0ac\uc77c\ub85c \ud604\uc0c1\uc740 \uc11c\ube44\uc2a4 \ud488\uc9c8\uc758 \uc800\ud558\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc0ac\uc77c\ub85c \ud604\uc0c1\uc744 \ud574\uacb0\ud558\uae30 \uc704\ud574 \ub098\uc628 \uac83\uc774 \ubc14\ub85c DevOps\uc785\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"cicd"},"CI/CD"),(0,i.kt)("p",null,"Continuous Integration(CI) \uc640 Continuous Delivery (CD)\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300\uc758 \uc7a5\ubcbd\uc744 \ud574\uc81c\ud558\uae30 \uc704\ud55c \uad6c\uccb4\uc801\uc778 \ubc29\ubc95\uc785\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"cicd",src:n(3984).Z,width:"1400",height:"299"})),(0,i.kt)("p",null,"\uc774 \ubc29\ubc95\uc744 \ud1b5\ud574\uc11c \uac1c\ubc1c\ud300\uc5d0\uc11c\ub294 \uc6b4\uc601\ud300\uc758 \ud658\uacbd\uc744 \uc774\ud574\ud558\uace0 \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c \uc911\uc778 \uae30\ub2a5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\uae4c\uc9c0 \uc774\uc5b4\uc9c8 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4. \uc6b4\uc601\ud300\uc740 \uac80\uc99d\ub41c \uae30\ub2a5 \ub610\ub294 \uac1c\uc120\ub41c \uc81c\ud488\uc744 \ub354 \uc790\uc8fc \ubc30\ud3ec\ud574 \uace0\uac1d\uc758 \uc81c\ud488 \uacbd\ud5d8\uc744 \uc0c1\uc2b9\uc2dc\ud0b5\ub2c8\ub2e4.",(0,i.kt)("br",{parentName:"p"}),"\n","\uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \uc885\ud569\ud558\uc790\uba74 DevOps\ub294 \uac1c\ubc1c\ud300\uacfc \uc6b4\uc601\ud300 \uac04\uc758 \ubb38\uc81c\uac00 \uc788\uc5c8\uace0 \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ubc29\ubc95\ub860\uc785\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"mlops"},"MLOps"),(0,i.kt)("h3",{id:"1-mlops"},"1) ML+Ops"),(0,i.kt)("p",null,"MLOps\ub294 Machine Learning \uacfc Operations\uc758 \ud569\uc131\uc5b4\ub85c DevOps\uc5d0\uc11c Dev\uac00 ML\ub85c \ubc14\ub00c\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc81c \uc55e\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 DevOps\ub97c \ud1b5\ud574 MLOps\uac00 \ubb34\uc5c7\uc778\uc9c0 \uc9d0\uc791\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\u201cMLOps\ub294 \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300\uc758 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud55c \ubc29\ubc95\uc785\ub2c8\ub2e4.\u201d\n\uc774 \ub9d0\uc740 \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300 \uc0ac\uc774\uc5d0 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4. \uadf8\ub7fc \uc65c \uba38\uc2e0\ub7ec\ub2dd\ud300\uacfc \uc6b4\uc601\ud300\uc5d0\ub294 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc744\uae4c\uc694? \ub450 \ud300 \uac04\uc758 \ubb38\uc81c\ub97c \uc54c\uc544\ubcf4\uae30 \uc704\ud574\uc11c \ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc744 \uc608\uc2dc\ub85c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"rule-based"},"Rule Based"),(0,i.kt)("p",null,"\ucc98\uc74c \ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc744 \ub9cc\ub4dc\ub294 \uacbd\uc6b0 \uac04\ub2e8\ud55c \uaddc\uce59\uc744 \uae30\ubc18\uc73c\ub85c \uc544\uc774\ud15c\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c 1\uc8fc\uc77c\uac04 \ud310\ub9e4\ub7c9\uc774 \uac00\uc7a5 \ub9ce\uc740 \uc21c\uc11c\ub300\ub85c \ubcf4\uc5ec\uc8fc\ub294 \uc2dd\uc758 \ubc29\uc2dd\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4. \uc774 \ubc29\uc2dd\uc73c\ub85c \ubaa8\ub378\uc744 \uc815\ud55c\ub2e4\uba74 \ud2b9\ubcc4\ud55c \uc774\uc720\uac00 \uc5c6\ub294 \uc774\uc0c1 \ubaa8\ub378\uc758 \uc218\uc815\uc774 \ud544\uc694 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"machine-learning"},"Machine Learning"),(0,i.kt)("p",null,"\uc11c\ube44\uc2a4\uc758 \uaddc\ubaa8\uac00 \uc870\uae08 \ucee4\uc9c0\uace0 \ub85c\uadf8 \ub370\uc774\ud130\uac00 \ub9ce\uc774 \uc313\uc778\ub2e4\uba74 \uc774\ub97c \uc774\uc6a9\ud574 \uc544\uc774\ud15c \uae30\ubc18 \ud639\uc740 \uc720\uc800 \uae30\ubc18\uc758 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \uc774\ub54c \ubaa8\ub378\uc740 \uc815\ud574\uc9c4 \uc8fc\uae30\uc5d0 \ub530\ub77c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5 \ud6c4 \uc7ac\ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("h4",{id:"deep-learning"},"Deep Learning"),(0,i.kt)("p",null,"\uac1c\uc778\ud654 \ucd94\ucc9c\uc5d0 \ub300\ud55c \uc694\uad6c\uac00 \ub354 \ucee4\uc9c0\uace0 \ub354 \uc88b\uc740 \uc131\ub2a5\uc744 \ub0b4\ub294 \ubaa8\ub378\uc744 \ud544\uc694\ud574\uc9c8 \uacbd\uc6b0 \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud55c \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \uc774\ub54c \ub9cc\ub4dc\ub294 \ubaa8\ub378\uc740 \uba38\uc2e0\ub7ec\ub2dd\uacfc \uac19\uc774 \uc815\ud574\uc9c4 \uc8fc\uae30\uc5d0 \ub530\ub77c \ubaa8\ub378\uc744 \uc7ac\ud559\uc2b5 \ud6c4 \uc7ac\ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"graph",src:n(4204).Z,width:"752",height:"582"})),(0,i.kt)("p",null,"\uc704\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uc744 x\ucd95\uc744 \ubaa8\ub378\uc758 \ubcf5\uc7a1\ub3c4, y\ucd95\uc744 \ubaa8\ub378\uc758 \uc131\ub2a5\uc73c\ub85c \ub450\uace0 \uadf8\ub798\ud504\ub85c \ud45c\ud604\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf5\uc7a1\ub3c4\uac00 \uc62c\ub77c\uac08 \ub54c \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \uc62c\ub77c\uac00\ub294 \uc0c1\uc2b9 \uad00\uacc4\ub97c \uac16\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c \ub525\ub7ec\ub2dd\uc73c\ub85c \ub118\uc5b4\uac08 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc774 \uc0c8\ub85c \uc0dd\uae30\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ub9cc\uc57d \uad00\ub9ac\ud574\uc57c\ud560 \ubaa8\ub378\uc774 \uc801\ub2e4\uba74 \uc11c\ub85c \ud611\uc5c5\uc744 \ud1b5\ud574\uc11c \ucda9\ubd84\ud788 \ud574\uacb0\ud560 \uc218 \uc788\uc9c0\ub9cc \uac1c\ubc1c\ud574\uc57c \ud560 \ubaa8\ub378\uc774 \ub9ce\uc544\uc9c4\ub2e4\uba74 DevOps\uc758 \uacbd\uc6b0\uc640 \uac19\uc774 \uc0ac\uc77c\ub85c \ud604\uc0c1\uc774 \ub098\ud0c0\ub098\uac8c \ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,"DevOps\uc758 \ubaa9\ud45c\uc640 \ub9de\ucdb0\uc11c \uc0dd\uac01\ud574\ubcf4\uba74 MLOps\uc758 \ubaa9\ud45c\ub294 \uac1c\ubc1c\ud55c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud14c\uc2a4\ud2b8\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uac1c\ubc1c\ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \uae30\ub2a5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 DevOps\uc758 \ubaa9\ud45c\uc600\ub2e4\uba74, MLOps\uc758 \ubaa9\ud45c\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \uac1c\ubc1c\ud55c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ub420 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"2-ml---ops"},"2) ML -> Ops"),(0,i.kt)("p",null,"\ud558\uc9c0\ub9cc \ucd5c\uadfc \ub098\uc624\uace0 \uc788\ub294 MLOps \uad00\ub828 \uc81c\ud488\uacfc \uc124\uba85\uc744 \ubcf4\uba74 \uaf2d \uc55e\uc5d0\uc11c \uc124\uba85\ud55c \ubaa9\ud45c\ub9cc\uc744 \ub300\uc0c1\uc73c\ub85c \ud558\uace0 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uc5b4\ub5a4 \uacbd\uc6b0\uc5d0\ub294 \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \ub9cc\ub4e0 \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \uc9c1\uc811 \uc6b4\uc601\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub824\uace0 \ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ub2c8\uc988\ub294 \ucd5c\uadfc \uba38\uc2e0\ub7ec\ub2dd \ud504\ub85c\uc81d\ud2b8\uac00 \uc9c4\ud589\ub418\ub294 \uacfc\uc815\uc5d0\uc11c \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,"\ucd94\ucc9c\uc2dc\uc2a4\ud15c\uc758 \uacbd\uc6b0 \uc6b4\uc601\uc5d0\uc11c \uac04\ub2e8\ud55c \ubaa8\ub378\ubd80\ud130 \uc2dc\uc791\ud574 \uc6b4\uc601\ud560 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc790\uc5f0\uc5b4, \uc774\ubbf8\uc9c0\uc640 \uac19\uc740 \uacf3\uc5d0\uc11c\ub294 \uaddc\uce59 \uae30\ubc18\uc758 \ubaa8\ub378\ubcf4\ub2e4\ub294 \ub525\ub7ec\ub2dd\uc744 \uc774\uc6a9\ud574 \uc8fc\uc5b4\uc9c4 \ud0dc\uc2a4\ud06c\ub97c \ud574\uacb0\ud560 \uc218 \uc788\ub294\uc9c0 \uac80\uc99d(POC)\ub97c \uc120\ud589\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uac80\uc99d\uc774 \ub05d\ub09c \ud504\ub85c\uc81d\ud2b8\ub294 \uc774\uc81c \uc11c\ube44\uc2a4\ub97c \uc704\ud55c \uc6b4\uc601 \ud658\uacbd\uc744 \uac1c\ubc1c\ud558\uae30 \uc2dc\uc791\ud569\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uba38\uc2e0\ub7ec\ub2dd \ud300 \ub0b4\uc758 \uc790\uccb4 \uc5ed\ub7c9\uc73c\ub85c\ub294 \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc27d\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574\uc11c MLOps\uac00 \ud544\uc694\ud55c \uacbd\uc6b0\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"3-\uacb0\ub860"},"3) \uacb0\ub860"),(0,i.kt)("p",null,"\uc694\uc57d\ud558\uc790\uba74 MLOps\ub294 \ub450 \uac00\uc9c0 \ubaa9\ud45c\uac00 \uc788\uc2b5\ub2c8\ub2e4.\n\uc55e\uc5d0\uc11c \uc124\uba85\ud55c MLOps\ub294 ML+Ops \ub85c \ub450 \ud300\uc758 \uc0dd\uc0b0\uc131 \ud5a5\uc0c1\uc744 \uc704\ud55c \uac83\uc774\uc600\uc2b5\ub2c8\ub2e4.\n\ubc18\uba74, \ub4a4\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uc740 ML->Ops \ub85c \uba38\uc2e0\ub7ec\ub2dd \ud300\uc5d0\uc11c \uc9c1\uc811 \uc6b4\uc601\uc744 \ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 \uac83\uc744 \ub9d0\ud569\ub2c8\ub2e4."))}u.isMDXComponent=!0},3984:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cicd-775808741b1fa127eadb1fce55de3dab.png"},4204:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/graph-7329fb49fdf8c0b00d3c186386b5860e.png"},745:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/silo-3cd9f9bdf17c846f82fd0dde78e01052.png"}}]); \ No newline at end of file diff --git a/assets/js/36fd762b.9e9ebd82.js b/assets/js/36fd762b.9e9ebd82.js deleted file mode 100644 index 2d9f0f98..00000000 --- a/assets/js/36fd762b.9e9ebd82.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6052],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),o=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,m=c["".concat(u,".").concat(d)]||c[d]||k[d]||s;return n?r.createElement(m,l(l({ref:t},p),{},{components:n})):r.createElement(m,l({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,l=new Array(s);l[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[c]="string"==typeof e?e:a,l[1]=i;for(var o=2;o{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>s,metadata:()=>i,toc:()=>o});var r=n(7462),a=(n(7294),n(3905));const s={title:"4.1. K3s",description:"",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),draft:!1,weight:221,contributors:["Jongseob Jeon"],menu:{docs:'parent:../setup-kubernetes"'},images:[]},l=void 0,i={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-k3s",id:"version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",title:"4.1. K3s",description:"",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"4.1. K3s",description:"",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",draft:!1,weight:221,contributors:["Jongseob Jeon"],menu:{docs:'parent:../setup-kubernetes"'},images:[]},sidebar:"tutorialSidebar",previous:{title:"3. Install Prerequisite",permalink:"/docs/1.0/setup-kubernetes/install-prerequisite"},next:{title:"4.3. Kubeadm",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm"}},u={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"6. References",id:"6-references",level:2}],p={toc:o},c="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"k3s \uc5d0\uc11c\ub294 \uae30\ubcf8\uac12\uc73c\ub85c containerd\ub97c \ubc31\uc5d4\ub4dc\ub85c \uc774\uc6a9\ud574 \uc124\uce58\ud569\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc \uc800\ud76c\ub294 GPU\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c docker\ub97c \ubc31\uc5d4\ub4dc\ub85c \uc0ac\uc6a9\ud574\uc57c \ud558\ubbc0\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"--docker")," \uc635\uc158\uc744 \ud1b5\ud574 \ubc31\uc5d4\ub4dc\ub97c docker\ub85c \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.21.7+k3s1 sh -s - server --disable traefik --disable servicelb --disable local-storage --docker\n")),(0,a.kt)("p",null,"k3s\ub97c \uc124\uce58 \ud6c4 k3s config\ub97c \ud655\uc778\ud569\ub2c8\ub2e4"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo cat /etc/rancher/k3s/k3s.yaml\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud56d\ubaa9\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","(\ubcf4\uc548 \ubb38\uc81c\uc640 \uad00\ub828\ub41c \ud0a4\ub4e4\uc740 <...>\ub85c \uac00\ub838\uc2b5\ub2c8\ub2e4.)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data:\n <...>\n server: https://127.0.0.1:6443\n name: default\ncontexts:\n- context:\n cluster: default\n user: default\n name: default\ncurrent-context: default\nkind: Config\npreferences: {}\nusers:\n- name: default\n user:\n client-certificate-data:\n <...>\n client-key-data:\n <...>\n")),(0,a.kt)("h2",{id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5"},"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5"),(0,a.kt)("p",null,"k3s config\ub97c \ud074\ub7ec\uc2a4\ud130\uc758 kubeconfig\ub85c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c \ubcf5\uc0ac\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir .kube\nsudo cp /etc/rancher/k3s/k3s.yaml .kube/config\n")),(0,a.kt)("p",null,"\ubcf5\uc0ac\ub41c config \ud30c\uc77c\uc5d0 user\uac00 \uc811\uadfc\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc744 \uc90d\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo chown $USER:$USER .kube/config\n")),(0,a.kt)("h2",{id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5"},"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5"),(0,a.kt)("p",null,"\uc774\uc81c \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc124\uc815\ud55c kubeconfig\ub97c \ub85c\uceec\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.\n\ub85c\uceec\uc5d0\uc11c\ub294 \uacbd\ub85c\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.kube/config"),"\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucc98\uc74c \ubcf5\uc0ac\ud55c config \ud30c\uc77c\uc5d0\ub294 server ip\uac00 ",(0,a.kt)("inlineCode",{parentName:"p"},"https://127.0.0.1:6443")," \uc73c\ub85c \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774 \uac12\uc744 \ud074\ub7ec\uc2a4\ud130\uc758 ip\uc5d0 \ub9de\uac8c \uc218\uc815\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","(\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud074\ub7ec\uc2a4\ud130\uc758 ip\uc5d0 \ub9de\ucdb0\uc11c ",(0,a.kt)("inlineCode",{parentName:"p"},"https://192.168.0.19:6443")," \uc73c\ub85c \uc218\uc815\ud588\uc2b5\ub2c8\ub2e4.)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data:\n <...>\n server: https://192.168.0.19:6443\n name: default\ncontexts:\n- context:\n cluster: default\n user: default\n name: default\ncurrent-context: default\nkind: Config\npreferences: {}\nusers:\n- name: default\n user:\n client-certificate-data:\n <...>\n client-key-data:\n <...>\n")),(0,a.kt)("h2",{id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58"},"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-kubernetes-module"},"Setup Kubernetes Modules"),"\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"helm"),(0,a.kt)("li",{parentName:"ul"},"kustomize"),(0,a.kt)("li",{parentName:"ul"},"CSI plugin"),(0,a.kt)("li",{parentName:"ul"},"[Optional]"," nvidia-docker, nvidia-device-plugin")),(0,a.kt)("h2",{id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,a.kt)("p",null,"\ucd5c\uc885\uc801\uc73c\ub85c node\uac00 Ready \uc778\uc9c0, OS, Docker, Kubernetes \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get nodes -o wide\n")),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nubuntu Ready control-plane,master 11m v1.21.7+k3s1 192.168.0.19 Ubuntu 20.04.3 LTS 5.4.0-91-generic docker://20.10.11\n")),(0,a.kt)("h2",{id:"6-references"},"6. References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://rancher.com/docs/k3s/latest/en/installation/install-options/"},"https://rancher.com/docs/k3s/latest/en/installation/install-options/"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/36fd762b.f68434bd.js b/assets/js/36fd762b.f68434bd.js new file mode 100644 index 00000000..5984cf49 --- /dev/null +++ b/assets/js/36fd762b.f68434bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6052],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),o=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,m=c["".concat(u,".").concat(d)]||c[d]||k[d]||s;return n?r.createElement(m,l(l({ref:t},p),{},{components:n})):r.createElement(m,l({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,l=new Array(s);l[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[c]="string"==typeof e?e:a,l[1]=i;for(var o=2;o{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>s,metadata:()=>i,toc:()=>o});var r=n(7462),a=(n(7294),n(3905));const s={title:"4.1. K3s",description:"",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),draft:!1,weight:221,contributors:["Jongseob Jeon"],menu:{docs:'parent:../setup-kubernetes"'},images:[]},l=void 0,i={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-k3s",id:"version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",title:"4.1. K3s",description:"",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"4.1. K3s",description:"",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",draft:!1,weight:221,contributors:["Jongseob Jeon"],menu:{docs:'parent:../setup-kubernetes"'},images:[]},sidebar:"tutorialSidebar",previous:{title:"3. Install Prerequisite",permalink:"/docs/1.0/setup-kubernetes/install-prerequisite"},next:{title:"4.3. Kubeadm",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm"}},u={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"6. References",id:"6-references",level:2}],p={toc:o},c="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"k3s \uc5d0\uc11c\ub294 \uae30\ubcf8\uac12\uc73c\ub85c containerd\ub97c \ubc31\uc5d4\ub4dc\ub85c \uc774\uc6a9\ud574 \uc124\uce58\ud569\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc \uc800\ud76c\ub294 GPU\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c docker\ub97c \ubc31\uc5d4\ub4dc\ub85c \uc0ac\uc6a9\ud574\uc57c \ud558\ubbc0\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"--docker")," \uc635\uc158\uc744 \ud1b5\ud574 \ubc31\uc5d4\ub4dc\ub97c docker\ub85c \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.21.7+k3s1 sh -s - server --disable traefik --disable servicelb --disable local-storage --docker\n")),(0,a.kt)("p",null,"k3s\ub97c \uc124\uce58 \ud6c4 k3s config\ub97c \ud655\uc778\ud569\ub2c8\ub2e4"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo cat /etc/rancher/k3s/k3s.yaml\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud56d\ubaa9\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","(\ubcf4\uc548 \ubb38\uc81c\uc640 \uad00\ub828\ub41c \ud0a4\ub4e4\uc740 <...>\ub85c \uac00\ub838\uc2b5\ub2c8\ub2e4.)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data:\n <...>\n server: https://127.0.0.1:6443\n name: default\ncontexts:\n- context:\n cluster: default\n user: default\n name: default\ncurrent-context: default\nkind: Config\npreferences: {}\nusers:\n- name: default\n user:\n client-certificate-data:\n <...>\n client-key-data:\n <...>\n")),(0,a.kt)("h2",{id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5"},"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5"),(0,a.kt)("p",null,"k3s config\ub97c \ud074\ub7ec\uc2a4\ud130\uc758 kubeconfig\ub85c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c \ubcf5\uc0ac\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir .kube\nsudo cp /etc/rancher/k3s/k3s.yaml .kube/config\n")),(0,a.kt)("p",null,"\ubcf5\uc0ac\ub41c config \ud30c\uc77c\uc5d0 user\uac00 \uc811\uadfc\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc744 \uc90d\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo chown $USER:$USER .kube/config\n")),(0,a.kt)("h2",{id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5"},"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5"),(0,a.kt)("p",null,"\uc774\uc81c \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc124\uc815\ud55c kubeconfig\ub97c \ub85c\uceec\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.\n\ub85c\uceec\uc5d0\uc11c\ub294 \uacbd\ub85c\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.kube/config"),"\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucc98\uc74c \ubcf5\uc0ac\ud55c config \ud30c\uc77c\uc5d0\ub294 server ip\uac00 ",(0,a.kt)("inlineCode",{parentName:"p"},"https://127.0.0.1:6443")," \uc73c\ub85c \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774 \uac12\uc744 \ud074\ub7ec\uc2a4\ud130\uc758 ip\uc5d0 \ub9de\uac8c \uc218\uc815\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","(\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud074\ub7ec\uc2a4\ud130\uc758 ip\uc5d0 \ub9de\ucdb0\uc11c ",(0,a.kt)("inlineCode",{parentName:"p"},"https://192.168.0.19:6443")," \uc73c\ub85c \uc218\uc815\ud588\uc2b5\ub2c8\ub2e4.)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data:\n <...>\n server: https://192.168.0.19:6443\n name: default\ncontexts:\n- context:\n cluster: default\n user: default\n name: default\ncurrent-context: default\nkind: Config\npreferences: {}\nusers:\n- name: default\n user:\n client-certificate-data:\n <...>\n client-key-data:\n <...>\n")),(0,a.kt)("h2",{id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58"},"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-kubernetes-module"},"Setup Kubernetes Modules"),"\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"helm"),(0,a.kt)("li",{parentName:"ul"},"kustomize"),(0,a.kt)("li",{parentName:"ul"},"CSI plugin"),(0,a.kt)("li",{parentName:"ul"},"[Optional]"," nvidia-docker, nvidia-device-plugin")),(0,a.kt)("h2",{id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,a.kt)("p",null,"\ucd5c\uc885\uc801\uc73c\ub85c node\uac00 Ready \uc778\uc9c0, OS, Docker, Kubernetes \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get nodes -o wide\n")),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nubuntu Ready control-plane,master 11m v1.21.7+k3s1 192.168.0.19 Ubuntu 20.04.3 LTS 5.4.0-91-generic docker://20.10.11\n")),(0,a.kt)("h2",{id:"6-references"},"6. References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://rancher.com/docs/k3s/latest/en/installation/install-options/"},"https://rancher.com/docs/k3s/latest/en/installation/install-options/"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/38642333.225fa8fa.js b/assets/js/38642333.225fa8fa.js new file mode 100644 index 00000000..9f6d7298 --- /dev/null +++ b/assets/js/38642333.225fa8fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6643],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=p(t),u=l,g=m["".concat(i,".").concat(u)]||m[u]||c[u]||r;return t?a.createElement(g,s(s({ref:n},d),{},{components:t})):a.createElement(g,s({ref:n},d))}));function g(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var r=t.length,s=new Array(r);s[0]=u;var o={};for(var i in n)hasOwnProperty.call(n,i)&&(o[i]=n[i]);o.originalType=e,o[m]="string"==typeof e?e:l,s[1]=o;for(var p=2;p{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const r={title:"2. Deploy SeldonDeployment",description:"",sidebar_position:2,date:new Date("2021-12-22T00:00:00.000Z"),lastmod:new Date("2021-12-22T00:00:00.000Z"),contributors:["Youngcheol Jang","SeungTae Kim"]},s=void 0,o={unversionedId:"api-deployment/seldon-iris",id:"version-1.0/api-deployment/seldon-iris",title:"2. Deploy SeldonDeployment",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-iris.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-iris",permalink:"/docs/1.0/api-deployment/seldon-iris",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-iris.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Deploy SeldonDeployment",description:"",sidebar_position:2,date:"2021-12-22T00:00:00.000Z",lastmod:"2021-12-22T00:00:00.000Z",contributors:["Youngcheol Jang","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. What is API Deployment?",permalink:"/docs/1.0/api-deployment/what-is-api-deployment"},next:{title:"3. Seldon Monitoring",permalink:"/docs/1.0/api-deployment/seldon-pg"}},i={},p=[{value:"SeldonDeployment\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud558\uae30",id:"seldondeployment\ub97c-\ud1b5\ud574-\ubc30\ud3ec\ud558\uae30",level:2},{value:"1. Prerequisites",id:"1-prerequisites",level:3},{value:"2. \uc2a4\ud399 \uc815\uc758",id:"2-\uc2a4\ud399-\uc815\uc758",level:3},{value:"Ingress URL",id:"ingress-url",level:2},{value:"NODE_IP / NODE_PORT",id:"node_ip--node_port",level:3},{value:"namespace / seldon-deployment-name",id:"namespace--seldon-deployment-name",level:3},{value:"method-name",id:"method-name",level:3},{value:"Using Swagger",id:"using-swagger",level:2},{value:"1. Swagger \uc811\uc18d",id:"1-swagger-\uc811\uc18d",level:3},{value:"2. Swagger Predictions \uba54\ub274 \uc120\ud0dd",id:"2-swagger-predictions-\uba54\ub274-\uc120\ud0dd",level:3},{value:"3. Try it out \uc120\ud0dd",id:"3-try-it-out-\uc120\ud0dd",level:3},{value:"4. Request body\uc5d0 data \uc785\ub825",id:"4-request-body\uc5d0-data-\uc785\ub825",level:3},{value:"5. \ucd94\ub860 \uacb0\uacfc \ud655\uc778",id:"5-\ucd94\ub860-\uacb0\uacfc-\ud655\uc778",level:3},{value:"Using CLI",id:"using-cli",level:2}],d={toc:p},m="wrapper";function c(e){let{components:n,...r}=e;return(0,l.kt)(m,(0,a.Z)({},d,r,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"seldondeployment\ub97c-\ud1b5\ud574-\ubc30\ud3ec\ud558\uae30"},"SeldonDeployment\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud558\uae30"),(0,l.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc788\uc744 \ub54c SeldonDeployment\ub97c \ud1b5\ud574 API Deployment\ub97c \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\nSeldonDeployment\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4(Kubernetes)\uc5d0 \ubaa8\ub378\uc744 REST/gRPC \uc11c\ubc84\uc758 \ud615\ud0dc\ub85c \ubc30\ud3ec\ud558\uae30 \uc704\ud574 \uc815\uc758\ub41c CRD(CustomResourceDefinition)\uc785\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-prerequisites"},"1. Prerequisites"),(0,l.kt)("p",null,"SeldonDeployment \uad00\ub828\ub41c \uc2e4\uc2b5\uc740 seldon-deploy\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ub124\uc784\uc2a4\ud398\uc774\uc2a4(namespace)\uc5d0\uc11c \uc9c4\ud589\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub97c \uc0dd\uc131\ud55c \ub4a4, seldon-deploy\ub97c \ud604\uc7ac \ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create namespace seldon-deploy\nkubectl config set-context --current --namespace=seldon-deploy\n")),(0,l.kt)("h3",{id:"2-\uc2a4\ud399-\uc815\uc758"},"2. \uc2a4\ud399 \uc815\uc758"),(0,l.kt)("p",null,"SeldonDeployment\ub97c \ubc30\ud3ec\ud558\uae30 \uc704\ud55c yaml \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\n\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uacf5\uac1c\ub41c iris model\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\uc774 iris model\uc740 sklearn \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud1b5\ud574 \ud559\uc2b5\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 SKLEARN_SERVER\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"cat < iris-sdep.yaml\napiVersion: machinelearning.seldon.io/v1alpha2\nkind: SeldonDeployment\nmetadata:\n name: sklearn\n namespace: seldon-deploy\nspec:\n name: iris\n predictors:\n - graph:\n children: []\n implementation: SKLEARN_SERVER\n modelUri: gs://seldon-models/v1.12.0-dev/sklearn/iris\n name: classifier\n name: default\n replicas: 1\nEOF\n")),(0,l.kt)("p",null,"yaml \ud30c\uc77c\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f iris-sdep.yaml\n")),(0,l.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\uac00 \ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pods --selector seldon-app=sklearn-default -n seldon-deploy\n")),(0,l.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nsklearn-default-0-classifier-5fdfd7bb77-ls9tr 2/2 Running 0 5m\n")),(0,l.kt)("h2",{id:"ingress-url"},"Ingress URL"),(0,l.kt)("p",null,"\uc774\uc81c \ubc30\ud3ec\ub41c \ubaa8\ub378\uc5d0 \ucd94\ub860 \uc694\uccad(predict request)\ub97c \ubcf4\ub0b4\uc11c \ucd94\ub860 \uacb0\uad0f\uac12\uc744 \ubc1b\uc544\uc635\ub2c8\ub2e4.\n\ubc30\ud3ec\ub41c API\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uaddc\uce59\uc73c\ub85c \uc0dd\uc131\ub429\ub2c8\ub2e4.\n",(0,l.kt)("inlineCode",{parentName:"p"},"http://{NODE_IP}:{NODE_PORT}/seldon/{namespace}/{seldon-deployment-name}/api/v1.0/{method-name}/")),(0,l.kt)("h3",{id:"node_ip--node_port"},"NODE_IP / NODE_PORT"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-seldon"},"Seldon Core \uc124\uce58 \uc2dc, Ambassador\ub97c Ingress Controller\ub85c \uc124\uc815\ud558\uc600\uc73c\ubbc0\ub85c"),", SeldonDeployment\ub85c \uc0dd\uc131\ub41c API \uc11c\ubc84\ub294 \ubaa8\ub450 Ambassador\uc758 Ingress gateway\ub97c \ud1b5\ud574 \uc694\uccad\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub530\ub77c\uc11c \uc6b0\uc120 Ambassador Ingress Gateway\uc758 url\uc744 \ud658\uacbd \ubcc0\uc218\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'export NODE_IP=$(kubectl get nodes -o jsonpath=\'{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }\')\nexport NODE_PORT=$(kubectl get service ambassador -n seldon-system -o jsonpath="{.spec.ports[0].nodePort}")\n')),(0,l.kt)("p",null,"\uc124\uc815\ub41c url\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'echo "NODE_IP"=$NODE_IP\necho "NODE_PORT"=$NODE_PORT\n')),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uc5b4\uc57c \ud558\uba70, \ud074\ub77c\uc6b0\ub4dc \ub4f1\uc744 \ud1b5\ud574 \uc124\uc815\ud560 \uacbd\uc6b0, internal ip \uc8fc\uc18c\uac00 \uc124\uc815\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NODE_IP=192.168.0.19\nNODE_PORT=30486\n")),(0,l.kt)("h3",{id:"namespace--seldon-deployment-name"},"namespace / seldon-deployment-name"),(0,l.kt)("p",null,"SeldonDeployment\uac00 \ubc30\ud3ec\ub41c ",(0,l.kt)("inlineCode",{parentName:"p"},"namespace"),"\uc640 ",(0,l.kt)("inlineCode",{parentName:"p"},"seldon-deployment-name"),"\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.\n\uc774\ub294 \uc2a4\ud399\uc744 \uc815\uc758\ud560 \ub54c metadata\uc5d0 \uc815\uc758\ub41c \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"metadata:\n name: sklearn\n namespace: seldon-deploy\n")),(0,l.kt)("p",null,"\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"namespace"),"\ub294 seldon-deploy, ",(0,l.kt)("inlineCode",{parentName:"p"},"seldon-deployment-name"),"\uc740 sklearn \uc785\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"method-name"},"method-name"),(0,l.kt)("p",null,"SeldonDeployment\uc5d0\uc11c \uc8fc\ub85c \uc0ac\uc6a9\ud558\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"method-name"),"\uc740 \ub450 \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"doc"),(0,l.kt)("li",{parentName:"ol"},"predictions")),(0,l.kt)("p",null,"\uac01\uac01\uc758 method\uc758 \uc790\uc138\ud55c \uc0ac\uc6a9 \ubc29\ubc95\uc740 \uc544\ub798\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"using-swagger"},"Using Swagger"),(0,l.kt)("p",null,"\uc6b0\uc120 doc method\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. doc method\ub97c \uc774\uc6a9\ud558\uba74 seldon\uc5d0\uc11c \uc0dd\uc131\ud55c swagger\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-swagger-\uc811\uc18d"},"1. Swagger \uc811\uc18d"),(0,l.kt)("p",null,"\uc704\uc5d0\uc11c \uc124\uba85\ud55c ingress url \uaddc\uce59\uc5d0 \ub530\ub77c \uc544\ub798 \uc8fc\uc18c\ub97c \ud1b5\ud574 swagger\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("inlineCode",{parentName:"p"},"http://192.168.0.19:30486/seldon/seldon-deploy/sklearn/api/v1.0/doc/")),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger1.png",src:t(1093).Z,width:"3068",height:"1650"})),(0,l.kt)("h3",{id:"2-swagger-predictions-\uba54\ub274-\uc120\ud0dd"},"2. Swagger Predictions \uba54\ub274 \uc120\ud0dd"),(0,l.kt)("p",null,"UI\uc5d0\uc11c ",(0,l.kt)("inlineCode",{parentName:"p"},"/seldon/seldon-deploy/sklearn/api/v1.0/predictions")," \uba54\ub274\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger2.png",src:t(1981).Z,width:"3068",height:"1652"})),(0,l.kt)("h3",{id:"3-try-it-out-\uc120\ud0dd"},"3. ",(0,l.kt)("em",{parentName:"h3"},"Try it out")," \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger3.png",src:t(4736).Z,width:"3069",height:"1653"})),(0,l.kt)("h3",{id:"4-request-body\uc5d0-data-\uc785\ub825"},"4. Request body\uc5d0 data \uc785\ub825"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger4.png",src:t(4808).Z,width:"3072",height:"1652"})),(0,l.kt)("p",null,"\ub2e4\uc74c \ub370\uc774\ud130\ub97c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "data": {\n "ndarray":[[1.0, 2.0, 5.0, 6.0]]\n }\n}\n')),(0,l.kt)("h3",{id:"5-\ucd94\ub860-\uacb0\uacfc-\ud655\uc778"},"5. \ucd94\ub860 \uacb0\uacfc \ud655\uc778"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Execute")," \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc11c \ucd94\ub860 \uacb0\uacfc\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger5.png",src:t(6470).Z,width:"3583",height:"1969"})),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\ub860 \uacb0\uacfc\ub97c \uc5bb\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "data": {\n "names": [\n "t:0",\n "t:1",\n "t:2"\n ],\n "ndarray": [\n [\n 9.912315378486697e-7,\n 0.0007015931307746079,\n 0.9992974156376876\n ]\n ]\n },\n "meta": {\n "requestPath": {\n "classifier": "seldonio/sklearnserver:1.11.2"\n }\n }\n}\n')),(0,l.kt)("h2",{id:"using-cli"},"Using CLI"),(0,l.kt)("p",null,"\ub610\ud55c, curl\uacfc \uac19\uc740 http client CLI \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574\uc11c\ub3c4 API \uc694\uccad\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"/predictions"),"\ub97c \uc694\uccad\ud558\uba74"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H 'Content-Type: application/json' \\\n-d '{ \"data\": { \"ndarray\": [[1,2,3,4]] } }'\n")),(0,l.kt)("p",null,"\uc544\ub798\uc640 \uac19\uc740 \uc751\ub2f5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{"data":{"names":["t:0","t:1","t:2"],"ndarray":[[0.0006985194531162835,0.00366803903943666,0.995633441507447]]},"meta":{"requestPath":{"classifier":"seldonio/sklearnserver:1.11.2"}}}\n')))}c.isMDXComponent=!0},1093:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger1-1d3574d988c85be7534f518f1e5fe097.png"},1981:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger2-ff43013f3e20de5f305d2215a599aa88.png"},4736:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger3-af84538f8d07efd95a2e820e32be2670.png"},4808:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger4-8ba33dee625455b3de8326a6677ac6ca.png"},6470:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger5-53bd997e4f2e7f1904edebd974c6e128.png"}}]); \ No newline at end of file diff --git a/assets/js/38642333.a2648633.js b/assets/js/38642333.a2648633.js deleted file mode 100644 index eb6ee791..00000000 --- a/assets/js/38642333.a2648633.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6643],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=p(t),u=l,g=m["".concat(i,".").concat(u)]||m[u]||c[u]||r;return t?a.createElement(g,s(s({ref:n},d),{},{components:t})):a.createElement(g,s({ref:n},d))}));function g(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var r=t.length,s=new Array(r);s[0]=u;var o={};for(var i in n)hasOwnProperty.call(n,i)&&(o[i]=n[i]);o.originalType=e,o[m]="string"==typeof e?e:l,s[1]=o;for(var p=2;p{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const r={title:"2. Deploy SeldonDeployment",description:"",sidebar_position:2,date:new Date("2021-12-22T00:00:00.000Z"),lastmod:new Date("2021-12-22T00:00:00.000Z"),contributors:["Youngcheol Jang","SeungTae Kim"]},s=void 0,o={unversionedId:"api-deployment/seldon-iris",id:"version-1.0/api-deployment/seldon-iris",title:"2. Deploy SeldonDeployment",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-iris.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-iris",permalink:"/docs/1.0/api-deployment/seldon-iris",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-iris.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Deploy SeldonDeployment",description:"",sidebar_position:2,date:"2021-12-22T00:00:00.000Z",lastmod:"2021-12-22T00:00:00.000Z",contributors:["Youngcheol Jang","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. What is API Deployment?",permalink:"/docs/1.0/api-deployment/what-is-api-deployment"},next:{title:"3. Seldon Monitoring",permalink:"/docs/1.0/api-deployment/seldon-pg"}},i={},p=[{value:"SeldonDeployment\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud558\uae30",id:"seldondeployment\ub97c-\ud1b5\ud574-\ubc30\ud3ec\ud558\uae30",level:2},{value:"1. Prerequisites",id:"1-prerequisites",level:3},{value:"2. \uc2a4\ud399 \uc815\uc758",id:"2-\uc2a4\ud399-\uc815\uc758",level:3},{value:"Ingress URL",id:"ingress-url",level:2},{value:"NODE_IP / NODE_PORT",id:"node_ip--node_port",level:3},{value:"namespace / seldon-deployment-name",id:"namespace--seldon-deployment-name",level:3},{value:"method-name",id:"method-name",level:3},{value:"Using Swagger",id:"using-swagger",level:2},{value:"1. Swagger \uc811\uc18d",id:"1-swagger-\uc811\uc18d",level:3},{value:"2. Swagger Predictions \uba54\ub274 \uc120\ud0dd",id:"2-swagger-predictions-\uba54\ub274-\uc120\ud0dd",level:3},{value:"3. Try it out \uc120\ud0dd",id:"3-try-it-out-\uc120\ud0dd",level:3},{value:"4. Request body\uc5d0 data \uc785\ub825",id:"4-request-body\uc5d0-data-\uc785\ub825",level:3},{value:"5. \ucd94\ub860 \uacb0\uacfc \ud655\uc778",id:"5-\ucd94\ub860-\uacb0\uacfc-\ud655\uc778",level:3},{value:"Using CLI",id:"using-cli",level:2}],d={toc:p},m="wrapper";function c(e){let{components:n,...r}=e;return(0,l.kt)(m,(0,a.Z)({},d,r,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"seldondeployment\ub97c-\ud1b5\ud574-\ubc30\ud3ec\ud558\uae30"},"SeldonDeployment\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud558\uae30"),(0,l.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc788\uc744 \ub54c SeldonDeployment\ub97c \ud1b5\ud574 API Deployment\ub97c \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\nSeldonDeployment\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4(Kubernetes)\uc5d0 \ubaa8\ub378\uc744 REST/gRPC \uc11c\ubc84\uc758 \ud615\ud0dc\ub85c \ubc30\ud3ec\ud558\uae30 \uc704\ud574 \uc815\uc758\ub41c CRD(CustomResourceDefinition)\uc785\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-prerequisites"},"1. Prerequisites"),(0,l.kt)("p",null,"SeldonDeployment \uad00\ub828\ub41c \uc2e4\uc2b5\uc740 seldon-deploy\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ub124\uc784\uc2a4\ud398\uc774\uc2a4(namespace)\uc5d0\uc11c \uc9c4\ud589\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub97c \uc0dd\uc131\ud55c \ub4a4, seldon-deploy\ub97c \ud604\uc7ac \ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create namespace seldon-deploy\nkubectl config set-context --current --namespace=seldon-deploy\n")),(0,l.kt)("h3",{id:"2-\uc2a4\ud399-\uc815\uc758"},"2. \uc2a4\ud399 \uc815\uc758"),(0,l.kt)("p",null,"SeldonDeployment\ub97c \ubc30\ud3ec\ud558\uae30 \uc704\ud55c yaml \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\n\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uacf5\uac1c\ub41c iris model\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\uc774 iris model\uc740 sklearn \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud1b5\ud574 \ud559\uc2b5\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 SKLEARN_SERVER\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"cat < iris-sdep.yaml\napiVersion: machinelearning.seldon.io/v1alpha2\nkind: SeldonDeployment\nmetadata:\n name: sklearn\n namespace: seldon-deploy\nspec:\n name: iris\n predictors:\n - graph:\n children: []\n implementation: SKLEARN_SERVER\n modelUri: gs://seldon-models/v1.12.0-dev/sklearn/iris\n name: classifier\n name: default\n replicas: 1\nEOF\n")),(0,l.kt)("p",null,"yaml \ud30c\uc77c\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f iris-sdep.yaml\n")),(0,l.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\uac00 \ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pods --selector seldon-app=sklearn-default -n seldon-deploy\n")),(0,l.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nsklearn-default-0-classifier-5fdfd7bb77-ls9tr 2/2 Running 0 5m\n")),(0,l.kt)("h2",{id:"ingress-url"},"Ingress URL"),(0,l.kt)("p",null,"\uc774\uc81c \ubc30\ud3ec\ub41c \ubaa8\ub378\uc5d0 \ucd94\ub860 \uc694\uccad(predict request)\ub97c \ubcf4\ub0b4\uc11c \ucd94\ub860 \uacb0\uad0f\uac12\uc744 \ubc1b\uc544\uc635\ub2c8\ub2e4.\n\ubc30\ud3ec\ub41c API\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uaddc\uce59\uc73c\ub85c \uc0dd\uc131\ub429\ub2c8\ub2e4.\n",(0,l.kt)("inlineCode",{parentName:"p"},"http://{NODE_IP}:{NODE_PORT}/seldon/{namespace}/{seldon-deployment-name}/api/v1.0/{method-name}/")),(0,l.kt)("h3",{id:"node_ip--node_port"},"NODE_IP / NODE_PORT"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-seldon"},"Seldon Core \uc124\uce58 \uc2dc, Ambassador\ub97c Ingress Controller\ub85c \uc124\uc815\ud558\uc600\uc73c\ubbc0\ub85c"),", SeldonDeployment\ub85c \uc0dd\uc131\ub41c API \uc11c\ubc84\ub294 \ubaa8\ub450 Ambassador\uc758 Ingress gateway\ub97c \ud1b5\ud574 \uc694\uccad\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub530\ub77c\uc11c \uc6b0\uc120 Ambassador Ingress Gateway\uc758 url\uc744 \ud658\uacbd \ubcc0\uc218\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'export NODE_IP=$(kubectl get nodes -o jsonpath=\'{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }\')\nexport NODE_PORT=$(kubectl get service ambassador -n seldon-system -o jsonpath="{.spec.ports[0].nodePort}")\n')),(0,l.kt)("p",null,"\uc124\uc815\ub41c url\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'echo "NODE_IP"=$NODE_IP\necho "NODE_PORT"=$NODE_PORT\n')),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uc5b4\uc57c \ud558\uba70, \ud074\ub77c\uc6b0\ub4dc \ub4f1\uc744 \ud1b5\ud574 \uc124\uc815\ud560 \uacbd\uc6b0, internal ip \uc8fc\uc18c\uac00 \uc124\uc815\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NODE_IP=192.168.0.19\nNODE_PORT=30486\n")),(0,l.kt)("h3",{id:"namespace--seldon-deployment-name"},"namespace / seldon-deployment-name"),(0,l.kt)("p",null,"SeldonDeployment\uac00 \ubc30\ud3ec\ub41c ",(0,l.kt)("inlineCode",{parentName:"p"},"namespace"),"\uc640 ",(0,l.kt)("inlineCode",{parentName:"p"},"seldon-deployment-name"),"\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.\n\uc774\ub294 \uc2a4\ud399\uc744 \uc815\uc758\ud560 \ub54c metadata\uc5d0 \uc815\uc758\ub41c \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"metadata:\n name: sklearn\n namespace: seldon-deploy\n")),(0,l.kt)("p",null,"\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"namespace"),"\ub294 seldon-deploy, ",(0,l.kt)("inlineCode",{parentName:"p"},"seldon-deployment-name"),"\uc740 sklearn \uc785\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"method-name"},"method-name"),(0,l.kt)("p",null,"SeldonDeployment\uc5d0\uc11c \uc8fc\ub85c \uc0ac\uc6a9\ud558\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"method-name"),"\uc740 \ub450 \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"doc"),(0,l.kt)("li",{parentName:"ol"},"predictions")),(0,l.kt)("p",null,"\uac01\uac01\uc758 method\uc758 \uc790\uc138\ud55c \uc0ac\uc6a9 \ubc29\ubc95\uc740 \uc544\ub798\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"using-swagger"},"Using Swagger"),(0,l.kt)("p",null,"\uc6b0\uc120 doc method\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. doc method\ub97c \uc774\uc6a9\ud558\uba74 seldon\uc5d0\uc11c \uc0dd\uc131\ud55c swagger\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-swagger-\uc811\uc18d"},"1. Swagger \uc811\uc18d"),(0,l.kt)("p",null,"\uc704\uc5d0\uc11c \uc124\uba85\ud55c ingress url \uaddc\uce59\uc5d0 \ub530\ub77c \uc544\ub798 \uc8fc\uc18c\ub97c \ud1b5\ud574 swagger\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("inlineCode",{parentName:"p"},"http://192.168.0.19:30486/seldon/seldon-deploy/sklearn/api/v1.0/doc/")),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger1.png",src:t(1093).Z,width:"3068",height:"1650"})),(0,l.kt)("h3",{id:"2-swagger-predictions-\uba54\ub274-\uc120\ud0dd"},"2. Swagger Predictions \uba54\ub274 \uc120\ud0dd"),(0,l.kt)("p",null,"UI\uc5d0\uc11c ",(0,l.kt)("inlineCode",{parentName:"p"},"/seldon/seldon-deploy/sklearn/api/v1.0/predictions")," \uba54\ub274\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger2.png",src:t(1981).Z,width:"3068",height:"1652"})),(0,l.kt)("h3",{id:"3-try-it-out-\uc120\ud0dd"},"3. ",(0,l.kt)("em",{parentName:"h3"},"Try it out")," \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger3.png",src:t(4736).Z,width:"3069",height:"1653"})),(0,l.kt)("h3",{id:"4-request-body\uc5d0-data-\uc785\ub825"},"4. Request body\uc5d0 data \uc785\ub825"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger4.png",src:t(4808).Z,width:"3072",height:"1652"})),(0,l.kt)("p",null,"\ub2e4\uc74c \ub370\uc774\ud130\ub97c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "data": {\n "ndarray":[[1.0, 2.0, 5.0, 6.0]]\n }\n}\n')),(0,l.kt)("h3",{id:"5-\ucd94\ub860-\uacb0\uacfc-\ud655\uc778"},"5. \ucd94\ub860 \uacb0\uacfc \ud655\uc778"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Execute")," \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc11c \ucd94\ub860 \uacb0\uacfc\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger5.png",src:t(6470).Z,width:"3583",height:"1969"})),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\ub860 \uacb0\uacfc\ub97c \uc5bb\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "data": {\n "names": [\n "t:0",\n "t:1",\n "t:2"\n ],\n "ndarray": [\n [\n 9.912315378486697e-7,\n 0.0007015931307746079,\n 0.9992974156376876\n ]\n ]\n },\n "meta": {\n "requestPath": {\n "classifier": "seldonio/sklearnserver:1.11.2"\n }\n }\n}\n')),(0,l.kt)("h2",{id:"using-cli"},"Using CLI"),(0,l.kt)("p",null,"\ub610\ud55c, curl\uacfc \uac19\uc740 http client CLI \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574\uc11c\ub3c4 API \uc694\uccad\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"/predictions"),"\ub97c \uc694\uccad\ud558\uba74"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H 'Content-Type: application/json' \\\n-d '{ \"data\": { \"ndarray\": [[1,2,3,4]] } }'\n")),(0,l.kt)("p",null,"\uc544\ub798\uc640 \uac19\uc740 \uc751\ub2f5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{"data":{"names":["t:0","t:1","t:2"],"ndarray":[[0.0006985194531162835,0.00366803903943666,0.995633441507447]]},"meta":{"requestPath":{"classifier":"seldonio/sklearnserver:1.11.2"}}}\n')))}c.isMDXComponent=!0},1093:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger1-1d3574d988c85be7534f518f1e5fe097.png"},1981:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger2-ff43013f3e20de5f305d2215a599aa88.png"},4736:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger3-af84538f8d07efd95a2e820e32be2670.png"},4808:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger4-8ba33dee625455b3de8326a6677ac6ca.png"},6470:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger5-53bd997e4f2e7f1904edebd974c6e128.png"}}]); \ No newline at end of file diff --git a/assets/js/39b2b572.29d37a02.js b/assets/js/39b2b572.29d37a02.js new file mode 100644 index 00000000..cec0b21e --- /dev/null +++ b/assets/js/39b2b572.29d37a02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8837],{3905:(n,e,r)=>{r.d(e,{Zo:()=>_,kt:()=>b});var t=r(7294);function p(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function a(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,t)}return r}function u(n){for(var e=1;e=0||(p[r]=n[r]);return p}(n,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(p[r]=n[r])}return p}var s=t.createContext({}),m=function(n){var e=t.useContext(s),r=e;return n&&(r="function"==typeof n?n(e):u(u({},e),n)),r},_=function(n){var e=m(n.components);return t.createElement(s.Provider,{value:e},n.children)},o="mdxType",l={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(n,e){var r=n.components,p=n.mdxType,a=n.originalType,s=n.parentName,_=i(n,["components","mdxType","originalType","parentName"]),o=m(r),d=p,b=o["".concat(s,".").concat(d)]||o[d]||l[d]||a;return r?t.createElement(b,u(u({ref:e},_),{},{components:r})):t.createElement(b,u({ref:e},_))}));function b(n,e){var r=arguments,p=e&&e.mdxType;if("string"==typeof n||p){var a=r.length,u=new Array(a);u[0]=d;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=n,i[o]="string"==typeof n?n:p,u[1]=i;for(var m=2;m{r.r(e),r.d(e,{assets:()=>s,contentTitle:()=>u,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>m});var t=r(7462),p=(r(7294),r(3905));const a={title:"10. Pipeline - Setting",description:"",sidebar_position:10,contributors:["Jongseob Jeon"]},u=void 0,i={unversionedId:"kubeflow/advanced-pipeline",id:"version-1.0/kubeflow/advanced-pipeline",title:"10. Pipeline - Setting",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-pipeline.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-pipeline",permalink:"/docs/1.0/kubeflow/advanced-pipeline",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-pipeline.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:10,frontMatter:{title:"10. Pipeline - Setting",description:"",sidebar_position:10,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"9. Component - Environment",permalink:"/docs/1.0/kubeflow/advanced-environment"},next:{title:"11. Pipeline - Run Result",permalink:"/docs/1.0/kubeflow/advanced-run"}},s={},m=[{value:"Pipeline Setting",id:"pipeline-setting",level:2},{value:"Display Name",id:"display-name",level:2},{value:"set_display_name",id:"set_display_name",level:3},{value:"UI in Kubeflow",id:"ui-in-kubeflow",level:3},{value:"Resources",id:"resources",level:2},{value:"GPU",id:"gpu",level:3},{value:"CPU",id:"cpu",level:3},{value:"Memory",id:"memory",level:3}],_={toc:m},o="wrapper";function l(n){let{components:e,...a}=n;return(0,p.kt)(o,(0,t.Z)({},_,a,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"pipeline-setting"},"Pipeline Setting"),(0,p.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc124\uc815\ud560 \uc218 \uc788\ub294 \uac12\ub4e4\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"display-name"},"Display Name"),(0,p.kt)("p",null,"\uc0dd\uc131\ub41c \ud30c\uc774\ud504\ub77c\uc778 \ub0b4\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub450 \uac1c\uc758 \uc774\ub984\uc744 \uac16\uc2b5\ub2c8\ub2e4."),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},"task_name: \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud560 \ub54c \uc791\uc131\ud55c \ud568\uc218 \uc774\ub984"),(0,p.kt)("li",{parentName:"ul"},"display_name: kubeflow UI\uc0c1\uc5d0 \ubcf4\uc774\ub294 \uc774\ub984")),(0,p.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uacbd\uc6b0 \ub450 \ucef4\ud3ec\ub10c\ud2b8 \ubaa8\ub450 Print and return number\ub85c \uc124\uc815\ub418\uc5b4 \uc788\uc5b4\uc11c \uc5b4\ub5a4 \ucef4\ud3ec\ub10c\ud2b8\uac00 1\ubc88\uc778\uc9c0 2\ubc88\uc778\uc9c0 \ud655\uc778\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"run-7",src:r(2687).Z,width:"3408",height:"2156"})),(0,p.kt)("h3",{id:"set_display_name"},"set_display_name"),(0,p.kt)("p",null,"\uc774\ub97c \uc704\ud55c \uac83\uc774 \ubc14\ub85c display_name \uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc124\uc815\ud558\ub294 \ubc29\ubc95\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,p.kt)("inlineCode",{parentName:"p"},"set_display_name")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp.set_display_name"},"attribute"),"\ub97c \uc774\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \ub098\uc628 ",(0,p.kt)("inlineCode",{parentName:"p"},"example_pipeline.yaml"),"\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("details",null,(0,p.kt)("summary",null,"example_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: example-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9, pipelines.kubeflow.org/pipeline_compilation_time: \'2021-12-09T18:11:43.193190\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "number_1", "type":\n "Integer"}, {"name": "number_2", "type": "Integer"}], "name": "example_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9}\nspec:\n entrypoint: example-pipeline\n templates:\n - name: example-pipeline\n inputs:\n parameters:\n - {name: number_1}\n - {name: number_2}\n dag:\n tasks:\n - name: print-and-return-number\n template: print-and-return-number\n arguments:\n parameters:\n - {name: number_1, value: \'{{inputs.parameters.number_1}}\'}\n - name: print-and-return-number-2\n template: print-and-return-number-2\n arguments:\n parameters:\n - {name: number_2, value: \'{{inputs.parameters.number_2}}\'}\n - name: sum-and-print-numbers\n template: sum-and-print-numbers\n dependencies: [print-and-return-number, print-and-return-number-2]\n arguments:\n parameters:\n - {name: print-and-return-number-2-Output, value: \'{{tasks.print-and-return-number-2.outputs.parameters.print-and-return-number-2-Output}}\'}\n - {name: print-and-return-number-Output, value: \'{{tasks.print-and-return-number.outputs.parameters.print-and-return-number-Output}}\'}\n - name: print-and-return-number\n container:\n args: [--number, \'{{inputs.parameters.number_1}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(\n str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_1}\n outputs:\n parameters:\n - name: print-and-return-number-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-Output, path: /tmp/outputs/Output/data}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is number 1, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number", {"inputValue": "number"}, "----output-paths",\n {"outputPath": "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(\\n str(int_value),\n str(type(int_value))))\\n return str(int_value)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Print and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_1}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n - name: print-and-return-number-2\n container:\n args: [--number, \'{{inputs.parameters.number_2}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(\n str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_2}\n outputs:\n parameters:\n - name: print-and-return-number-2-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-2-Output, path: /tmp/outputs/Output/data}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is number 2, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number", {"inputValue": "number"}, "----output-paths",\n {"outputPath": "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(\\n str(int_value),\n str(type(int_value))))\\n return str(int_value)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Print and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_2}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: print-and-return-number-2-Output}\n - {name: print-and-return-number-Output}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is sum of number\n 1 and number 2, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number-1", {"inputValue": "number_1"}, "--number-2",\n {"inputValue": "number_2"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def sum_and_print_numbers(number_1, number_2):\\n print(number_1 + number_2)\\n\\nimport\n argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Sum and print numbers\'\',\n description=\'\'\'\')\\n_parser.add_argument(\\"--number-1\\", dest=\\"number_1\\",\n type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--number-2\\",\n dest=\\"number_2\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = sum_and_print_numbers(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number_1", "type": "Integer"},\n {"name": "number_2", "type": "Integer"}], "name": "Sum and print numbers"}\',\n pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number_1":\n "{{inputs.parameters.print-and-return-number-Output}}", "number_2": "{{inputs.parameters.print-and-return-number-2-Output}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n arguments:\n parameters:\n - {name: number_1}\n - {name: number_2}\n serviceAccountName: pipeline-runner\n')))),(0,p.kt)("p",null,"\uc774 \uc804\uc758 \ud30c\uc77c\uacfc \ube44\uad50\ud558\uba74 ",(0,p.kt)("inlineCode",{parentName:"p"},"pipelines.kubeflow.org/task_display_name")," key\uac00 \uc0c8\ub85c \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"ui-in-kubeflow"},"UI in Kubeflow"),(0,p.kt)("p",null,"\uc704\uc5d0\uc11c \ub9cc\ub4e0 \ud30c\uc77c\uc744 \uc774\uc6a9\ud574 \uc774\uc804\uc5d0 \uc0dd\uc131\ud55c ",(0,p.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-pipeline-upload#upload-pipeline-version"},"\ud30c\uc774\ud504\ub77c\uc778"),"\uc758 \ubc84\uc804\uc744 \uc62c\ub9ac\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"adv-pipeline-0.png",src:r(139).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"\uadf8\ub7ec\uba74 \uc704\uc640 \uac19\uc774 \uc124\uc815\ud55c \uc774\ub984\uc774 \ub178\ucd9c\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"resources"},"Resources"),(0,p.kt)("h3",{id:"gpu"},"GPU"),(0,p.kt)("p",null,"\ud2b9\ubcc4\ud55c \uc124\uc815\uc774 \uc5c6\ub2e4\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud30c\ub4dc(pod)\ub85c \uc2e4\ud589\ud560 \ub54c, \uae30\ubcf8 \ub9ac\uc18c\uc2a4 \uc2a4\ud399\uc73c\ub85c \uc2e4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d GPU\ub97c \uc0ac\uc6a9\ud574 \ubaa8\ub378\uc744 \ud559\uc2b5\ud574\uc57c \ud560 \ub54c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc0c1\uc5d0\uc11c GPU\ub97c \ud560\ub2f9\ubc1b\uc9c0 \ubabb\ud574 \uc81c\ub300\ub85c \ud559\uc2b5\uc774 \uc774\ub8e8\uc5b4\uc9c0\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \uc704\ud574 ",(0,p.kt)("inlineCode",{parentName:"p"},"set_gpu_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.UserContainer.set_gpu_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1)\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc704\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \uc0dd\uc131\ub41c \ud30c\uc77c\uc5d0\uc11c ",(0,p.kt)("inlineCode",{parentName:"p"},"sum-and-print-numbers"),"\ub97c \uc790\uc138\ud788 \ubcf4\uba74 resources\uc5d0 ",(0,p.kt)("inlineCode",{parentName:"p"},"{nvidia.com/gpu: 1}")," \ub3c4 \ucd94\uac00\ub41c \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub97c \ud1b5\ud574 GPU\ub97c \ud560\ub2f9\ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},' - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n resources:\n limits: {nvidia.com/gpu: 1}\n')),(0,p.kt)("h3",{id:"cpu"},"CPU"),(0,p.kt)("p",null,"cpu\uc758 \uac1c\uc218\ub97c \uc815\ud558\uae30 \uc704\ud574\uc11c \uc774\uc6a9\ud558\ub294 \ud568\uc218\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},".set_cpu_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.Sidecar.set_cpu_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","gpu\uc640\ub294 \ub2e4\ub978 \uc810\uc740 int\uac00 \uc544\ub2cc string\uc73c\ub85c \uc785\ub825\ud574\uc57c \ud55c\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1).set_cpu_limit("16")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\ubc14\ub010 \ubd80\ubd84\ub9cc \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"}," resources:\n limits: {nvidia.com/gpu: 1, cpu: '16'}\n")),(0,p.kt)("h3",{id:"memory"},"Memory"),(0,p.kt)("p",null,"\uba54\ubaa8\ub9ac\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},".set_memory_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.Sidecar.set_memory_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1).set_memory_limit("1G")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n\n')),(0,p.kt)("p",null,"\ubc14\ub010 \ubd80\ubd84\ub9cc \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"}," resources:\n limits: {nvidia.com/gpu: 1, memory: 1G}\n")))}l.isMDXComponent=!0},139:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/adv-pipeline-0-16dd5e9fed2f2d5c4a1d1b683a7a144d.png"},2687:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/run-7-53ba486fe934b320289bf98ddbf9a4b6.png"}}]); \ No newline at end of file diff --git a/assets/js/39b2b572.87229bfb.js b/assets/js/39b2b572.87229bfb.js deleted file mode 100644 index eef281fb..00000000 --- a/assets/js/39b2b572.87229bfb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8837],{3905:(n,e,r)=>{r.d(e,{Zo:()=>_,kt:()=>b});var t=r(7294);function p(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function a(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,t)}return r}function u(n){for(var e=1;e=0||(p[r]=n[r]);return p}(n,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(p[r]=n[r])}return p}var s=t.createContext({}),m=function(n){var e=t.useContext(s),r=e;return n&&(r="function"==typeof n?n(e):u(u({},e),n)),r},_=function(n){var e=m(n.components);return t.createElement(s.Provider,{value:e},n.children)},o="mdxType",l={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(n,e){var r=n.components,p=n.mdxType,a=n.originalType,s=n.parentName,_=i(n,["components","mdxType","originalType","parentName"]),o=m(r),d=p,b=o["".concat(s,".").concat(d)]||o[d]||l[d]||a;return r?t.createElement(b,u(u({ref:e},_),{},{components:r})):t.createElement(b,u({ref:e},_))}));function b(n,e){var r=arguments,p=e&&e.mdxType;if("string"==typeof n||p){var a=r.length,u=new Array(a);u[0]=d;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=n,i[o]="string"==typeof n?n:p,u[1]=i;for(var m=2;m{r.r(e),r.d(e,{assets:()=>s,contentTitle:()=>u,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>m});var t=r(7462),p=(r(7294),r(3905));const a={title:"10. Pipeline - Setting",description:"",sidebar_position:10,contributors:["Jongseob Jeon"]},u=void 0,i={unversionedId:"kubeflow/advanced-pipeline",id:"version-1.0/kubeflow/advanced-pipeline",title:"10. Pipeline - Setting",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-pipeline.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-pipeline",permalink:"/docs/1.0/kubeflow/advanced-pipeline",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-pipeline.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:10,frontMatter:{title:"10. Pipeline - Setting",description:"",sidebar_position:10,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"9. Component - Environment",permalink:"/docs/1.0/kubeflow/advanced-environment"},next:{title:"11. Pipeline - Run Result",permalink:"/docs/1.0/kubeflow/advanced-run"}},s={},m=[{value:"Pipeline Setting",id:"pipeline-setting",level:2},{value:"Display Name",id:"display-name",level:2},{value:"set_display_name",id:"set_display_name",level:3},{value:"UI in Kubeflow",id:"ui-in-kubeflow",level:3},{value:"Resources",id:"resources",level:2},{value:"GPU",id:"gpu",level:3},{value:"CPU",id:"cpu",level:3},{value:"Memory",id:"memory",level:3}],_={toc:m},o="wrapper";function l(n){let{components:e,...a}=n;return(0,p.kt)(o,(0,t.Z)({},_,a,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"pipeline-setting"},"Pipeline Setting"),(0,p.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc124\uc815\ud560 \uc218 \uc788\ub294 \uac12\ub4e4\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"display-name"},"Display Name"),(0,p.kt)("p",null,"\uc0dd\uc131\ub41c \ud30c\uc774\ud504\ub77c\uc778 \ub0b4\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub450 \uac1c\uc758 \uc774\ub984\uc744 \uac16\uc2b5\ub2c8\ub2e4."),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},"task_name: \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud560 \ub54c \uc791\uc131\ud55c \ud568\uc218 \uc774\ub984"),(0,p.kt)("li",{parentName:"ul"},"display_name: kubeflow UI\uc0c1\uc5d0 \ubcf4\uc774\ub294 \uc774\ub984")),(0,p.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uacbd\uc6b0 \ub450 \ucef4\ud3ec\ub10c\ud2b8 \ubaa8\ub450 Print and return number\ub85c \uc124\uc815\ub418\uc5b4 \uc788\uc5b4\uc11c \uc5b4\ub5a4 \ucef4\ud3ec\ub10c\ud2b8\uac00 1\ubc88\uc778\uc9c0 2\ubc88\uc778\uc9c0 \ud655\uc778\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"run-7",src:r(2687).Z,width:"3408",height:"2156"})),(0,p.kt)("h3",{id:"set_display_name"},"set_display_name"),(0,p.kt)("p",null,"\uc774\ub97c \uc704\ud55c \uac83\uc774 \ubc14\ub85c display_name \uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc124\uc815\ud558\ub294 \ubc29\ubc95\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,p.kt)("inlineCode",{parentName:"p"},"set_display_name")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp.set_display_name"},"attribute"),"\ub97c \uc774\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \ub098\uc628 ",(0,p.kt)("inlineCode",{parentName:"p"},"example_pipeline.yaml"),"\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("details",null,(0,p.kt)("summary",null,"example_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: example-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9, pipelines.kubeflow.org/pipeline_compilation_time: \'2021-12-09T18:11:43.193190\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "number_1", "type":\n "Integer"}, {"name": "number_2", "type": "Integer"}], "name": "example_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9}\nspec:\n entrypoint: example-pipeline\n templates:\n - name: example-pipeline\n inputs:\n parameters:\n - {name: number_1}\n - {name: number_2}\n dag:\n tasks:\n - name: print-and-return-number\n template: print-and-return-number\n arguments:\n parameters:\n - {name: number_1, value: \'{{inputs.parameters.number_1}}\'}\n - name: print-and-return-number-2\n template: print-and-return-number-2\n arguments:\n parameters:\n - {name: number_2, value: \'{{inputs.parameters.number_2}}\'}\n - name: sum-and-print-numbers\n template: sum-and-print-numbers\n dependencies: [print-and-return-number, print-and-return-number-2]\n arguments:\n parameters:\n - {name: print-and-return-number-2-Output, value: \'{{tasks.print-and-return-number-2.outputs.parameters.print-and-return-number-2-Output}}\'}\n - {name: print-and-return-number-Output, value: \'{{tasks.print-and-return-number.outputs.parameters.print-and-return-number-Output}}\'}\n - name: print-and-return-number\n container:\n args: [--number, \'{{inputs.parameters.number_1}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(\n str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_1}\n outputs:\n parameters:\n - name: print-and-return-number-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-Output, path: /tmp/outputs/Output/data}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is number 1, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number", {"inputValue": "number"}, "----output-paths",\n {"outputPath": "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(\\n str(int_value),\n str(type(int_value))))\\n return str(int_value)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Print and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_1}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n - name: print-and-return-number-2\n container:\n args: [--number, \'{{inputs.parameters.number_2}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(\n str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_2}\n outputs:\n parameters:\n - name: print-and-return-number-2-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-2-Output, path: /tmp/outputs/Output/data}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is number 2, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number", {"inputValue": "number"}, "----output-paths",\n {"outputPath": "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(\\n str(int_value),\n str(type(int_value))))\\n return str(int_value)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Print and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_2}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: print-and-return-number-2-Output}\n - {name: print-and-return-number-Output}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is sum of number\n 1 and number 2, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number-1", {"inputValue": "number_1"}, "--number-2",\n {"inputValue": "number_2"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def sum_and_print_numbers(number_1, number_2):\\n print(number_1 + number_2)\\n\\nimport\n argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Sum and print numbers\'\',\n description=\'\'\'\')\\n_parser.add_argument(\\"--number-1\\", dest=\\"number_1\\",\n type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--number-2\\",\n dest=\\"number_2\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = sum_and_print_numbers(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number_1", "type": "Integer"},\n {"name": "number_2", "type": "Integer"}], "name": "Sum and print numbers"}\',\n pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number_1":\n "{{inputs.parameters.print-and-return-number-Output}}", "number_2": "{{inputs.parameters.print-and-return-number-2-Output}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n arguments:\n parameters:\n - {name: number_1}\n - {name: number_2}\n serviceAccountName: pipeline-runner\n')))),(0,p.kt)("p",null,"\uc774 \uc804\uc758 \ud30c\uc77c\uacfc \ube44\uad50\ud558\uba74 ",(0,p.kt)("inlineCode",{parentName:"p"},"pipelines.kubeflow.org/task_display_name")," key\uac00 \uc0c8\ub85c \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"ui-in-kubeflow"},"UI in Kubeflow"),(0,p.kt)("p",null,"\uc704\uc5d0\uc11c \ub9cc\ub4e0 \ud30c\uc77c\uc744 \uc774\uc6a9\ud574 \uc774\uc804\uc5d0 \uc0dd\uc131\ud55c ",(0,p.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-pipeline-upload#upload-pipeline-version"},"\ud30c\uc774\ud504\ub77c\uc778"),"\uc758 \ubc84\uc804\uc744 \uc62c\ub9ac\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"adv-pipeline-0.png",src:r(139).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"\uadf8\ub7ec\uba74 \uc704\uc640 \uac19\uc774 \uc124\uc815\ud55c \uc774\ub984\uc774 \ub178\ucd9c\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"resources"},"Resources"),(0,p.kt)("h3",{id:"gpu"},"GPU"),(0,p.kt)("p",null,"\ud2b9\ubcc4\ud55c \uc124\uc815\uc774 \uc5c6\ub2e4\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud30c\ub4dc(pod)\ub85c \uc2e4\ud589\ud560 \ub54c, \uae30\ubcf8 \ub9ac\uc18c\uc2a4 \uc2a4\ud399\uc73c\ub85c \uc2e4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d GPU\ub97c \uc0ac\uc6a9\ud574 \ubaa8\ub378\uc744 \ud559\uc2b5\ud574\uc57c \ud560 \ub54c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc0c1\uc5d0\uc11c GPU\ub97c \ud560\ub2f9\ubc1b\uc9c0 \ubabb\ud574 \uc81c\ub300\ub85c \ud559\uc2b5\uc774 \uc774\ub8e8\uc5b4\uc9c0\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \uc704\ud574 ",(0,p.kt)("inlineCode",{parentName:"p"},"set_gpu_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.UserContainer.set_gpu_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1)\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc704\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \uc0dd\uc131\ub41c \ud30c\uc77c\uc5d0\uc11c ",(0,p.kt)("inlineCode",{parentName:"p"},"sum-and-print-numbers"),"\ub97c \uc790\uc138\ud788 \ubcf4\uba74 resources\uc5d0 ",(0,p.kt)("inlineCode",{parentName:"p"},"{nvidia.com/gpu: 1}")," \ub3c4 \ucd94\uac00\ub41c \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub97c \ud1b5\ud574 GPU\ub97c \ud560\ub2f9\ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},' - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n resources:\n limits: {nvidia.com/gpu: 1}\n')),(0,p.kt)("h3",{id:"cpu"},"CPU"),(0,p.kt)("p",null,"cpu\uc758 \uac1c\uc218\ub97c \uc815\ud558\uae30 \uc704\ud574\uc11c \uc774\uc6a9\ud558\ub294 \ud568\uc218\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},".set_cpu_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.Sidecar.set_cpu_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","gpu\uc640\ub294 \ub2e4\ub978 \uc810\uc740 int\uac00 \uc544\ub2cc string\uc73c\ub85c \uc785\ub825\ud574\uc57c \ud55c\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1).set_cpu_limit("16")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\ubc14\ub010 \ubd80\ubd84\ub9cc \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"}," resources:\n limits: {nvidia.com/gpu: 1, cpu: '16'}\n")),(0,p.kt)("h3",{id:"memory"},"Memory"),(0,p.kt)("p",null,"\uba54\ubaa8\ub9ac\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},".set_memory_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.Sidecar.set_memory_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1).set_memory_limit("1G")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n\n')),(0,p.kt)("p",null,"\ubc14\ub010 \ubd80\ubd84\ub9cc \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"}," resources:\n limits: {nvidia.com/gpu: 1, memory: 1G}\n")))}l.isMDXComponent=!0},139:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/adv-pipeline-0-16dd5e9fed2f2d5c4a1d1b683a7a144d.png"},2687:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/run-7-53ba486fe934b320289bf98ddbf9a4b6.png"}}]); \ No newline at end of file diff --git a/assets/js/3f2d0791.a96bd593.js b/assets/js/3f2d0791.a96bd593.js new file mode 100644 index 00000000..a89100b0 --- /dev/null +++ b/assets/js/3f2d0791.a96bd593.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5435],{3905:(e,t,r)=>{r.d(t,{Zo:()=>k,kt:()=>s});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},k=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,k=i(e,["components","mdxType","originalType","parentName"]),m=c(r),u=a,s=m["".concat(p,".").concat(u)]||m[u]||d[u]||l;return r?n.createElement(s,o(o({ref:t},k),{},{components:r})):n.createElement(s,o({ref:t},k))}));function s(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[m]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const l={title:"[Practice] Docker images",description:"Practice to use docker image.",sidebar_position:5,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/images",id:"prerequisites/docker/images",title:"[Practice] Docker images",description:"Practice to use docker image.",source:"@site/docs/prerequisites/docker/images.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/images",permalink:"/docs/prerequisites/docker/images",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/images.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"[Practice] Docker images",description:"Practice to use docker image.",sidebar_position:5,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"[Practice] Docker command",permalink:"/docs/prerequisites/docker/command"},next:{title:"[Practice] Docker Advanced",permalink:"/docs/prerequisites/docker/advanced"}},p={},c=[{value:"1. Dockerfile \ub9cc\ub4e4\uae30",id:"1-dockerfile-\ub9cc\ub4e4\uae30",level:2},{value:"2. Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4",id:"2-dockerfile-\ub0b4\uc7a5-\uba85\ub839\uc5b4",level:2},{value:"FROM",id:"from",level:3},{value:"COPY",id:"copy",level:3},{value:"RUN",id:"run",level:3},{value:"CMD",id:"cmd",level:3},{value:"WORKDIR",id:"workdir",level:3},{value:"ENV",id:"env",level:3},{value:"EXPOSE",id:"expose",level:3},{value:"3. \uac04\ub2e8\ud55c Dockerfile \uc791\uc131\ud574\ubcf4\uae30",id:"3-\uac04\ub2e8\ud55c-dockerfile-\uc791\uc131\ud574\ubcf4\uae30",level:2},{value:"4. Docker build from Dockerfile",id:"4-docker-build-from-dockerfile",level:2},{value:"5. Docker run from Dockerfile",id:"5-docker-run-from-dockerfile",level:2},{value:"6. Docker run with env",id:"6-docker-run-with-env",level:2}],k={toc:c},m="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(m,(0,n.Z)({},k,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-dockerfile-\ub9cc\ub4e4\uae30"},"1. Dockerfile \ub9cc\ub4e4\uae30"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4dc\ub294 \uac00\uc7a5 \uc26c\uc6b4 \ubc29\ubc95\uc740 \ub3c4\ucee4\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf\uc778 Dockerfile\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\uc678\uc5d0\ub294 running container \ub97c docker image \ub85c \ub9cc\ub4dc\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker commit")," \ub4f1\uc744 \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\uc790\uac00 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub3c4\ub85d, \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf"),(0,a.kt)("li",{parentName:"ul"},"\ud30c\uc77c\uba85\uc740 \uaf2d ",(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile")," \uc774 \uc544\ub2c8\uc5b4\ub3c4 \uc0c1\uad00\uc5c6\uc9c0\ub9cc, ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build")," \uc218\ud589 \uc2dc, default \ub85c \uc0ac\uc6a9\ud558\ub294 \ud30c\uc77c\uba85\uc774 ",(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile")," \uc785\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ul"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4dc\ub294 ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build")," \ub97c \uc218\ud589\ud560 \ub54c, ",(0,a.kt)("inlineCode",{parentName:"li"},"-f")," \uc635\uc158\uc744 \uc8fc\uba74 \ub2e4\ub978 \ud30c\uc77c\uba85\uc73c\ub85c\ub3c4 \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"ex) ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build -f dockerfile-asdf .")," \ub3c4 \uac00\ub2a5")))))),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc2e4\uc2b5\uc744 \uc704\ud574\uc11c \ud3b8\ud55c \ub514\ub809\ud1a0\ub9ac\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd \n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"docker-practice \ub77c\ub294 \uc774\ub984\uc758 \ud3f4\ub354\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir docker-practice\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"docker-practice \ud3f4\ub354\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd docker-practice\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Dockerfile \uc774\ub77c\ub294 \ube48 \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"touch Dockerfile\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n")))),(0,a.kt)("h2",{id:"2-dockerfile-\ub0b4\uc7a5-\uba85\ub839\uc5b4"},"2. Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4"),(0,a.kt)("p",null,"Dockerfile \uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ubcf8\uc801\uc778 \uba85\ub839\uc5b4\uc5d0 \ub300\ud574\uc11c \ud558\ub098\uc529 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"from"},"FROM"),(0,a.kt)("p",null,"Dockerfile \uc774 base image \ub85c \uc5b4\ub5a0\ud55c \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud560 \uac83\uc778\uc9c0\ub97c \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c, \uc544\ubb34\uac83\ub3c4 \uc5c6\ub294 \ube48 \ud658\uacbd\uc5d0\uc11c\ubd80\ud130 \ud558\ub098\ud558\ub098\uc529 \uc81c\uac00 \uc758\ub3c4\ud55c \ud658\uacbd\uc744 \ub9cc\ub4e4\uc5b4\uac00\ub294\uac8c \uc544\ub2c8\ub77c, python 3.9 \ubc84\uc804\uc774 \uc124\uce58\ub41c \ud658\uacbd\uc744 \ubca0\uc774\uc2a4\ub85c\ud574\ub450\uace0, \uc800\ub294 pytorch \ub97c \uc124\uce58\ud558\uace0, \uc81c \uc18c\uc2a4\ucf54\ub4dc\ub9cc \ub123\uc5b4\ub450\ub294 \ud615\ud0dc\ub85c \ud65c\uc6a9\ud560 \uc218\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \uacbd\uc6b0\uc5d0\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"python:3.9"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"python-3.9-alpine"),", ... \ub4f1\uc758 \uc798 \ub9cc\ub4e4\uc5b4\uc9c4 \uc774\ubbf8\uc9c0\ub97c \ubca0\uc774\uc2a4\ub85c \ud65c\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"FROM [:] [AS ]\n\n# \uc608\uc2dc\nFROM ubuntu\nFROM ubuntu:18.04\nFROM nginx:latest AS ngx\n")),(0,a.kt)("h3",{id:"copy"},"COPY"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"host(\ub85c\uceec)\uc5d0\uc11c\uc758 ",(0,a.kt)("inlineCode",{parentName:"strong"},""))," \uacbd\ub85c\uc758 \ud30c\uc77c \ud639\uc740 \ub514\ub809\ud1a0\ub9ac\ub97c ",(0,a.kt)("strong",{parentName:"p"},"container \ub0b4\ubd80\uc5d0\uc11c\uc758 ",(0,a.kt)("inlineCode",{parentName:"strong"},""))," \uacbd\ub85c\uc5d0 \ubcf5\uc0ac\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"COPY ... \n\n# \uc608\uc2dc\nCOPY a.txt /some-directory/b.txt\nCOPY my-directory /some-directory-2\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ADD")," \ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY")," \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc \ucd94\uac00\uc801\uc778 \uae30\ub2a5\uc744 \ud488\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# 1 - \ud638\uc2a4\ud2b8\uc5d0 \uc555\ucd95\ub418\uc5b4\uc788\ub294 \ud30c\uc77c\uc744 \ud480\uba74\uc11c \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\ub85c copy \ud560 \uc218 \uc788\uc74c\nADD scripts.tar.gz /tmp\n# 2 - Remote URLs \uc5d0 \uc788\ub294 \ud30c\uc77c\uc744 \uc18c\uc2a4 \uacbd\ub85c\ub85c \uc9c0\uc815\ud560 \uc218 \uc788\uc74c\nADD http://www.example.com/script.sh /tmp\n\n# \uc704 \ub450 \uac00\uc9c0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \uacbd\uc6b0\uc5d0\ub9cc COPY \ub300\uc2e0 ADD \ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\n")),(0,a.kt)("h3",{id:"run"},"RUN"),(0,a.kt)("p",null,"\uba85\uc2dc\ud55c \ucee4\ub9e8\ub4dc\ub97c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc2e4\ud589\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 \ud574\ub2f9 \ucee4\ub9e8\ub4dc\ub4e4\uc774 \uc2e4\ud589\ub41c \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'RUN \nRUN ["executable-command", "parameter1", "parameter2"]\n\n# \uc608\uc2dc\nRUN pip install torch\nRUN pip install -r requirements.txt\n')),(0,a.kt)("h3",{id:"cmd"},"CMD"),(0,a.kt)("p",null,"\uba85\uc2dc\ud55c \ucee4\ub9e8\ub4dc\ub97c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uac00 ",(0,a.kt)("strong",{parentName:"p"},"\uc2dc\uc791\ub420 \ub54c"),", \uc2e4\ud589\ud558\ub294 \uac83\uc744 \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud558\ub294 \uba85\ub839\uc5b4\ub85c ",(0,a.kt)("strong",{parentName:"p"},"ENTRYPOINT")," \uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub458\uc758 \ucc28\uc774\uc5d0 \ub300\ud574\uc11c\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\ub4a4\uc5d0\uc11c")," \ub2e4\ub8f9\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\ub098\uc758 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\uc5d0\uc11c\ub294 \ud558\ub098\uc758 ",(0,a.kt)("strong",{parentName:"p"},"CMD")," \ub9cc \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"RUN")," \uba85\ub839\uc5b4\uc640 \ub2e4\ub985\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'CMD \nCMD ["executable-command", "parameter1", "parameter2"]\nCMD ["parameter1", "parameter2"] # ENTRYPOINT \uc640 \ud568\uaed8 \uc0ac\uc6a9\ub420 \ub54c\n\n# \uc608\uc2dc\nCMD python main.py\n')),(0,a.kt)("h3",{id:"workdir"},"WORKDIR"),(0,a.kt)("p",null,"\uc774\ud6c4 \ucd94\uac00\ub420 \uba85\ub839\uc5b4\ub97c \ucee8\ud14c\uc774\ub108 \ub0b4\uc758 \uc5b4\ub5a4 \ub514\ub809\ud1a0\ub9ac\uc5d0\uc11c \uc218\ud589\ud560 \uac83\uc778\uc9c0\ub97c \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \ud574\ub2f9 \ub514\ub809\ud1a0\ub9ac\uac00 \uc5c6\ub2e4\uba74 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"WORKDIR /path/to/workdir\n\n# \uc608\uc2dc\nWORKDIR /home/demo\nRUN pwd # /home/demo \uac00 \ucd9c\ub825\ub428\n")),(0,a.kt)("h3",{id:"env"},"ENV"),(0,a.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc9c0\uc18d\uc801\uc73c\ub85c \uc0ac\uc6a9\ub420 environment variable \uc758 \uac12\uc744 \uc124\uc815\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"ENV \nENV =\n\n# \uc608\uc2dc\n# default \uc5b8\uc5b4 \uc124\uc815\nRUN locale-gen ko_KR.UTF-8\nENV LANG ko_KR.UTF-8\nENV LANGUAGE ko_KR.UTF-8\nENV LC_ALL ko_KR.UTF-8\n")),(0,a.kt)("h3",{id:"expose"},"EXPOSE"),(0,a.kt)("p",null,"\ucee8\ud14c\uc774\ub108\uc5d0\uc11c \ub6ab\uc5b4\uc904 \ud3ec\ud2b8/\ud504\ub85c\ud1a0\ucf5c\uc744 \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("inlineCode",{parentName:"p"},"")," \uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 TCP \uac00 \ub514\ud3f4\ud2b8\ub85c \uc124\uc815\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"EXPOSE \nEXPOSE /\n\n# \uc608\uc2dc\nEXPOSE 8080\n")),(0,a.kt)("h2",{id:"3-\uac04\ub2e8\ud55c-dockerfile-\uc791\uc131\ud574\ubcf4\uae30"},"3. \uac04\ub2e8\ud55c Dockerfile \uc791\uc131\ud574\ubcf4\uae30"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"vim Dockerfile")," \ud639\uc740 vscode \ub4f1 \ubcf8\uc778\uc774 \uc0ac\uc6a9\ud558\ub294 \ud3b8\uc9d1\uae30\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \uc744 \uc5f4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud574\uc90d\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# base image \ub97c ubuntu 18.04 \ub85c \uc124\uc815\ud569\ub2c8\ub2e4.\nFROM ubuntu:18.04\n\n# apt-get update \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.\nRUN apt-get update\n\n# TEST env var\uc758 \uac12\uc744 hello \ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4.\nENV TEST hello\n\n# DOCKER CONTAINER \uac00 \uc2dc\uc791\ub420 \ub54c, \ud658\uacbd\ubcc0\uc218 TEST \uc758 \uac12\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.\nCMD echo $TEST\n")),(0,a.kt)("h2",{id:"4-docker-build-from-dockerfile"},"4. Docker build from Dockerfile"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"docker build")," \uba85\ub839\uc5b4\ub85c Dockerfile \ub85c\ubd80\ud130 Docker Image \ub97c \ub9cc\ub4e4\uc5b4\ubd05\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker build --help\n")),(0,a.kt)("p",null,"Dockerfile \uc774 \uc788\ub294 \uacbd\ub85c\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -t my-image:v1.0.0 .\n")),(0,a.kt)("p",null,"\uc704 \ucee4\ub9e8\ub4dc\ub97c \uc124\uba85\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},".")," : ",(0,a.kt)("strong",{parentName:"li"},"\ud604\uc7ac \uacbd\ub85c"),"\uc5d0 \uc788\ub294 Dockerfile \ub85c\ubd80\ud130"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-t")," : my-image \ub77c\ub294 ",(0,a.kt)("strong",{parentName:"li"},"\uc774\ub984"),"\uacfc v1.0.0 \uc774\ub77c\ub294 ",(0,a.kt)("strong",{parentName:"li"},"\ud0dc\uadf8"),"\ub85c ",(0,a.kt)("strong",{parentName:"li"},"\uc774\ubbf8\uc9c0"),"\ub97c"),(0,a.kt)("li",{parentName:"ul"},"\ube4c\ub4dc\ud558\uaca0\ub2e4\ub77c\ub294 \uba85\ub839\uc5b4")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc774\ubbf8\uc9c0 \ube4c\ub4dc\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"# grep : my-image \uac00 \uc788\ub294\uc9c0\ub97c \uc7a1\uc544\ub0b4\ub294 (grep) \ud558\ub294 \uba85\ub839\uc5b4\ndocker images | grep my-image\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"my-image v1.0.0 143114710b2d 3 seconds ago 87.9MB\n")),(0,a.kt)("h2",{id:"5-docker-run-from-dockerfile"},"5. Docker run from Dockerfile"),(0,a.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \ubc29\uae08 \ube4c\ub4dc\ud55c ",(0,a.kt)("inlineCode",{parentName:"p"},"my-image:v1.0.0")," \uc774\ubbf8\uc9c0\ub85c docker \ucee8\ud14c\uc774\ub108\ub97c ",(0,a.kt)("strong",{parentName:"p"},"run")," \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run my-image:v1.0.0\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"hello\n")),(0,a.kt)("h2",{id:"6-docker-run-with-env"},"6. Docker run with env"),(0,a.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 \ubc29\uae08 \ube4c\ub4dc\ud55c ",(0,a.kt)("inlineCode",{parentName:"p"},"my-image:v1.0.0")," \uc774\ubbf8\uc9c0\ub97c \uc2e4\ud589\ud558\ub294 \uc2dc\uc810\uc5d0, ",(0,a.kt)("inlineCode",{parentName:"p"},"TEST")," env var \uc758 \uac12\uc744 \ubcc0\uacbd\ud558\uc5ec docker \ucee8\ud14c\uc774\ub108\ub97c run \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -e TEST=bye my-image:v1.0.0\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"bye\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3f2d0791.e8223b40.js b/assets/js/3f2d0791.e8223b40.js deleted file mode 100644 index 06ee8150..00000000 --- a/assets/js/3f2d0791.e8223b40.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5435],{3905:(e,t,r)=>{r.d(t,{Zo:()=>k,kt:()=>s});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},k=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,k=i(e,["components","mdxType","originalType","parentName"]),m=c(r),u=a,s=m["".concat(p,".").concat(u)]||m[u]||d[u]||l;return r?n.createElement(s,o(o({ref:t},k),{},{components:r})):n.createElement(s,o({ref:t},k))}));function s(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[m]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const l={title:"[Practice] Docker images",description:"Practice to use docker image.",sidebar_position:5,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/images",id:"prerequisites/docker/images",title:"[Practice] Docker images",description:"Practice to use docker image.",source:"@site/docs/prerequisites/docker/images.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/images",permalink:"/docs/prerequisites/docker/images",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/images.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"[Practice] Docker images",description:"Practice to use docker image.",sidebar_position:5,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"[Practice] Docker command",permalink:"/docs/prerequisites/docker/command"},next:{title:"[Practice] Docker Advanced",permalink:"/docs/prerequisites/docker/advanced"}},p={},c=[{value:"1. Dockerfile \ub9cc\ub4e4\uae30",id:"1-dockerfile-\ub9cc\ub4e4\uae30",level:2},{value:"2. Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4",id:"2-dockerfile-\ub0b4\uc7a5-\uba85\ub839\uc5b4",level:2},{value:"FROM",id:"from",level:3},{value:"COPY",id:"copy",level:3},{value:"RUN",id:"run",level:3},{value:"CMD",id:"cmd",level:3},{value:"WORKDIR",id:"workdir",level:3},{value:"ENV",id:"env",level:3},{value:"EXPOSE",id:"expose",level:3},{value:"3. \uac04\ub2e8\ud55c Dockerfile \uc791\uc131\ud574\ubcf4\uae30",id:"3-\uac04\ub2e8\ud55c-dockerfile-\uc791\uc131\ud574\ubcf4\uae30",level:2},{value:"4. Docker build from Dockerfile",id:"4-docker-build-from-dockerfile",level:2},{value:"5. Docker run from Dockerfile",id:"5-docker-run-from-dockerfile",level:2},{value:"6. Docker run with env",id:"6-docker-run-with-env",level:2}],k={toc:c},m="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(m,(0,n.Z)({},k,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-dockerfile-\ub9cc\ub4e4\uae30"},"1. Dockerfile \ub9cc\ub4e4\uae30"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4dc\ub294 \uac00\uc7a5 \uc26c\uc6b4 \ubc29\ubc95\uc740 \ub3c4\ucee4\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf\uc778 Dockerfile\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\uc678\uc5d0\ub294 running container \ub97c docker image \ub85c \ub9cc\ub4dc\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker commit")," \ub4f1\uc744 \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\uc790\uac00 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub3c4\ub85d, \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf"),(0,a.kt)("li",{parentName:"ul"},"\ud30c\uc77c\uba85\uc740 \uaf2d ",(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile")," \uc774 \uc544\ub2c8\uc5b4\ub3c4 \uc0c1\uad00\uc5c6\uc9c0\ub9cc, ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build")," \uc218\ud589 \uc2dc, default \ub85c \uc0ac\uc6a9\ud558\ub294 \ud30c\uc77c\uba85\uc774 ",(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile")," \uc785\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ul"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4dc\ub294 ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build")," \ub97c \uc218\ud589\ud560 \ub54c, ",(0,a.kt)("inlineCode",{parentName:"li"},"-f")," \uc635\uc158\uc744 \uc8fc\uba74 \ub2e4\ub978 \ud30c\uc77c\uba85\uc73c\ub85c\ub3c4 \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"ex) ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build -f dockerfile-asdf .")," \ub3c4 \uac00\ub2a5")))))),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc2e4\uc2b5\uc744 \uc704\ud574\uc11c \ud3b8\ud55c \ub514\ub809\ud1a0\ub9ac\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd \n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"docker-practice \ub77c\ub294 \uc774\ub984\uc758 \ud3f4\ub354\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir docker-practice\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"docker-practice \ud3f4\ub354\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd docker-practice\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Dockerfile \uc774\ub77c\ub294 \ube48 \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"touch Dockerfile\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n")))),(0,a.kt)("h2",{id:"2-dockerfile-\ub0b4\uc7a5-\uba85\ub839\uc5b4"},"2. Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4"),(0,a.kt)("p",null,"Dockerfile \uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ubcf8\uc801\uc778 \uba85\ub839\uc5b4\uc5d0 \ub300\ud574\uc11c \ud558\ub098\uc529 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"from"},"FROM"),(0,a.kt)("p",null,"Dockerfile \uc774 base image \ub85c \uc5b4\ub5a0\ud55c \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud560 \uac83\uc778\uc9c0\ub97c \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c, \uc544\ubb34\uac83\ub3c4 \uc5c6\ub294 \ube48 \ud658\uacbd\uc5d0\uc11c\ubd80\ud130 \ud558\ub098\ud558\ub098\uc529 \uc81c\uac00 \uc758\ub3c4\ud55c \ud658\uacbd\uc744 \ub9cc\ub4e4\uc5b4\uac00\ub294\uac8c \uc544\ub2c8\ub77c, python 3.9 \ubc84\uc804\uc774 \uc124\uce58\ub41c \ud658\uacbd\uc744 \ubca0\uc774\uc2a4\ub85c\ud574\ub450\uace0, \uc800\ub294 pytorch \ub97c \uc124\uce58\ud558\uace0, \uc81c \uc18c\uc2a4\ucf54\ub4dc\ub9cc \ub123\uc5b4\ub450\ub294 \ud615\ud0dc\ub85c \ud65c\uc6a9\ud560 \uc218\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \uacbd\uc6b0\uc5d0\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"python:3.9"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"python-3.9-alpine"),", ... \ub4f1\uc758 \uc798 \ub9cc\ub4e4\uc5b4\uc9c4 \uc774\ubbf8\uc9c0\ub97c \ubca0\uc774\uc2a4\ub85c \ud65c\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"FROM [:] [AS ]\n\n# \uc608\uc2dc\nFROM ubuntu\nFROM ubuntu:18.04\nFROM nginx:latest AS ngx\n")),(0,a.kt)("h3",{id:"copy"},"COPY"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"host(\ub85c\uceec)\uc5d0\uc11c\uc758 ",(0,a.kt)("inlineCode",{parentName:"strong"},""))," \uacbd\ub85c\uc758 \ud30c\uc77c \ud639\uc740 \ub514\ub809\ud1a0\ub9ac\ub97c ",(0,a.kt)("strong",{parentName:"p"},"container \ub0b4\ubd80\uc5d0\uc11c\uc758 ",(0,a.kt)("inlineCode",{parentName:"strong"},""))," \uacbd\ub85c\uc5d0 \ubcf5\uc0ac\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"COPY ... \n\n# \uc608\uc2dc\nCOPY a.txt /some-directory/b.txt\nCOPY my-directory /some-directory-2\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ADD")," \ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY")," \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc \ucd94\uac00\uc801\uc778 \uae30\ub2a5\uc744 \ud488\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# 1 - \ud638\uc2a4\ud2b8\uc5d0 \uc555\ucd95\ub418\uc5b4\uc788\ub294 \ud30c\uc77c\uc744 \ud480\uba74\uc11c \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\ub85c copy \ud560 \uc218 \uc788\uc74c\nADD scripts.tar.gz /tmp\n# 2 - Remote URLs \uc5d0 \uc788\ub294 \ud30c\uc77c\uc744 \uc18c\uc2a4 \uacbd\ub85c\ub85c \uc9c0\uc815\ud560 \uc218 \uc788\uc74c\nADD http://www.example.com/script.sh /tmp\n\n# \uc704 \ub450 \uac00\uc9c0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \uacbd\uc6b0\uc5d0\ub9cc COPY \ub300\uc2e0 ADD \ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\n")),(0,a.kt)("h3",{id:"run"},"RUN"),(0,a.kt)("p",null,"\uba85\uc2dc\ud55c \ucee4\ub9e8\ub4dc\ub97c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc2e4\ud589\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 \ud574\ub2f9 \ucee4\ub9e8\ub4dc\ub4e4\uc774 \uc2e4\ud589\ub41c \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'RUN \nRUN ["executable-command", "parameter1", "parameter2"]\n\n# \uc608\uc2dc\nRUN pip install torch\nRUN pip install -r requirements.txt\n')),(0,a.kt)("h3",{id:"cmd"},"CMD"),(0,a.kt)("p",null,"\uba85\uc2dc\ud55c \ucee4\ub9e8\ub4dc\ub97c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uac00 ",(0,a.kt)("strong",{parentName:"p"},"\uc2dc\uc791\ub420 \ub54c"),", \uc2e4\ud589\ud558\ub294 \uac83\uc744 \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud558\ub294 \uba85\ub839\uc5b4\ub85c ",(0,a.kt)("strong",{parentName:"p"},"ENTRYPOINT")," \uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub458\uc758 \ucc28\uc774\uc5d0 \ub300\ud574\uc11c\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\ub4a4\uc5d0\uc11c")," \ub2e4\ub8f9\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\ub098\uc758 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\uc5d0\uc11c\ub294 \ud558\ub098\uc758 ",(0,a.kt)("strong",{parentName:"p"},"CMD")," \ub9cc \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"RUN")," \uba85\ub839\uc5b4\uc640 \ub2e4\ub985\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'CMD \nCMD ["executable-command", "parameter1", "parameter2"]\nCMD ["parameter1", "parameter2"] # ENTRYPOINT \uc640 \ud568\uaed8 \uc0ac\uc6a9\ub420 \ub54c\n\n# \uc608\uc2dc\nCMD python main.py\n')),(0,a.kt)("h3",{id:"workdir"},"WORKDIR"),(0,a.kt)("p",null,"\uc774\ud6c4 \ucd94\uac00\ub420 \uba85\ub839\uc5b4\ub97c \ucee8\ud14c\uc774\ub108 \ub0b4\uc758 \uc5b4\ub5a4 \ub514\ub809\ud1a0\ub9ac\uc5d0\uc11c \uc218\ud589\ud560 \uac83\uc778\uc9c0\ub97c \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \ud574\ub2f9 \ub514\ub809\ud1a0\ub9ac\uac00 \uc5c6\ub2e4\uba74 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"WORKDIR /path/to/workdir\n\n# \uc608\uc2dc\nWORKDIR /home/demo\nRUN pwd # /home/demo \uac00 \ucd9c\ub825\ub428\n")),(0,a.kt)("h3",{id:"env"},"ENV"),(0,a.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc9c0\uc18d\uc801\uc73c\ub85c \uc0ac\uc6a9\ub420 environment variable \uc758 \uac12\uc744 \uc124\uc815\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"ENV \nENV =\n\n# \uc608\uc2dc\n# default \uc5b8\uc5b4 \uc124\uc815\nRUN locale-gen ko_KR.UTF-8\nENV LANG ko_KR.UTF-8\nENV LANGUAGE ko_KR.UTF-8\nENV LC_ALL ko_KR.UTF-8\n")),(0,a.kt)("h3",{id:"expose"},"EXPOSE"),(0,a.kt)("p",null,"\ucee8\ud14c\uc774\ub108\uc5d0\uc11c \ub6ab\uc5b4\uc904 \ud3ec\ud2b8/\ud504\ub85c\ud1a0\ucf5c\uc744 \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("inlineCode",{parentName:"p"},"")," \uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 TCP \uac00 \ub514\ud3f4\ud2b8\ub85c \uc124\uc815\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"EXPOSE \nEXPOSE /\n\n# \uc608\uc2dc\nEXPOSE 8080\n")),(0,a.kt)("h2",{id:"3-\uac04\ub2e8\ud55c-dockerfile-\uc791\uc131\ud574\ubcf4\uae30"},"3. \uac04\ub2e8\ud55c Dockerfile \uc791\uc131\ud574\ubcf4\uae30"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"vim Dockerfile")," \ud639\uc740 vscode \ub4f1 \ubcf8\uc778\uc774 \uc0ac\uc6a9\ud558\ub294 \ud3b8\uc9d1\uae30\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \uc744 \uc5f4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud574\uc90d\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# base image \ub97c ubuntu 18.04 \ub85c \uc124\uc815\ud569\ub2c8\ub2e4.\nFROM ubuntu:18.04\n\n# apt-get update \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.\nRUN apt-get update\n\n# TEST env var\uc758 \uac12\uc744 hello \ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4.\nENV TEST hello\n\n# DOCKER CONTAINER \uac00 \uc2dc\uc791\ub420 \ub54c, \ud658\uacbd\ubcc0\uc218 TEST \uc758 \uac12\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.\nCMD echo $TEST\n")),(0,a.kt)("h2",{id:"4-docker-build-from-dockerfile"},"4. Docker build from Dockerfile"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"docker build")," \uba85\ub839\uc5b4\ub85c Dockerfile \ub85c\ubd80\ud130 Docker Image \ub97c \ub9cc\ub4e4\uc5b4\ubd05\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker build --help\n")),(0,a.kt)("p",null,"Dockerfile \uc774 \uc788\ub294 \uacbd\ub85c\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -t my-image:v1.0.0 .\n")),(0,a.kt)("p",null,"\uc704 \ucee4\ub9e8\ub4dc\ub97c \uc124\uba85\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},".")," : ",(0,a.kt)("strong",{parentName:"li"},"\ud604\uc7ac \uacbd\ub85c"),"\uc5d0 \uc788\ub294 Dockerfile \ub85c\ubd80\ud130"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-t")," : my-image \ub77c\ub294 ",(0,a.kt)("strong",{parentName:"li"},"\uc774\ub984"),"\uacfc v1.0.0 \uc774\ub77c\ub294 ",(0,a.kt)("strong",{parentName:"li"},"\ud0dc\uadf8"),"\ub85c ",(0,a.kt)("strong",{parentName:"li"},"\uc774\ubbf8\uc9c0"),"\ub97c"),(0,a.kt)("li",{parentName:"ul"},"\ube4c\ub4dc\ud558\uaca0\ub2e4\ub77c\ub294 \uba85\ub839\uc5b4")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc774\ubbf8\uc9c0 \ube4c\ub4dc\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"# grep : my-image \uac00 \uc788\ub294\uc9c0\ub97c \uc7a1\uc544\ub0b4\ub294 (grep) \ud558\ub294 \uba85\ub839\uc5b4\ndocker images | grep my-image\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"my-image v1.0.0 143114710b2d 3 seconds ago 87.9MB\n")),(0,a.kt)("h2",{id:"5-docker-run-from-dockerfile"},"5. Docker run from Dockerfile"),(0,a.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \ubc29\uae08 \ube4c\ub4dc\ud55c ",(0,a.kt)("inlineCode",{parentName:"p"},"my-image:v1.0.0")," \uc774\ubbf8\uc9c0\ub85c docker \ucee8\ud14c\uc774\ub108\ub97c ",(0,a.kt)("strong",{parentName:"p"},"run")," \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run my-image:v1.0.0\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"hello\n")),(0,a.kt)("h2",{id:"6-docker-run-with-env"},"6. Docker run with env"),(0,a.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 \ubc29\uae08 \ube4c\ub4dc\ud55c ",(0,a.kt)("inlineCode",{parentName:"p"},"my-image:v1.0.0")," \uc774\ubbf8\uc9c0\ub97c \uc2e4\ud589\ud558\ub294 \uc2dc\uc810\uc5d0, ",(0,a.kt)("inlineCode",{parentName:"p"},"TEST")," env var \uc758 \uac12\uc744 \ubcc0\uacbd\ud558\uc5ec docker \ucee8\ud14c\uc774\ub108\ub97c run \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -e TEST=bye my-image:v1.0.0\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"bye\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/44d64813.d301fba7.js b/assets/js/44d64813.d301fba7.js deleted file mode 100644 index a9d3c583..00000000 --- a/assets/js/44d64813.d301fba7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4023],{3905:(n,e,t)=>{t.d(e,{Zo:()=>p,kt:()=>_});var a=t(7294);function l(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function r(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,a)}return t}function i(n){for(var e=1;e=0||(l[t]=n[t]);return l}(n,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(l[t]=n[t])}return l}var s=a.createContext({}),m=function(n){var e=a.useContext(s),t=e;return n&&(t="function"==typeof n?n(e):i(i({},e),n)),t},p=function(n){var e=m(n.components);return a.createElement(s.Provider,{value:e},n.children)},d="mdxType",c={inlineCode:"code",wrapper:function(n){var e=n.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(n,e){var t=n.components,l=n.mdxType,r=n.originalType,s=n.parentName,p=o(n,["components","mdxType","originalType","parentName"]),d=m(t),u=l,_=d["".concat(s,".").concat(u)]||d[u]||c[u]||r;return t?a.createElement(_,i(i({ref:e},p),{},{components:t})):a.createElement(_,i({ref:e},p))}));function _(n,e){var t=arguments,l=e&&e.mdxType;if("string"==typeof n||l){var r=t.length,i=new Array(r);i[0]=u;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=n,o[d]="string"==typeof n?n:l,i[1]=o;for(var m=2;m{t.r(e),t.d(e,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>m});var a=t(7462),l=(t(7294),t(3905));const r={title:"6. Multi Models",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},i=void 0,o={unversionedId:"api-deployment/seldon-children",id:"api-deployment/seldon-children",title:"6. Multi Models",description:"",source:"@site/docs/api-deployment/seldon-children.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-children",permalink:"/docs/api-deployment/seldon-children",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-children.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"6. Multi Models",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"5. Model from MLflow",permalink:"/docs/api-deployment/seldon-mlflow"},next:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",permalink:"/docs/appendix/pyenv"}},s={},m=[{value:"Multi Models",id:"multi-models",level:2},{value:"Pipeline",id:"pipeline",level:2}],p={toc:m},d="wrapper";function c(n){let{components:e,...r}=n;return(0,l.kt)(d,(0,a.Z)({},p,r,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"multi-models"},"Multi Models"),(0,l.kt)("p",null,"\uc55e\uc11c \uc124\uba85\ud588\ub358 \ubc29\ubc95\ub4e4\uc740 \ubaa8\ub450 \ub2e8\uc77c \ubaa8\ub378\uc744 \ub300\uc0c1\uc73c\ub85c \ud588\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc5ec\ub7ec \uac1c\uc758 \ubaa8\ub378\uc744 \uc5f0\uacb0\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubd05\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"pipeline"},"Pipeline"),(0,l.kt)("p",null,"\uc6b0\uc120 \ubaa8\ub378\uc744 2\uac1c\ub97c \uc0dd\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa8\ub378\uc740 \uc55e\uc11c \uc0ac\uc6a9\ud55c SVC \ubaa8\ub378\uc5d0 StandardScaler\ub97c \ucd94\uac00\ud558\uace0 \uc800\uc7a5\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_scaler_from_csv(\n data_path: InputPath("csv"),\n scaled_data_path: OutputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n):\n import dill\n import pandas as pd\n from sklearn.preprocessing import StandardScaler\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n data = pd.read_csv(data_path)\n\n scaler = StandardScaler()\n scaled_data = scaler.fit_transform(data)\n scaled_data = pd.DataFrame(scaled_data, columns=data.columns, index=data.index)\n\n scaled_data.to_csv(scaled_data_path, index=False)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(scaler, file_writer)\n\n input_example = data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(data, scaler.transform(data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["scikit-learn"],\n install_mlflow=False\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_svc_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["scikit-learn"],\n install_mlflow=False\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n\nfrom kfp.dsl import pipeline\n\n\n@pipeline(name="multi_model_pipeline")\ndef multi_model_pipeline(kernel: str = "rbf"):\n iris_data = load_iris_data()\n scaled_data = train_scaler_from_csv(data=iris_data.outputs["data"])\n _ = upload_sklearn_model_to_mlflow(\n model_name="scaler",\n model=scaled_data.outputs["model"],\n input_example=scaled_data.outputs["input_example"],\n signature=scaled_data.outputs["signature"],\n conda_env=scaled_data.outputs["conda_env"],\n )\n model = train_svc_from_csv(\n train_data=scaled_data.outputs["scaled_data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name="svc",\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(multi_model_pipeline, "multi_model_pipeline.yaml")\n\n')),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"children-kubeflow.png",src:t(9023).Z,width:"2698",height:"1886"})),(0,l.kt)("p",null,"MLflow \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub450 \uac1c\uc758 \ubaa8\ub378\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"children-mlflow.png",src:t(4483).Z,width:"3006",height:"1744"})),(0,l.kt)("p",null,"\uac01\uac01\uc758 run_id\ub97c \ud655\uc778 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc774 SeldonDeployment \uc2a4\ud399\uc744 \uc815\uc758\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: multi-model-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: scaler-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/7f445015a0e94519b003d316478766ef/artifacts/scaler"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n - name: svc-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/87eb168e76264b39a24b0e5ca0fe922b/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: scaler\n image: seldonio/mlflowserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n - name: svc\n image: seldonio/mlflowserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n')),(0,l.kt)("p",null,"\ubaa8\ub378\uc774 \ub450 \uac1c\uac00 \ub418\uc5c8\uc73c\ubbc0\ub85c \uac01 \ubaa8\ub378\uc758 initContainer\uc640 container\ub97c \uc815\uc758\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\uc774 \ud544\ub4dc\ub294 \uc785\ub825\uac12\uc744 array\ub85c \ubc1b\uc73c\uba70 \uc21c\uc11c\ub294 \uad00\uacc4\uc5c6\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa8\ub378\uc774 \uc2e4\ud589\ud558\ub294 \uc21c\uc11c\ub294 graph\uc5d0\uc11c \uc815\uc758\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n')),(0,l.kt)("p",null,"graph\uc758 \ub3d9\uc791 \ubc29\uc2dd\uc740 \ucc98\uc74c \ubc1b\uc740 \uac12\uc744 \uc815\ud574\uc9c4 predict_method\ub85c \ubcc0\ud658\ud55c \ub4a4 children\uc73c\ub85c \uc815\uc758\ub41c \ubaa8\ub378\uc5d0 \uc804\ub2ec\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.\n\uc774 \uacbd\uc6b0 scaler -> svc \ub85c \ub370\uc774\ud130\uac00 \uc804\ub2ec\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\uc81c \uc704\uc758 \uc2a4\ud399\uc744 yaml\ud30c\uc77c\ub85c \uc0dd\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'cat < multi-model.yaml\napiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: multi-model-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: scaler-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/7f445015a0e94519b003d316478766ef/artifacts/scaler"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n - name: svc-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/87eb168e76264b39a24b0e5ca0fe922b/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: scaler\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n - name: svc\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\nEOF\n')),(0,l.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 API\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f multi-model.yaml\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"seldondeployment.machinelearning.seldon.io/multi-model-example created\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub410\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow-user-example-com | grep multi-model-example\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c pod\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"multi-model-example-model-0-scaler-svc-9955fb795-n9ffw 4/4 Running 0 2m30s\n")))}c.isMDXComponent=!0},9023:(n,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/children-kubeflow-5100745b1be1aa100dd153b1785ad218.png"},4483:(n,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/children-mlflow-5190d0e3f19a5772de21d1b08ece4822.png"}}]); \ No newline at end of file diff --git a/assets/js/44d64813.d9918c45.js b/assets/js/44d64813.d9918c45.js new file mode 100644 index 00000000..f855f082 --- /dev/null +++ b/assets/js/44d64813.d9918c45.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4023],{3905:(n,e,t)=>{t.d(e,{Zo:()=>p,kt:()=>_});var a=t(7294);function l(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function r(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,a)}return t}function i(n){for(var e=1;e=0||(l[t]=n[t]);return l}(n,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(l[t]=n[t])}return l}var s=a.createContext({}),m=function(n){var e=a.useContext(s),t=e;return n&&(t="function"==typeof n?n(e):i(i({},e),n)),t},p=function(n){var e=m(n.components);return a.createElement(s.Provider,{value:e},n.children)},d="mdxType",c={inlineCode:"code",wrapper:function(n){var e=n.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(n,e){var t=n.components,l=n.mdxType,r=n.originalType,s=n.parentName,p=o(n,["components","mdxType","originalType","parentName"]),d=m(t),u=l,_=d["".concat(s,".").concat(u)]||d[u]||c[u]||r;return t?a.createElement(_,i(i({ref:e},p),{},{components:t})):a.createElement(_,i({ref:e},p))}));function _(n,e){var t=arguments,l=e&&e.mdxType;if("string"==typeof n||l){var r=t.length,i=new Array(r);i[0]=u;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=n,o[d]="string"==typeof n?n:l,i[1]=o;for(var m=2;m{t.r(e),t.d(e,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>m});var a=t(7462),l=(t(7294),t(3905));const r={title:"6. Multi Models",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},i=void 0,o={unversionedId:"api-deployment/seldon-children",id:"api-deployment/seldon-children",title:"6. Multi Models",description:"",source:"@site/docs/api-deployment/seldon-children.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-children",permalink:"/docs/api-deployment/seldon-children",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-children.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"6. Multi Models",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"5. Model from MLflow",permalink:"/docs/api-deployment/seldon-mlflow"},next:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",permalink:"/docs/appendix/pyenv"}},s={},m=[{value:"Multi Models",id:"multi-models",level:2},{value:"Pipeline",id:"pipeline",level:2}],p={toc:m},d="wrapper";function c(n){let{components:e,...r}=n;return(0,l.kt)(d,(0,a.Z)({},p,r,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"multi-models"},"Multi Models"),(0,l.kt)("p",null,"\uc55e\uc11c \uc124\uba85\ud588\ub358 \ubc29\ubc95\ub4e4\uc740 \ubaa8\ub450 \ub2e8\uc77c \ubaa8\ub378\uc744 \ub300\uc0c1\uc73c\ub85c \ud588\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc5ec\ub7ec \uac1c\uc758 \ubaa8\ub378\uc744 \uc5f0\uacb0\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubd05\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"pipeline"},"Pipeline"),(0,l.kt)("p",null,"\uc6b0\uc120 \ubaa8\ub378\uc744 2\uac1c\ub97c \uc0dd\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa8\ub378\uc740 \uc55e\uc11c \uc0ac\uc6a9\ud55c SVC \ubaa8\ub378\uc5d0 StandardScaler\ub97c \ucd94\uac00\ud558\uace0 \uc800\uc7a5\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_scaler_from_csv(\n data_path: InputPath("csv"),\n scaled_data_path: OutputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n):\n import dill\n import pandas as pd\n from sklearn.preprocessing import StandardScaler\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n data = pd.read_csv(data_path)\n\n scaler = StandardScaler()\n scaled_data = scaler.fit_transform(data)\n scaled_data = pd.DataFrame(scaled_data, columns=data.columns, index=data.index)\n\n scaled_data.to_csv(scaled_data_path, index=False)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(scaler, file_writer)\n\n input_example = data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(data, scaler.transform(data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["scikit-learn"],\n install_mlflow=False\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_svc_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["scikit-learn"],\n install_mlflow=False\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n\nfrom kfp.dsl import pipeline\n\n\n@pipeline(name="multi_model_pipeline")\ndef multi_model_pipeline(kernel: str = "rbf"):\n iris_data = load_iris_data()\n scaled_data = train_scaler_from_csv(data=iris_data.outputs["data"])\n _ = upload_sklearn_model_to_mlflow(\n model_name="scaler",\n model=scaled_data.outputs["model"],\n input_example=scaled_data.outputs["input_example"],\n signature=scaled_data.outputs["signature"],\n conda_env=scaled_data.outputs["conda_env"],\n )\n model = train_svc_from_csv(\n train_data=scaled_data.outputs["scaled_data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name="svc",\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(multi_model_pipeline, "multi_model_pipeline.yaml")\n\n')),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"children-kubeflow.png",src:t(9023).Z,width:"2698",height:"1886"})),(0,l.kt)("p",null,"MLflow \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub450 \uac1c\uc758 \ubaa8\ub378\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"children-mlflow.png",src:t(4483).Z,width:"3006",height:"1744"})),(0,l.kt)("p",null,"\uac01\uac01\uc758 run_id\ub97c \ud655\uc778 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc774 SeldonDeployment \uc2a4\ud399\uc744 \uc815\uc758\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: multi-model-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: scaler-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/7f445015a0e94519b003d316478766ef/artifacts/scaler"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n - name: svc-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/87eb168e76264b39a24b0e5ca0fe922b/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: scaler\n image: seldonio/mlflowserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n - name: svc\n image: seldonio/mlflowserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n')),(0,l.kt)("p",null,"\ubaa8\ub378\uc774 \ub450 \uac1c\uac00 \ub418\uc5c8\uc73c\ubbc0\ub85c \uac01 \ubaa8\ub378\uc758 initContainer\uc640 container\ub97c \uc815\uc758\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\uc774 \ud544\ub4dc\ub294 \uc785\ub825\uac12\uc744 array\ub85c \ubc1b\uc73c\uba70 \uc21c\uc11c\ub294 \uad00\uacc4\uc5c6\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa8\ub378\uc774 \uc2e4\ud589\ud558\ub294 \uc21c\uc11c\ub294 graph\uc5d0\uc11c \uc815\uc758\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n')),(0,l.kt)("p",null,"graph\uc758 \ub3d9\uc791 \ubc29\uc2dd\uc740 \ucc98\uc74c \ubc1b\uc740 \uac12\uc744 \uc815\ud574\uc9c4 predict_method\ub85c \ubcc0\ud658\ud55c \ub4a4 children\uc73c\ub85c \uc815\uc758\ub41c \ubaa8\ub378\uc5d0 \uc804\ub2ec\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.\n\uc774 \uacbd\uc6b0 scaler -> svc \ub85c \ub370\uc774\ud130\uac00 \uc804\ub2ec\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\uc81c \uc704\uc758 \uc2a4\ud399\uc744 yaml\ud30c\uc77c\ub85c \uc0dd\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'cat < multi-model.yaml\napiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: multi-model-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: scaler-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/7f445015a0e94519b003d316478766ef/artifacts/scaler"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n - name: svc-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/87eb168e76264b39a24b0e5ca0fe922b/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: scaler\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n - name: svc\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\nEOF\n')),(0,l.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 API\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f multi-model.yaml\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"seldondeployment.machinelearning.seldon.io/multi-model-example created\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub410\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow-user-example-com | grep multi-model-example\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c pod\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"multi-model-example-model-0-scaler-svc-9955fb795-n9ffw 4/4 Running 0 2m30s\n")))}c.isMDXComponent=!0},9023:(n,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/children-kubeflow-5100745b1be1aa100dd153b1785ad218.png"},4483:(n,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/children-mlflow-5190d0e3f19a5772de21d1b08ece4822.png"}}]); \ No newline at end of file diff --git a/assets/js/4579a793.101b53f0.js b/assets/js/4579a793.101b53f0.js new file mode 100644 index 00000000..28decab7 --- /dev/null +++ b/assets/js/4579a793.101b53f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8737],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>c});var a=t(7294);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(p[t]=e[t]);return p}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(p[t]=e[t])}return p}var o=a.createContext({}),u=function(e){var n=a.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},m=function(e){var n=u(e.components);return a.createElement(o.Provider,{value:n},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},_=a.forwardRef((function(e,n){var t=e.components,p=e.mdxType,r=e.originalType,o=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=u(t),_=p,c=s["".concat(o,".").concat(_)]||s[_]||d[_]||r;return t?a.createElement(c,i(i({ref:n},m),{},{components:t})):a.createElement(c,i({ref:n},m))}));function c(e,n){var t=arguments,p=n&&n.mdxType;if("string"==typeof e||p){var r=t.length,i=new Array(r);i[0]=_;var l={};for(var o in n)hasOwnProperty.call(n,o)&&(l[o]=n[o]);l.originalType=e,l[s]="string"==typeof e?e:p,i[1]=l;for(var u=2;u{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var a=t(7462),p=(t(7294),t(3905));const r={title:"11. Pipeline - Run Result",description:"",sidebar_position:11,contributors:["Jongseob Jeon","SeungTae Kim"]},i=void 0,l={unversionedId:"kubeflow/advanced-run",id:"kubeflow/advanced-run",title:"11. Pipeline - Run Result",description:"",source:"@site/docs/kubeflow/advanced-run.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-run",permalink:"/docs/kubeflow/advanced-run",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-run.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:11,frontMatter:{title:"11. Pipeline - Run Result",description:"",sidebar_position:11,contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"10. Pipeline - Setting",permalink:"/docs/kubeflow/advanced-pipeline"},next:{title:"12. Component - MLFlow",permalink:"/docs/kubeflow/advanced-mlflow"}},o={},u=[{value:"Run Result",id:"run-result",level:2},{value:"Graph",id:"graph",level:2},{value:"Input/Output",id:"inputoutput",level:3},{value:"Logs",id:"logs",level:3},{value:"Visualizations",id:"visualizations",level:3},{value:"Run output",id:"run-output",level:2},{value:"Config",id:"config",level:2}],m={toc:u},s="wrapper";function d(e){let{components:n,...r}=e;return(0,p.kt)(s,(0,a.Z)({},m,r,{components:n,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"run-result"},"Run Result"),(0,p.kt)("p",null,"Run \uc2e4\ud589 \uacb0\uacfc\ub97c \ub20c\ub7ec\ubcf4\uba74 3\uac1c\uc758 \ud0ed\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4.\n\uac01\uac01 Graph, Run output, Config \uc785\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-0.png",src:t(57).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"graph"},"Graph"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-1.png",src:t(7834).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"\uadf8\ub798\ud504\uc5d0\uc11c\ub294 \uc2e4\ud589\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub204\ub974\uba74 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"inputoutput"},"Input/Output"),(0,p.kt)("p",null,"Input/Output \ud0ed\uc740 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud55c Config\ub4e4\uacfc Input, Output Artifacts\ub97c \ud655\uc778\ud558\uace0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"logs"},"Logs"),(0,p.kt)("p",null,"Logs\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc \uc2e4\ud589 \uc911 \ub098\uc624\ub294 \ubaa8\ub4e0 stdout\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\ub2e4\ub9cc pod\uc740 \uc77c\uc815 \uc2dc\uac04\uc774 \uc9c0\ub09c \ud6c4 \uc9c0\uc6cc\uc9c0\uae30 \ub54c\ubb38\uc5d0 \uc77c\uc815 \uc2dc\uac04\uc774 \uc9c0\ub098\uba74 \uc774 \ud0ed\uc5d0\uc11c\ub294 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\uc774\ub54c\ub294 Output artifacts\uc758 main-logs\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"visualizations"},"Visualizations"),(0,p.kt)("p",null,"Visualizations\uc5d0\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0dd\uc131\ub41c \ud50c\ub78f\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4."),(0,p.kt)("p",null,"\ud50c\ub78f\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},'mlpipeline_ui_metadata: OutputPath("UI_Metadata")')," argument\ub85c \ubcf4\uc5ec\uc8fc\uace0 \uc2f6\uc740 \uac12\uc744 \uc800\uc7a5\ud558\uba74 \ub429\ub2c8\ub2e4. \uc774 \ub54c \ud50c\ub78f\uc758 \ud615\ud0dc\ub294 html \ud3ec\ub9f7\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'\n@partial(\n create_component_from_func,\n packages_to_install=["matplotlib"],\n)\ndef plot_linear(\n mlpipeline_ui_metadata: OutputPath("UI_Metadata")\n):\n import base64\n import json\n from io import BytesIO\n\n import matplotlib.pyplot as plt\n\n plt.plot(x=[1, 2, 3], y=[1, 2,3])\n\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n')),(0,p.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import create_component_from_func, OutputPath\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["matplotlib"],\n)\ndef plot_linear(mlpipeline_ui_metadata: OutputPath("UI_Metadata")):\n import base64\n import json\n from io import BytesIO\n\n import matplotlib.pyplot as plt\n\n plt.plot([1, 2, 3], [1, 2, 3])\n\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n\n\n@pipeline(name="plot_pipeline")\ndef plot_pipeline():\n plot_linear()\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(plot_pipeline, "plot_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \ub098\uc628 ",(0,p.kt)("inlineCode",{parentName:"p"},"plot_pipeline.yaml"),"\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("details",null,(0,p.kt)("summary",null,"plot_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: plot-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9, pipelines.kubeflow.org/pipeline_compilation_time: \'2\n022-01-17T13:31:32.963214\',\n pipelines.kubeflow.org/pipeline_spec: \'{"name": "plot_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9}\nspec:\n entrypoint: plot-pipeline\n templates:\n - name: plot-linear\n container:\n args: [--mlpipeline-ui-metadata, /tmp/outputs/mlpipeline_ui_metadata/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'matplotlib\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet\n --no-warn-script-location \'matplotlib\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n def plot_linear(mlpipeline_ui_metadata):\n import base64\n import json\n from io import BytesIO\n import matplotlib.pyplot as plt\n plt.plot([1, 2, 3], [1, 2, 3])\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Plot linear\', description=\'\')\n _parser.add_argument("--mlpipeline-ui-metadata", dest="mlpipeline_ui_metadata", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n _outputs = plot_linear(**_parsed_args)\n image: python:3.7\n outputs:\n artifacts:\n - {name: mlpipeline-ui-metadata, path: /tmp/outputs/mlpipeline_ui_metadata/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--mlpipeline-ui-metadata", {"outputPath": "mlpipeline_ui_metadata"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'matplotlib\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'\'matplotlib\'\'\n --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef plot_linear(mlpipeline_ui_metadata):\\n import\n base64\\n import json\\n from io import BytesIO\\n\\n import matplotlib.pyplot\n as plt\\n\\n plt.plot([1, 2, 3], [1, 2, 3])\\n\\n tmpfile = BytesIO()\\n plt.savefig(tmpfile,\n format=\\"png\\")\\n encoded = base64.b64encode(tmpfile.getvalue()).decode(\\"utf-8\\")\\n\\n html\n = f\\"\\"\\n metadata = {\\n \\"outputs\\":\n [\\n {\\n \\"type\\": \\"web-app\\",\\n \\"storage\\":\n \\"inline\\",\\n \\"source\\": html,\\n },\\n ],\\n }\\n with\n open(mlpipeline_ui_metadata, \\"w\\") as html_writer:\\n json.dump(metadata,\n html_writer)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Plot\n linear\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--mlpipeline-ui-metadata\\",\n dest=\\"mlpipeline_ui_metadata\\", type=_make_parent_dirs_and_return_path,\n required=True, default=argparse.SUPPRESS)\\n_parsed_args = vars(_parser.parse_args())\\n\\n_outputs\n = plot_linear(**_parsed_args)\\n"], "image": "python:3.7"}}, "name": "Plot\n linear", "outputs": [{"name": "mlpipeline_ui_metadata", "type": "UI_Metadata"}]}\',\n pipelines.kubeflow.org/component_ref: \'{}\'}\n - name: plot-pipeline\n dag:\n tasks:\n - {name: plot-linear, template: plot-linear}\n arguments:\n parameters: []\n serviceAccountName: pipeline-runner\n')))),(0,p.kt)("p",null,"\uc2e4\ud589 \ud6c4 Visualization\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-5.png",src:t(3013).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"run-output"},"Run output"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-2.png",src:t(3979).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"Run output\uc740 kubeflow\uc5d0\uc11c \uc9c0\uc815\ud55c \ud615\ud0dc\ub85c \uc0dd\uae34 Artifacts\ub97c \ubaa8\uc544\uc11c \ubcf4\uc5ec\uc8fc\ub294 \uacf3\uc774\uba70 \ud3c9\uac00 \uc9c0\ud45c(Metric)\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4."),(0,p.kt)("p",null,"\ud3c9\uac00 \uc9c0\ud45c(Metric)\uc744 \ubcf4\uc5ec\uc8fc\uae30 \uc704\ud574\uc11c\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},'mlpipeline_metrics_path: OutputPath("Metrics")')," argument\uc5d0 \ubcf4\uc5ec\uc8fc\uace0 \uc2f6\uc740 \uc774\ub984\uacfc \uac12\uc744 json \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uba74 \ub429\ub2c8\ub2e4.\n\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'@create_component_from_func\ndef show_metric_of_sum(\n number: int,\n mlpipeline_metrics_path: OutputPath("Metrics"),\n ):\n import json\n metrics = {\n "metrics": [\n {\n "name": "sum_value",\n "numberValue": number,\n },\n ],\n }\n with open(mlpipeline_metrics_path, "w") as f:\n json.dump(metrics, f)\n')),(0,p.kt)("p",null,"\ud3c9\uac00 \uc9c0\ud45c\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c ",(0,p.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-pipeline"},"\ud30c\uc774\ud504\ub77c\uc778"),"\uc5d0\uc11c \uc0dd\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc5d0 \ucd94\uac00 \ud6c4 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n\uc804\uccb4 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func, OutputPath\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int) -> int:\n sum_number = number_1 + number_2\n print(sum_number)\n return sum_number\n\n@create_component_from_func\ndef show_metric_of_sum(\n number: int,\n mlpipeline_metrics_path: OutputPath("Metrics"),\n ):\n import json\n metrics = {\n "metrics": [\n {\n "name": "sum_value",\n "numberValue": number,\n },\n ],\n }\n with open(mlpipeline_metrics_path, "w") as f:\n json.dump(metrics, f)\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n show_metric_of_sum(sum_result.output)\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc2e4\ud589 \ud6c4 Run Output\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-4.png",src:t(6250).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"config"},"Config"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-3.png",src:t(3570).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"Config\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778 Config\ub85c \uc785\ub825\ubc1b\uc740 \ubaa8\ub4e0 \uac12\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},57:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-0-adc975b65f29dee20a2bf33c969773d5.png"},7834:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-1-cfdbe4b3c9d101eecde409c9baf10dbb.png"},3979:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-2-2b0de3bdf8fa16c0e318d2dffda1f9f8.png"},3570:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-3-13783474cf32a499f90a11fc84575eea.png"},6250:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-4-3bfbf40826566f37cb8512a2e2889038.png"},3013:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-5-8de88b76e09f491c9a7c86642a12fbd9.png"}}]); \ No newline at end of file diff --git a/assets/js/4579a793.b82baa5b.js b/assets/js/4579a793.b82baa5b.js deleted file mode 100644 index 8ff72437..00000000 --- a/assets/js/4579a793.b82baa5b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8737],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>c});var a=t(7294);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(p[t]=e[t]);return p}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(p[t]=e[t])}return p}var o=a.createContext({}),u=function(e){var n=a.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},m=function(e){var n=u(e.components);return a.createElement(o.Provider,{value:n},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},_=a.forwardRef((function(e,n){var t=e.components,p=e.mdxType,r=e.originalType,o=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=u(t),_=p,c=s["".concat(o,".").concat(_)]||s[_]||d[_]||r;return t?a.createElement(c,i(i({ref:n},m),{},{components:t})):a.createElement(c,i({ref:n},m))}));function c(e,n){var t=arguments,p=n&&n.mdxType;if("string"==typeof e||p){var r=t.length,i=new Array(r);i[0]=_;var l={};for(var o in n)hasOwnProperty.call(n,o)&&(l[o]=n[o]);l.originalType=e,l[s]="string"==typeof e?e:p,i[1]=l;for(var u=2;u{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var a=t(7462),p=(t(7294),t(3905));const r={title:"11. Pipeline - Run Result",description:"",sidebar_position:11,contributors:["Jongseob Jeon","SeungTae Kim"]},i=void 0,l={unversionedId:"kubeflow/advanced-run",id:"kubeflow/advanced-run",title:"11. Pipeline - Run Result",description:"",source:"@site/docs/kubeflow/advanced-run.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-run",permalink:"/docs/kubeflow/advanced-run",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-run.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:11,frontMatter:{title:"11. Pipeline - Run Result",description:"",sidebar_position:11,contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"10. Pipeline - Setting",permalink:"/docs/kubeflow/advanced-pipeline"},next:{title:"12. Component - MLFlow",permalink:"/docs/kubeflow/advanced-mlflow"}},o={},u=[{value:"Run Result",id:"run-result",level:2},{value:"Graph",id:"graph",level:2},{value:"Input/Output",id:"inputoutput",level:3},{value:"Logs",id:"logs",level:3},{value:"Visualizations",id:"visualizations",level:3},{value:"Run output",id:"run-output",level:2},{value:"Config",id:"config",level:2}],m={toc:u},s="wrapper";function d(e){let{components:n,...r}=e;return(0,p.kt)(s,(0,a.Z)({},m,r,{components:n,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"run-result"},"Run Result"),(0,p.kt)("p",null,"Run \uc2e4\ud589 \uacb0\uacfc\ub97c \ub20c\ub7ec\ubcf4\uba74 3\uac1c\uc758 \ud0ed\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4.\n\uac01\uac01 Graph, Run output, Config \uc785\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-0.png",src:t(57).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"graph"},"Graph"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-1.png",src:t(7834).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"\uadf8\ub798\ud504\uc5d0\uc11c\ub294 \uc2e4\ud589\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub204\ub974\uba74 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"inputoutput"},"Input/Output"),(0,p.kt)("p",null,"Input/Output \ud0ed\uc740 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud55c Config\ub4e4\uacfc Input, Output Artifacts\ub97c \ud655\uc778\ud558\uace0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"logs"},"Logs"),(0,p.kt)("p",null,"Logs\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc \uc2e4\ud589 \uc911 \ub098\uc624\ub294 \ubaa8\ub4e0 stdout\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\ub2e4\ub9cc pod\uc740 \uc77c\uc815 \uc2dc\uac04\uc774 \uc9c0\ub09c \ud6c4 \uc9c0\uc6cc\uc9c0\uae30 \ub54c\ubb38\uc5d0 \uc77c\uc815 \uc2dc\uac04\uc774 \uc9c0\ub098\uba74 \uc774 \ud0ed\uc5d0\uc11c\ub294 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\uc774\ub54c\ub294 Output artifacts\uc758 main-logs\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"visualizations"},"Visualizations"),(0,p.kt)("p",null,"Visualizations\uc5d0\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0dd\uc131\ub41c \ud50c\ub78f\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4."),(0,p.kt)("p",null,"\ud50c\ub78f\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},'mlpipeline_ui_metadata: OutputPath("UI_Metadata")')," argument\ub85c \ubcf4\uc5ec\uc8fc\uace0 \uc2f6\uc740 \uac12\uc744 \uc800\uc7a5\ud558\uba74 \ub429\ub2c8\ub2e4. \uc774 \ub54c \ud50c\ub78f\uc758 \ud615\ud0dc\ub294 html \ud3ec\ub9f7\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'\n@partial(\n create_component_from_func,\n packages_to_install=["matplotlib"],\n)\ndef plot_linear(\n mlpipeline_ui_metadata: OutputPath("UI_Metadata")\n):\n import base64\n import json\n from io import BytesIO\n\n import matplotlib.pyplot as plt\n\n plt.plot(x=[1, 2, 3], y=[1, 2,3])\n\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n')),(0,p.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import create_component_from_func, OutputPath\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["matplotlib"],\n)\ndef plot_linear(mlpipeline_ui_metadata: OutputPath("UI_Metadata")):\n import base64\n import json\n from io import BytesIO\n\n import matplotlib.pyplot as plt\n\n plt.plot([1, 2, 3], [1, 2, 3])\n\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n\n\n@pipeline(name="plot_pipeline")\ndef plot_pipeline():\n plot_linear()\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(plot_pipeline, "plot_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \ub098\uc628 ",(0,p.kt)("inlineCode",{parentName:"p"},"plot_pipeline.yaml"),"\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("details",null,(0,p.kt)("summary",null,"plot_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: plot-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9, pipelines.kubeflow.org/pipeline_compilation_time: \'2\n022-01-17T13:31:32.963214\',\n pipelines.kubeflow.org/pipeline_spec: \'{"name": "plot_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9}\nspec:\n entrypoint: plot-pipeline\n templates:\n - name: plot-linear\n container:\n args: [--mlpipeline-ui-metadata, /tmp/outputs/mlpipeline_ui_metadata/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'matplotlib\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet\n --no-warn-script-location \'matplotlib\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n def plot_linear(mlpipeline_ui_metadata):\n import base64\n import json\n from io import BytesIO\n import matplotlib.pyplot as plt\n plt.plot([1, 2, 3], [1, 2, 3])\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Plot linear\', description=\'\')\n _parser.add_argument("--mlpipeline-ui-metadata", dest="mlpipeline_ui_metadata", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n _outputs = plot_linear(**_parsed_args)\n image: python:3.7\n outputs:\n artifacts:\n - {name: mlpipeline-ui-metadata, path: /tmp/outputs/mlpipeline_ui_metadata/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--mlpipeline-ui-metadata", {"outputPath": "mlpipeline_ui_metadata"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'matplotlib\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'\'matplotlib\'\'\n --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef plot_linear(mlpipeline_ui_metadata):\\n import\n base64\\n import json\\n from io import BytesIO\\n\\n import matplotlib.pyplot\n as plt\\n\\n plt.plot([1, 2, 3], [1, 2, 3])\\n\\n tmpfile = BytesIO()\\n plt.savefig(tmpfile,\n format=\\"png\\")\\n encoded = base64.b64encode(tmpfile.getvalue()).decode(\\"utf-8\\")\\n\\n html\n = f\\"\\"\\n metadata = {\\n \\"outputs\\":\n [\\n {\\n \\"type\\": \\"web-app\\",\\n \\"storage\\":\n \\"inline\\",\\n \\"source\\": html,\\n },\\n ],\\n }\\n with\n open(mlpipeline_ui_metadata, \\"w\\") as html_writer:\\n json.dump(metadata,\n html_writer)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Plot\n linear\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--mlpipeline-ui-metadata\\",\n dest=\\"mlpipeline_ui_metadata\\", type=_make_parent_dirs_and_return_path,\n required=True, default=argparse.SUPPRESS)\\n_parsed_args = vars(_parser.parse_args())\\n\\n_outputs\n = plot_linear(**_parsed_args)\\n"], "image": "python:3.7"}}, "name": "Plot\n linear", "outputs": [{"name": "mlpipeline_ui_metadata", "type": "UI_Metadata"}]}\',\n pipelines.kubeflow.org/component_ref: \'{}\'}\n - name: plot-pipeline\n dag:\n tasks:\n - {name: plot-linear, template: plot-linear}\n arguments:\n parameters: []\n serviceAccountName: pipeline-runner\n')))),(0,p.kt)("p",null,"\uc2e4\ud589 \ud6c4 Visualization\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-5.png",src:t(3013).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"run-output"},"Run output"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-2.png",src:t(3979).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"Run output\uc740 kubeflow\uc5d0\uc11c \uc9c0\uc815\ud55c \ud615\ud0dc\ub85c \uc0dd\uae34 Artifacts\ub97c \ubaa8\uc544\uc11c \ubcf4\uc5ec\uc8fc\ub294 \uacf3\uc774\uba70 \ud3c9\uac00 \uc9c0\ud45c(Metric)\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4."),(0,p.kt)("p",null,"\ud3c9\uac00 \uc9c0\ud45c(Metric)\uc744 \ubcf4\uc5ec\uc8fc\uae30 \uc704\ud574\uc11c\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},'mlpipeline_metrics_path: OutputPath("Metrics")')," argument\uc5d0 \ubcf4\uc5ec\uc8fc\uace0 \uc2f6\uc740 \uc774\ub984\uacfc \uac12\uc744 json \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uba74 \ub429\ub2c8\ub2e4.\n\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'@create_component_from_func\ndef show_metric_of_sum(\n number: int,\n mlpipeline_metrics_path: OutputPath("Metrics"),\n ):\n import json\n metrics = {\n "metrics": [\n {\n "name": "sum_value",\n "numberValue": number,\n },\n ],\n }\n with open(mlpipeline_metrics_path, "w") as f:\n json.dump(metrics, f)\n')),(0,p.kt)("p",null,"\ud3c9\uac00 \uc9c0\ud45c\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c ",(0,p.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-pipeline"},"\ud30c\uc774\ud504\ub77c\uc778"),"\uc5d0\uc11c \uc0dd\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc5d0 \ucd94\uac00 \ud6c4 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n\uc804\uccb4 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func, OutputPath\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int) -> int:\n sum_number = number_1 + number_2\n print(sum_number)\n return sum_number\n\n@create_component_from_func\ndef show_metric_of_sum(\n number: int,\n mlpipeline_metrics_path: OutputPath("Metrics"),\n ):\n import json\n metrics = {\n "metrics": [\n {\n "name": "sum_value",\n "numberValue": number,\n },\n ],\n }\n with open(mlpipeline_metrics_path, "w") as f:\n json.dump(metrics, f)\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n show_metric_of_sum(sum_result.output)\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc2e4\ud589 \ud6c4 Run Output\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-4.png",src:t(6250).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"config"},"Config"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-3.png",src:t(3570).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"Config\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778 Config\ub85c \uc785\ub825\ubc1b\uc740 \ubaa8\ub4e0 \uac12\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},57:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-0-adc975b65f29dee20a2bf33c969773d5.png"},7834:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-1-cfdbe4b3c9d101eecde409c9baf10dbb.png"},3979:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-2-2b0de3bdf8fa16c0e318d2dffda1f9f8.png"},3570:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-3-13783474cf32a499f90a11fc84575eea.png"},6250:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-4-3bfbf40826566f37cb8512a2e2889038.png"},3013:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-5-8de88b76e09f491c9a7c86642a12fbd9.png"}}]); \ No newline at end of file diff --git a/assets/js/48eb1972.80b91187.js b/assets/js/48eb1972.80b91187.js new file mode 100644 index 00000000..823f96be --- /dev/null +++ b/assets/js/48eb1972.80b91187.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[7651],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=a,m=u["".concat(p,".").concat(d)]||u[d]||k[d]||i;return n?r.createElement(m,o(o({ref:t},c),{},{components:n})):r.createElement(m,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,o[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>k,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const i={title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",sidebar_position:2,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,l={unversionedId:"prerequisites/docker/introduction",id:"prerequisites/docker/introduction",title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",source:"@site/docs/prerequisites/docker/introduction.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/introduction",permalink:"/docs/prerequisites/docker/introduction",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/introduction.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",sidebar_position:2,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"Install Docker",permalink:"/docs/prerequisites/docker/install"},next:{title:"What is Docker?",permalink:"/docs/prerequisites/docker/"}},p={},s=[{value:"Why Kubernetes ?",id:"why-kubernetes-",level:2},{value:"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ub3c4\ucee4\uc640-\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:2},{value:"\uae30\uc220 \uc774\ub984\uc774 \uc544\ub2c8\ub77c \uc81c\ud488 \uc774\ub984",id:"\uae30\uc220-\uc774\ub984\uc774-\uc544\ub2c8\ub77c-\uc81c\ud488-\uc774\ub984",level:3},{value:"\ub3c4\ucee4",id:"\ub3c4\ucee4",level:4},{value:"\ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"\uc7ac\ubbf8\uc788\ub294 \uc624\ud508\uc18c\uc2a4 \uc5ed\uc0ac \uc774\uc57c\uae30",id:"\uc7ac\ubbf8\uc788\ub294-\uc624\ud508\uc18c\uc2a4-\uc5ed\uc0ac-\uc774\uc57c\uae30",level:3},{value:"\ucd08\uae30 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ucd08\uae30-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"Open Container Initiative",id:"open-container-initiative",level:4},{value:"CRI-O",id:"cri-o",level:4},{value:"\uc9c0\uae08\uc758 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\uc9c0\uae08\uc758-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"References",id:"references",level:3}],c={toc:s},u="wrapper";function k(e){let{components:t,...i}=e;return(0,a.kt)(u,(0,r.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"why-kubernetes-"},"Why Kubernetes ?"),(0,a.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc11c\ube44\uc2a4\ud654\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub378 \uac1c\ubc1c \uc678\uc5d0\ub3c4 \ub9ce\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ubd80\uac00\uc801\uc778")," \uae30\ub2a5\ub4e4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\ud559\uc2b5 \ub2e8\uacc4",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\ubaa8\ub378 \ud559\uc2b5 \uba85\ub839\uc758 \uc2a4\ucf00\uc904 \uad00\ub9ac"),(0,a.kt)("li",{parentName:"ul"},"\ud559\uc2b5\ub41c \ubaa8\ub378\uc758 Reproducibility \ubcf4\uc7a5"))),(0,a.kt)("li",{parentName:"ol"},"\ubc30\ud3ec \ub2e8\uacc4",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\ud2b8\ub798\ud53d \ubd84\uc0b0"),(0,a.kt)("li",{parentName:"ul"},"\uc11c\ube44\uc2a4 \uc7a5\uc560 \ubaa8\ub2c8\ud130\ub9c1"),(0,a.kt)("li",{parentName:"ul"},"\uc7a5\uc560 \uc2dc \ud2b8\ub7ec\ube14\uc288\ud305")))),(0,a.kt)("p",null,"\ub2e4\ud589\ud788\ub3c4 \uc774\ub7f0 \uae30\ub2a5\ub4e4\uc5d0 \ub300\ud55c needs\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ucabd\uc5d0\uc11c \uc774\ubbf8 \ub9ce\uc740 \uace0\ubbfc\uc744 \uac70\uccd0 \ubc1c\uc804\ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ubc30\ud3ec\ud560 \ub54c\ub3c4 \uc774\ub7f0 \uace0\ubbfc\uc758 \uacb0\uacfc\ubb3c\ub4e4\uc744 \ud65c\uc6a9\ud558\uba74 \ud070 \ub3c4\uc6c0\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nMLOps\uc5d0\uc11c \ub300\ud45c\uc801\uc73c\ub85c \ud65c\uc6a9\ud558\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uc774 \ubc14\ub85c \ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc785\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"\ub3c4\ucee4\uc640-\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("h3",{id:"\uae30\uc220-\uc774\ub984\uc774-\uc544\ub2c8\ub77c-\uc81c\ud488-\uc774\ub984"},"\uae30\uc220 \uc774\ub984\uc774 \uc544\ub2c8\ub77c \uc81c\ud488 \uc774\ub984"),(0,a.kt)("p",null,"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uac01\uac01 \ucee8\ud14c\uc774\ub108\ub77c\uc774\uc81c\uc774\uc158(Containerization) \uae30\ub2a5\uacfc \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158(Container Orchestration) \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ub300\ud45c \uc18c\ud504\ud2b8\uc6e8\uc5b4(\uc81c\ud488)\uc785\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"\ub3c4\ucee4"},"\ub3c4\ucee4"),(0,a.kt)("p",null,"\ub3c4\ucee4\ub294 \uacfc\uac70\uc5d0 \ub300\uc138\uc600\uc9c0\ub9cc \uc720\ub8cc\ud654 \uad00\ub828 \uc815\ucc45\ub4e4\uc744 \ud558\ub098\uc529 \ucd94\uac00\ud558\uba74\uc11c \uc810\uc810 \uc0ac\uc6a9 \ube48\ub3c4\uac00 \ud558\ub77d\uc138\uc785\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc 2022\ub144 3\uc6d4 \uae30\uc900\uc73c\ub85c \uc544\uc9c1\uae4c\uc9c0\ub3c4 \uac00\uc7a5 \uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294 \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"sysdig-2019.png",src:n(2235).Z,width:"1600",height:"900"})),(0,a.kt)("center",null," [from sysdig 2019] "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"sysdig-2021.png",src:n(1256).Z,width:"750",height:"437"})),(0,a.kt)("center",null," [from sysdig 2021] "),(0,a.kt)("h4",{id:"\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uc9c0\uae08\uae4c\uc9c0\ub294 \ube44\uad50 \ub300\uc0c1\uc870\ucc28 \uac70\uc758 \uc5c6\ub294 \uc81c\ud488\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"cncf-survey.png",src:n(6640).Z,width:"2048",height:"1317"})),(0,a.kt)("center",null," [from cncf survey] "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"t4-ai.png",src:n(2044).Z,width:"926",height:"629"})),(0,a.kt)("center",null," [from t4.ai] "),(0,a.kt)("h3",{id:"\uc7ac\ubbf8\uc788\ub294-\uc624\ud508\uc18c\uc2a4-\uc5ed\uc0ac-\uc774\uc57c\uae30"},(0,a.kt)("strong",{parentName:"h3"},"\uc7ac\ubbf8\uc788\ub294 \uc624\ud508\uc18c\uc2a4 \uc5ed\uc0ac \uc774\uc57c\uae30")),(0,a.kt)("h4",{id:"\ucd08\uae30-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ucd08\uae30 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucd08\uae30 \ub3c4\ucee4 \uac1c\ubc1c\uc2dc\uc5d0\ub294 Docker Engine\uc774\ub77c\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\ud558\ub098\uc758 \ud328\ud0a4\uc9c0"),"\uc5d0 API, CLI, \ub124\ud2b8\uc6cc\ud06c, \uc2a4\ud1a0\ub9ac\uc9c0 \ub4f1 \uc5ec\ub7ec \uae30\ub2a5\ub4e4\uc744 \ubaa8\ub450 \ud3ec\ud568\ud588\uc73c\ub098, ",(0,a.kt)("strong",{parentName:"p"},"MSA")," \uc758 \ucca0\ud559\uc744 \ub2f4\uc544 ",(0,a.kt)("strong",{parentName:"p"},"\ud558\ub098\uc529 \ubd84\ub9ac"),"\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \ucd08\uae30\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654\ub97c \uc704\ud574 Docker Engine\uc744 \ub0b4\uc7a5\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \ub3c4\ucee4 \ubc84\uc804\uc774 \uc5c5\ub370\uc774\ud2b8\ub420 \ub54c\ub9c8\ub2e4 Docker Engine \uc758 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ubcc0\uacbd\ub418\uc5b4 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \ud06c\uac8c \uc601\ud5a5\uc744 \ubc1b\ub294 \uc77c\uc774 \uacc4\uc18d\ud574\uc11c \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"open-container-initiative"},"Open Container Initiative"),(0,a.kt)("p",null,"\uadf8\ub798\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\uc774\ub7f0 \ubd88\ud3b8\ud568\uc744 \ud574\uc18c"),"\ud558\uace0\uc790, \ub3c4\ucee4\ub97c \uc911\uc2ec\uc73c\ub85c \uad6c\uae00 \ub4f1 \ucee8\ud14c\uc774\ub108 \uae30\uc220\uc5d0 \uad00\uc2ec\uc788\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\uc5ec\ub7ec \uc9d1\ub2e8"),"\ub4e4\uc774 \ud55c\ub370 \ubaa8\uc5ec ",(0,a.kt)("strong",{parentName:"p"},"Open Container Initiative,")," \uc774\ud558 ",(0,a.kt)("strong",{parentName:"p"},"OCI"),"\ub77c\ub294 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud558\uc5ec \ucee8\ud14c\uc774\ub108\uc5d0 \uad00\ud55c ",(0,a.kt)("strong",{parentName:"p"},"\ud45c\uc900"),"\uc744 \uc815\ud558\ub294 \uc77c\ub4e4\uc744 \uc2dc\uc791\ud558\uc600\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4\uc5d0\uc11c\ub3c4 \uc778\ud130\ud398\uc774\uc2a4\ub97c ",(0,a.kt)("strong",{parentName:"p"},"\ud55c \ubc88 \ub354 \ubd84\ub9ac"),"\ud574\uc11c, OCI \ud45c\uc900\uc744 \uc900\uc218\ud558\ub294 ",(0,a.kt)("strong",{parentName:"p"},"containerd"),"\ub77c\ub294 Container Runtime \ub97c \uac1c\ubc1c\ud558\uace0, ",(0,a.kt)("strong",{parentName:"p"},"dockerd")," \uac00 containerd \uc758 API \ub97c \ud638\ucd9c\ud558\ub3c4\ub85d \ucd94\uc0c1\ud654 \ub808\uc774\uc5b4\ub97c \ucd94\uac00\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc774\ub7ec\ud55c \ud750\ub984\uc5d0 \ub9de\ucd94\uc5b4\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c\ub3c4 \uc774\uc81c\ubd80\ud130\ub294 \ub3c4\ucee4\ub9cc\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uace0, ",(0,a.kt)("strong",{parentName:"p"},"OCI \ud45c\uc900\uc744")," \uc900\uc218\ud558\uace0, \uc815\ud574\uc9c4 \uc2a4\ud399\uc744 \uc9c0\ud0a4\ub294 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc740 \ubb34\uc5c7\uc774\ub4e0 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d, Container Runtime Interface, \uc774\ud558 ",(0,a.kt)("strong",{parentName:"p"},"CRI \uc2a4\ud399"),"\uc744 \ubc84\uc804 1.5\ubd80\ud130 \uc81c\uacf5\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"cri-o"},"CRI-O"),(0,a.kt)("p",null,"Red Hat, Intel, SUSE, IBM\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"OCI \ud45c\uc900+CRI \uc2a4\ud399\uc744")," \ub530\ub77c Kubernetes \uc804\uc6a9 Container Runtime \uc744 \ubaa9\uc801\uc73c\ub85c \uac1c\ubc1c\ud55c \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc785\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"\uc9c0\uae08\uc758-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\uc9c0\uae08\uc758 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 Docker Engine \uc744 \ub514\ud3f4\ud2b8 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc0ac\uc6a9\ud574\uc654\uc9c0\ub9cc, \ub3c4\ucee4\uc758 API \uac00 ",(0,a.kt)("strong",{parentName:"p"},"CRI")," \uc2a4\ud399\uc5d0 \ub9de\uc9c0 \uc54a\uc544(",(0,a.kt)("em",{parentName:"p"},"OCI \ub294 \ub530\ub984"),") \ub3c4\ucee4\uc758 API\ub97c ",(0,a.kt)("strong",{parentName:"p"},"CRI"),"\uc640 \ud638\ud658\ub418\uac8c \ubc14\uafd4\uc8fc\ub294 ",(0,a.kt)("strong",{parentName:"p"},"dockershim"),"\uc744 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc790\uccb4\uc801\uc73c\ub85c \uac1c\ubc1c \ubc0f \uc9c0\uc6d0\ud574\uc654\uc5c8\ub294\ub370,(",(0,a.kt)("em",{parentName:"p"},"\ub3c4\ucee4 \uce21\uc774 \uc544\ub2c8\ub77c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uce21\uc5d0\uc11c \uc9c0\uc6d0\ud588\ub2e4\ub294 \uc810\uc774 \uad49\uc7a5\ud788 \ud070 \uc9d0\uc774\uc5c8\uc2b5\ub2c8\ub2e4."),") \uc774\uac78 \ucfe0\ubc84\ub124\ud2f0\uc2a4 ",(0,a.kt)("strong",{parentName:"p"},"v1.20 \ubd80\ud130\ub294 Deprecated\ud558\uace0,")," ",(0,a.kt)("strong",{parentName:"p"},"v1.23 \ubd80\ud130\ub294 \uc9c0\uc6d0\uc744 \ud3ec\uae30"),"\ud558\uae30\ub85c \uacb0\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"v1.23 \uc740 2021 \ub144 12\uc6d4 \ub9b4\ub9ac\uc988")),(0,a.kt)("p",null,"\uadf8\ub798\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4 v1.23 \ubd80\ud130\ub294 \ub3c4\ucee4\ub97c native \ud558\uac8c \uc4f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\uc9c0\ub9cc ",(0,a.kt)("strong",{parentName:"p"},"\uc0ac\uc6a9\uc790\ub4e4\uc740 \uc774\ub7f0 \ubcc0\ud654\uc5d0 \ud06c\uac8c \uad00\ub828\uc774 \uc788\uc9c4 \uc54a\uc2b5\ub2c8\ub2e4."),"\n\uc65c\ub0d0\ud558\uba74 Docker Engine\uc744 \ud1b5\ud574 \ub9cc\ub4e4\uc5b4\uc9c4 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 OCI \ud45c\uc900\uc744 \uc900\uc218\ud558\uae30 \ub54c\ubb38\uc5d0, \ucfe0\ubc84\ub124\ud2f0\uc2a4\uac00 \uc5b4\ub5a4 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc774\ub8e8\uc5b4\uc838\uc788\ub4e0 \uc0ac\uc6a9 \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"references"},"References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.linkedin.com/pulse/containerd%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%EC%A4%91%EC%9A%94%ED%95%A0%EA%B9%8C-sean-lee/?originalSubdomain=kr"},(0,a.kt)("em",{parentName:"a"},"https://www.linkedin.com/pulse/containerd\ub294-\ubb34\uc5c7\uc774\uace0-\uc65c-\uc911\uc694\ud560\uae4c-sean-lee/?originalSubdomain=kr"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/"},"https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2020/12/02/dockershim-faq/"},"https://kubernetes.io/blog/2020/12/02/dockershim-faq/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/"},"https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/"},"https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/"))))}k.isMDXComponent=!0},6640:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cncf-survey-53378aeae96c2069d60cbd72e31baa22.png"},2235:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/sysdig-2019-a7a9178a83773e8126833287a7fb755c.png"},1256:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/sysdig-2021-d575835a018c7b99ef06c932a46953a3.png"},2044:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/t4-ai-f055bc33fd1f8fd7b098b71508aac896.png"}}]); \ No newline at end of file diff --git a/assets/js/48eb1972.b5e46628.js b/assets/js/48eb1972.b5e46628.js deleted file mode 100644 index 182e0b26..00000000 --- a/assets/js/48eb1972.b5e46628.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[7651],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),d=a,m=u["".concat(p,".").concat(d)]||u[d]||k[d]||i;return n?r.createElement(m,o(o({ref:t},c),{},{components:n})):r.createElement(m,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,o[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>k,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const i={title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",sidebar_position:2,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,l={unversionedId:"prerequisites/docker/introduction",id:"prerequisites/docker/introduction",title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",source:"@site/docs/prerequisites/docker/introduction.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/introduction",permalink:"/docs/prerequisites/docker/introduction",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/introduction.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"Why Docker & Kubernetes ?",description:"Introduction to Docker.",sidebar_position:2,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"Install Docker",permalink:"/docs/prerequisites/docker/install"},next:{title:"What is Docker?",permalink:"/docs/prerequisites/docker/"}},p={},s=[{value:"Why Kubernetes ?",id:"why-kubernetes-",level:2},{value:"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ub3c4\ucee4\uc640-\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:2},{value:"\uae30\uc220 \uc774\ub984\uc774 \uc544\ub2c8\ub77c \uc81c\ud488 \uc774\ub984",id:"\uae30\uc220-\uc774\ub984\uc774-\uc544\ub2c8\ub77c-\uc81c\ud488-\uc774\ub984",level:3},{value:"\ub3c4\ucee4",id:"\ub3c4\ucee4",level:4},{value:"\ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"\uc7ac\ubbf8\uc788\ub294 \uc624\ud508\uc18c\uc2a4 \uc5ed\uc0ac \uc774\uc57c\uae30",id:"\uc7ac\ubbf8\uc788\ub294-\uc624\ud508\uc18c\uc2a4-\uc5ed\uc0ac-\uc774\uc57c\uae30",level:3},{value:"\ucd08\uae30 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\ucd08\uae30-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"Open Container Initiative",id:"open-container-initiative",level:4},{value:"CRI-O",id:"cri-o",level:4},{value:"\uc9c0\uae08\uc758 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4",id:"\uc9c0\uae08\uc758-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4",level:4},{value:"References",id:"references",level:3}],c={toc:s},u="wrapper";function k(e){let{components:t,...i}=e;return(0,a.kt)(u,(0,r.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"why-kubernetes-"},"Why Kubernetes ?"),(0,a.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uc11c\ube44\uc2a4\ud654\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubaa8\ub378 \uac1c\ubc1c \uc678\uc5d0\ub3c4 \ub9ce\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ubd80\uac00\uc801\uc778")," \uae30\ub2a5\ub4e4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\ud559\uc2b5 \ub2e8\uacc4",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\ubaa8\ub378 \ud559\uc2b5 \uba85\ub839\uc758 \uc2a4\ucf00\uc904 \uad00\ub9ac"),(0,a.kt)("li",{parentName:"ul"},"\ud559\uc2b5\ub41c \ubaa8\ub378\uc758 Reproducibility \ubcf4\uc7a5"))),(0,a.kt)("li",{parentName:"ol"},"\ubc30\ud3ec \ub2e8\uacc4",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\ud2b8\ub798\ud53d \ubd84\uc0b0"),(0,a.kt)("li",{parentName:"ul"},"\uc11c\ube44\uc2a4 \uc7a5\uc560 \ubaa8\ub2c8\ud130\ub9c1"),(0,a.kt)("li",{parentName:"ul"},"\uc7a5\uc560 \uc2dc \ud2b8\ub7ec\ube14\uc288\ud305")))),(0,a.kt)("p",null,"\ub2e4\ud589\ud788\ub3c4 \uc774\ub7f0 \uae30\ub2a5\ub4e4\uc5d0 \ub300\ud55c needs\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ucabd\uc5d0\uc11c \uc774\ubbf8 \ub9ce\uc740 \uace0\ubbfc\uc744 \uac70\uccd0 \ubc1c\uc804\ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ubc30\ud3ec\ud560 \ub54c\ub3c4 \uc774\ub7f0 \uace0\ubbfc\uc758 \uacb0\uacfc\ubb3c\ub4e4\uc744 \ud65c\uc6a9\ud558\uba74 \ud070 \ub3c4\uc6c0\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nMLOps\uc5d0\uc11c \ub300\ud45c\uc801\uc73c\ub85c \ud65c\uc6a9\ud558\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc81c\ud488\uc774 \ubc14\ub85c \ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc785\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"\ub3c4\ucee4\uc640-\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("h3",{id:"\uae30\uc220-\uc774\ub984\uc774-\uc544\ub2c8\ub77c-\uc81c\ud488-\uc774\ub984"},"\uae30\uc220 \uc774\ub984\uc774 \uc544\ub2c8\ub77c \uc81c\ud488 \uc774\ub984"),(0,a.kt)("p",null,"\ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uac01\uac01 \ucee8\ud14c\uc774\ub108\ub77c\uc774\uc81c\uc774\uc158(Containerization) \uae30\ub2a5\uacfc \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158(Container Orchestration) \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ub300\ud45c \uc18c\ud504\ud2b8\uc6e8\uc5b4(\uc81c\ud488)\uc785\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"\ub3c4\ucee4"},"\ub3c4\ucee4"),(0,a.kt)("p",null,"\ub3c4\ucee4\ub294 \uacfc\uac70\uc5d0 \ub300\uc138\uc600\uc9c0\ub9cc \uc720\ub8cc\ud654 \uad00\ub828 \uc815\ucc45\ub4e4\uc744 \ud558\ub098\uc529 \ucd94\uac00\ud558\uba74\uc11c \uc810\uc810 \uc0ac\uc6a9 \ube48\ub3c4\uac00 \ud558\ub77d\uc138\uc785\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc 2022\ub144 3\uc6d4 \uae30\uc900\uc73c\ub85c \uc544\uc9c1\uae4c\uc9c0\ub3c4 \uac00\uc7a5 \uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294 \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"sysdig-2019.png",src:n(2235).Z,width:"1600",height:"900"})),(0,a.kt)("center",null," [from sysdig 2019] "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"sysdig-2021.png",src:n(1256).Z,width:"750",height:"437"})),(0,a.kt)("center",null," [from sysdig 2021] "),(0,a.kt)("h4",{id:"\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uc9c0\uae08\uae4c\uc9c0\ub294 \ube44\uad50 \ub300\uc0c1\uc870\ucc28 \uac70\uc758 \uc5c6\ub294 \uc81c\ud488\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"cncf-survey.png",src:n(6640).Z,width:"2048",height:"1317"})),(0,a.kt)("center",null," [from cncf survey] "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"t4-ai.png",src:n(2044).Z,width:"926",height:"629"})),(0,a.kt)("center",null," [from t4.ai] "),(0,a.kt)("h3",{id:"\uc7ac\ubbf8\uc788\ub294-\uc624\ud508\uc18c\uc2a4-\uc5ed\uc0ac-\uc774\uc57c\uae30"},(0,a.kt)("strong",{parentName:"h3"},"\uc7ac\ubbf8\uc788\ub294 \uc624\ud508\uc18c\uc2a4 \uc5ed\uc0ac \uc774\uc57c\uae30")),(0,a.kt)("h4",{id:"\ucd08\uae30-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\ucd08\uae30 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucd08\uae30 \ub3c4\ucee4 \uac1c\ubc1c\uc2dc\uc5d0\ub294 Docker Engine\uc774\ub77c\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\ud558\ub098\uc758 \ud328\ud0a4\uc9c0"),"\uc5d0 API, CLI, \ub124\ud2b8\uc6cc\ud06c, \uc2a4\ud1a0\ub9ac\uc9c0 \ub4f1 \uc5ec\ub7ec \uae30\ub2a5\ub4e4\uc744 \ubaa8\ub450 \ud3ec\ud568\ud588\uc73c\ub098, ",(0,a.kt)("strong",{parentName:"p"},"MSA")," \uc758 \ucca0\ud559\uc744 \ub2f4\uc544 ",(0,a.kt)("strong",{parentName:"p"},"\ud558\ub098\uc529 \ubd84\ub9ac"),"\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \ucd08\uae30\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654\ub97c \uc704\ud574 Docker Engine\uc744 \ub0b4\uc7a5\ud558\uace0 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \ub3c4\ucee4 \ubc84\uc804\uc774 \uc5c5\ub370\uc774\ud2b8\ub420 \ub54c\ub9c8\ub2e4 Docker Engine \uc758 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ubcc0\uacbd\ub418\uc5b4 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \ud06c\uac8c \uc601\ud5a5\uc744 \ubc1b\ub294 \uc77c\uc774 \uacc4\uc18d\ud574\uc11c \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"open-container-initiative"},"Open Container Initiative"),(0,a.kt)("p",null,"\uadf8\ub798\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\uc774\ub7f0 \ubd88\ud3b8\ud568\uc744 \ud574\uc18c"),"\ud558\uace0\uc790, \ub3c4\ucee4\ub97c \uc911\uc2ec\uc73c\ub85c \uad6c\uae00 \ub4f1 \ucee8\ud14c\uc774\ub108 \uae30\uc220\uc5d0 \uad00\uc2ec\uc788\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\uc5ec\ub7ec \uc9d1\ub2e8"),"\ub4e4\uc774 \ud55c\ub370 \ubaa8\uc5ec ",(0,a.kt)("strong",{parentName:"p"},"Open Container Initiative,")," \uc774\ud558 ",(0,a.kt)("strong",{parentName:"p"},"OCI"),"\ub77c\ub294 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2dc\uc791\ud558\uc5ec \ucee8\ud14c\uc774\ub108\uc5d0 \uad00\ud55c ",(0,a.kt)("strong",{parentName:"p"},"\ud45c\uc900"),"\uc744 \uc815\ud558\ub294 \uc77c\ub4e4\uc744 \uc2dc\uc791\ud558\uc600\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4\uc5d0\uc11c\ub3c4 \uc778\ud130\ud398\uc774\uc2a4\ub97c ",(0,a.kt)("strong",{parentName:"p"},"\ud55c \ubc88 \ub354 \ubd84\ub9ac"),"\ud574\uc11c, OCI \ud45c\uc900\uc744 \uc900\uc218\ud558\ub294 ",(0,a.kt)("strong",{parentName:"p"},"containerd"),"\ub77c\ub294 Container Runtime \ub97c \uac1c\ubc1c\ud558\uace0, ",(0,a.kt)("strong",{parentName:"p"},"dockerd")," \uac00 containerd \uc758 API \ub97c \ud638\ucd9c\ud558\ub3c4\ub85d \ucd94\uc0c1\ud654 \ub808\uc774\uc5b4\ub97c \ucd94\uac00\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc774\ub7ec\ud55c \ud750\ub984\uc5d0 \ub9de\ucd94\uc5b4\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c\ub3c4 \uc774\uc81c\ubd80\ud130\ub294 \ub3c4\ucee4\ub9cc\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uace0, ",(0,a.kt)("strong",{parentName:"p"},"OCI \ud45c\uc900\uc744")," \uc900\uc218\ud558\uace0, \uc815\ud574\uc9c4 \uc2a4\ud399\uc744 \uc9c0\ud0a4\ub294 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc740 \ubb34\uc5c7\uc774\ub4e0 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d, Container Runtime Interface, \uc774\ud558 ",(0,a.kt)("strong",{parentName:"p"},"CRI \uc2a4\ud399"),"\uc744 \ubc84\uc804 1.5\ubd80\ud130 \uc81c\uacf5\ud558\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"cri-o"},"CRI-O"),(0,a.kt)("p",null,"Red Hat, Intel, SUSE, IBM\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"OCI \ud45c\uc900+CRI \uc2a4\ud399\uc744")," \ub530\ub77c Kubernetes \uc804\uc6a9 Container Runtime \uc744 \ubaa9\uc801\uc73c\ub85c \uac1c\ubc1c\ud55c \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc785\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"\uc9c0\uae08\uc758-\ub3c4\ucee4--\ucfe0\ubc84\ub124\ud2f0\uc2a4"},"\uc9c0\uae08\uc758 \ub3c4\ucee4 & \ucfe0\ubc84\ub124\ud2f0\uc2a4"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 Docker Engine \uc744 \ub514\ud3f4\ud2b8 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc0ac\uc6a9\ud574\uc654\uc9c0\ub9cc, \ub3c4\ucee4\uc758 API \uac00 ",(0,a.kt)("strong",{parentName:"p"},"CRI")," \uc2a4\ud399\uc5d0 \ub9de\uc9c0 \uc54a\uc544(",(0,a.kt)("em",{parentName:"p"},"OCI \ub294 \ub530\ub984"),") \ub3c4\ucee4\uc758 API\ub97c ",(0,a.kt)("strong",{parentName:"p"},"CRI"),"\uc640 \ud638\ud658\ub418\uac8c \ubc14\uafd4\uc8fc\ub294 ",(0,a.kt)("strong",{parentName:"p"},"dockershim"),"\uc744 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc790\uccb4\uc801\uc73c\ub85c \uac1c\ubc1c \ubc0f \uc9c0\uc6d0\ud574\uc654\uc5c8\ub294\ub370,(",(0,a.kt)("em",{parentName:"p"},"\ub3c4\ucee4 \uce21\uc774 \uc544\ub2c8\ub77c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uce21\uc5d0\uc11c \uc9c0\uc6d0\ud588\ub2e4\ub294 \uc810\uc774 \uad49\uc7a5\ud788 \ud070 \uc9d0\uc774\uc5c8\uc2b5\ub2c8\ub2e4."),") \uc774\uac78 \ucfe0\ubc84\ub124\ud2f0\uc2a4 ",(0,a.kt)("strong",{parentName:"p"},"v1.20 \ubd80\ud130\ub294 Deprecated\ud558\uace0,")," ",(0,a.kt)("strong",{parentName:"p"},"v1.23 \ubd80\ud130\ub294 \uc9c0\uc6d0\uc744 \ud3ec\uae30"),"\ud558\uae30\ub85c \uacb0\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"v1.23 \uc740 2021 \ub144 12\uc6d4 \ub9b4\ub9ac\uc988")),(0,a.kt)("p",null,"\uadf8\ub798\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4 v1.23 \ubd80\ud130\ub294 \ub3c4\ucee4\ub97c native \ud558\uac8c \uc4f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\uc9c0\ub9cc ",(0,a.kt)("strong",{parentName:"p"},"\uc0ac\uc6a9\uc790\ub4e4\uc740 \uc774\ub7f0 \ubcc0\ud654\uc5d0 \ud06c\uac8c \uad00\ub828\uc774 \uc788\uc9c4 \uc54a\uc2b5\ub2c8\ub2e4."),"\n\uc65c\ub0d0\ud558\uba74 Docker Engine\uc744 \ud1b5\ud574 \ub9cc\ub4e4\uc5b4\uc9c4 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 OCI \ud45c\uc900\uc744 \uc900\uc218\ud558\uae30 \ub54c\ubb38\uc5d0, \ucfe0\ubc84\ub124\ud2f0\uc2a4\uac00 \uc5b4\ub5a4 \ucee8\ud14c\uc774\ub108 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc774\ub8e8\uc5b4\uc838\uc788\ub4e0 \uc0ac\uc6a9 \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"references"},"References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.linkedin.com/pulse/containerd%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%EC%A4%91%EC%9A%94%ED%95%A0%EA%B9%8C-sean-lee/?originalSubdomain=kr"},(0,a.kt)("em",{parentName:"a"},"https://www.linkedin.com/pulse/containerd\ub294-\ubb34\uc5c7\uc774\uace0-\uc65c-\uc911\uc694\ud560\uae4c-sean-lee/?originalSubdomain=kr"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/"},"https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2020/12/02/dockershim-faq/"},"https://kubernetes.io/blog/2020/12/02/dockershim-faq/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/"},"https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/"},"https://kubernetes.io/ko/blog/2020/12/02/dont-panic-kubernetes-and-docker/"))))}k.isMDXComponent=!0},6640:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/cncf-survey-53378aeae96c2069d60cbd72e31baa22.png"},2235:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/sysdig-2019-a7a9178a83773e8126833287a7fb755c.png"},1256:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/sysdig-2021-d575835a018c7b99ef06c932a46953a3.png"},2044:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/t4-ai-f055bc33fd1f8fd7b098b71508aac896.png"}}]); \ No newline at end of file diff --git a/assets/js/4a09dd96.ad2ed14a.js b/assets/js/4a09dd96.5f9675cf.js similarity index 63% rename from assets/js/4a09dd96.ad2ed14a.js rename to assets/js/4a09dd96.5f9675cf.js index 1fbd21e1..151aba76 100644 --- a/assets/js/4a09dd96.ad2ed14a.js +++ b/assets/js/4a09dd96.5f9675cf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[53],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),f=o,b=c["".concat(s,".").concat(f)]||c[f]||d[f]||i;return r?n.createElement(b,a(a({ref:t},p),{},{components:r})):n.createElement(b,a({ref:t},p))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:o,a[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const i={title:"6. Kubeflow Pipeline \uad00\ub828",description:"",sidebar_position:6,contributors:["Jaeyeon Kim"]},a=void 0,l={unversionedId:"kubeflow-dashboard-guide/experiments-and-others",id:"kubeflow-dashboard-guide/experiments-and-others",title:"6. Kubeflow Pipeline \uad00\ub828",description:"",source:"@site/docs/kubeflow-dashboard-guide/experiments-and-others.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/experiments-and-others",permalink:"/docs/kubeflow-dashboard-guide/experiments-and-others",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/experiments-and-others.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"6. Kubeflow Pipeline \uad00\ub828",description:"",sidebar_position:6,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"5. Experiments(AutoML)",permalink:"/docs/kubeflow-dashboard-guide/experiments"},next:{title:"1. Kubeflow Introduction",permalink:"/docs/kubeflow/kubeflow-intro"}},s={},u=[],p={toc:u},c="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(c,(0,n.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Experiments(KFP), Pipelines, Runs, Recurring Runs, Artifacts, Executions \ud398\uc774\uc9c0\ub4e4\uc5d0\uc11c\ub294 Kubeflow Pipeline\uacfc Pipeline\uc758 \uc2e4\ud589 \uadf8\ub9ac\uace0 Pipeline Run\uc758 \uacb0\uacfc\ub97c \uad00\ub9ac\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,"Kubeflow Pipeline\uc774 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c Kubeflow\ub97c \uc0ac\uc6a9\ud558\ub294 \uc8fc\ub41c \uc774\uc720\uc774\uba70, Kubeflow Pipeline\uc744 \ub9cc\ub4dc\ub294 \ubc29\ubc95, \uc2e4\ud589\ud558\ub294 \ubc29\ubc95, \uacb0\uacfc\ub97c \ud655\uc778\ud558\ub294 \ubc29\ubc95 \ub4f1 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,o.kt)("a",{parentName:"p",href:"../kubeflow/kubeflow-intro"},"3.Kubeflow"),"\uc5d0\uc11c \ub2e4\ub8f9\ub2c8\ub2e4."))}d.isMDXComponent=!0},7511:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[53],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),f=o,b=c["".concat(s,".").concat(f)]||c[f]||d[f]||i;return r?n.createElement(b,a(a({ref:t},p),{},{components:r})):n.createElement(b,a({ref:t},p))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:o,a[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const i={title:"6. Kubeflow Pipeline \uad00\ub828",description:"",sidebar_position:6,contributors:["Jaeyeon Kim"]},a=void 0,l={unversionedId:"kubeflow-dashboard-guide/experiments-and-others",id:"kubeflow-dashboard-guide/experiments-and-others",title:"6. Kubeflow Pipeline \uad00\ub828",description:"",source:"@site/docs/kubeflow-dashboard-guide/experiments-and-others.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/experiments-and-others",permalink:"/docs/kubeflow-dashboard-guide/experiments-and-others",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/experiments-and-others.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"6. Kubeflow Pipeline \uad00\ub828",description:"",sidebar_position:6,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"5. Experiments(AutoML)",permalink:"/docs/kubeflow-dashboard-guide/experiments"},next:{title:"1. Kubeflow Introduction",permalink:"/docs/kubeflow/kubeflow-intro"}},s={},u=[],p={toc:u},c="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(c,(0,n.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Experiments(KFP), Pipelines, Runs, Recurring Runs, Artifacts, Executions \ud398\uc774\uc9c0\ub4e4\uc5d0\uc11c\ub294 Kubeflow Pipeline\uacfc Pipeline\uc758 \uc2e4\ud589 \uadf8\ub9ac\uace0 Pipeline Run\uc758 \uacb0\uacfc\ub97c \uad00\ub9ac\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,"Kubeflow Pipeline\uc774 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c Kubeflow\ub97c \uc0ac\uc6a9\ud558\ub294 \uc8fc\ub41c \uc774\uc720\uc774\uba70, Kubeflow Pipeline\uc744 \ub9cc\ub4dc\ub294 \ubc29\ubc95, \uc2e4\ud589\ud558\ub294 \ubc29\ubc95, \uacb0\uacfc\ub97c \ud655\uc778\ud558\ub294 \ubc29\ubc95 \ub4f1 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,o.kt)("a",{parentName:"p",href:"../kubeflow/kubeflow-intro"},"3.Kubeflow"),"\uc5d0\uc11c \ub2e4\ub8f9\ub2c8\ub2e4."))}d.isMDXComponent=!0},7511:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file diff --git a/assets/js/4a2e0471.29f482dc.js b/assets/js/4a2e0471.29f482dc.js deleted file mode 100644 index c718902b..00000000 --- a/assets/js/4a2e0471.29f482dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3774],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=o,b=c["".concat(s,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(b,i(i({ref:t},p),{},{components:r})):n.createElement(b,i({ref:t},p))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:o,i[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const a={title:"1. Central Dashboard",description:"",sidebar_position:1,contributors:["Jaeyeon Kim","SeungTae Kim"]},i=void 0,l={unversionedId:"kubeflow-dashboard-guide/intro",id:"version-1.0/kubeflow-dashboard-guide/intro",title:"1. Central Dashboard",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/intro.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/intro",permalink:"/docs/1.0/kubeflow-dashboard-guide/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/intro.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Central Dashboard",description:"",sidebar_position:1,contributors:["Jaeyeon Kim","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Prometheus & Grafana",permalink:"/docs/1.0/setup-components/install-components-pg"},next:{title:"2. Notebooks",permalink:"/docs/1.0/kubeflow-dashboard-guide/notebooks"}},s={},u=[],p={toc:u},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-kf"},"Kubeflow \uc124\uce58"),"\ub97c \uc644\ub8cc\ud558\uba74, \ub2e4\uc74c \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward --address 0.0.0.0 svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"after-login",src:r(2920).Z,width:"4008",height:"1266"})),(0,o.kt)("p",null,"Central Dashboard\ub294 Kubeflow\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \ud1b5\ud569\ud558\uc5ec \uc81c\uacf5\ud558\ub294 UI\uc785\ub2c8\ub2e4. Central Dashboard\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uae30\ub2a5\uc740 \ud06c\uac8c \uc67c\ucabd\uc758 \ud0ed\uc744 \uae30\uc900\uc73c\ub85c \uad6c\ubd84\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Home"),(0,o.kt)("li",{parentName:"ul"},"Notebooks"),(0,o.kt)("li",{parentName:"ul"},"Tensorboards"),(0,o.kt)("li",{parentName:"ul"},"Volumes"),(0,o.kt)("li",{parentName:"ul"},"Models"),(0,o.kt)("li",{parentName:"ul"},"Experiments(AutoML)"),(0,o.kt)("li",{parentName:"ul"},"Experiments(KFP)"),(0,o.kt)("li",{parentName:"ul"},"Pipelines"),(0,o.kt)("li",{parentName:"ul"},"Runs"),(0,o.kt)("li",{parentName:"ul"},"Recurring Runs"),(0,o.kt)("li",{parentName:"ul"},"Artifacts"),(0,o.kt)("li",{parentName:"ul"},"Executions")),(0,o.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uae30\ub2a5\ubcc4 \uac04\ub2e8\ud55c \uc0ac\uc6a9\ubc95\uc744 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},2920:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/after-login-4b41daca6d9a97824552770b832d59b0.png"},6316:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file diff --git a/assets/js/4a2e0471.8524fd5a.js b/assets/js/4a2e0471.8524fd5a.js new file mode 100644 index 00000000..588b83d6 --- /dev/null +++ b/assets/js/4a2e0471.8524fd5a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3774],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=a,b=c["".concat(s,".").concat(m)]||c[m]||d[m]||o;return r?n.createElement(b,i(i({ref:t},p),{},{components:r})):n.createElement(b,i({ref:t},p))}));function b(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={title:"1. Central Dashboard",description:"",sidebar_position:1,contributors:["Jaeyeon Kim","SeungTae Kim"]},i=void 0,l={unversionedId:"kubeflow-dashboard-guide/intro",id:"version-1.0/kubeflow-dashboard-guide/intro",title:"1. Central Dashboard",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/intro.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/intro",permalink:"/docs/1.0/kubeflow-dashboard-guide/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/intro.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Central Dashboard",description:"",sidebar_position:1,contributors:["Jaeyeon Kim","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Prometheus & Grafana",permalink:"/docs/1.0/setup-components/install-components-pg"},next:{title:"2. Notebooks",permalink:"/docs/1.0/kubeflow-dashboard-guide/notebooks"}},s={},u=[],p={toc:u},c="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(c,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-kf"},"Kubeflow \uc124\uce58"),"\ub97c \uc644\ub8cc\ud558\uba74, \ub2e4\uc74c \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward --address 0.0.0.0 svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"after-login",src:r(2920).Z,width:"4008",height:"1266"})),(0,a.kt)("p",null,"Central Dashboard\ub294 Kubeflow\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \ud1b5\ud569\ud558\uc5ec \uc81c\uacf5\ud558\ub294 UI\uc785\ub2c8\ub2e4. Central Dashboard\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uae30\ub2a5\uc740 \ud06c\uac8c \uc67c\ucabd\uc758 \ud0ed\uc744 \uae30\uc900\uc73c\ub85c \uad6c\ubd84\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Home"),(0,a.kt)("li",{parentName:"ul"},"Notebooks"),(0,a.kt)("li",{parentName:"ul"},"Tensorboards"),(0,a.kt)("li",{parentName:"ul"},"Volumes"),(0,a.kt)("li",{parentName:"ul"},"Models"),(0,a.kt)("li",{parentName:"ul"},"Experiments(AutoML)"),(0,a.kt)("li",{parentName:"ul"},"Experiments(KFP)"),(0,a.kt)("li",{parentName:"ul"},"Pipelines"),(0,a.kt)("li",{parentName:"ul"},"Runs"),(0,a.kt)("li",{parentName:"ul"},"Recurring Runs"),(0,a.kt)("li",{parentName:"ul"},"Artifacts"),(0,a.kt)("li",{parentName:"ul"},"Executions")),(0,a.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uae30\ub2a5\ubcc4 \uac04\ub2e8\ud55c \uc0ac\uc6a9\ubc95\uc744 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},2920:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/after-login-4b41daca6d9a97824552770b832d59b0.png"},6316:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file diff --git a/assets/js/4e3fc5d7.5b1c1a81.js b/assets/js/4e3fc5d7.5b1c1a81.js new file mode 100644 index 00000000..d49107e3 --- /dev/null +++ b/assets/js/4e3fc5d7.5b1c1a81.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6742],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>b});var n=i(7294);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function p(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(l[i]=e[i]);return l}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(l[i]=e[i])}return l}var o=n.createContext({}),s=function(e){var t=n.useContext(o),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},c=function(e){var t=s(e.components);return n.createElement(o.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var i=e.components,l=e.mdxType,p=e.originalType,o=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),u=s(i),g=l,b=u["".concat(o,".").concat(g)]||u[g]||d[g]||p;return i?n.createElement(b,a(a({ref:t},c),{},{components:i})):n.createElement(b,a({ref:t},c))}));function b(e,t){var i=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var p=i.length,a=new Array(p);a[0]=g;var r={};for(var o in t)hasOwnProperty.call(t,o)&&(r[o]=t[o]);r.originalType=e,r[u]="string"==typeof e?e:l,a[1]=r;for(var s=2;s{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>d,frontMatter:()=>p,metadata:()=>r,toc:()=>s});var n=i(7462),l=(i(7294),i(3905));const p={title:"6. Pipeline - Upload",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},a=void 0,r={unversionedId:"kubeflow/basic-pipeline-upload",id:"version-1.0/kubeflow/basic-pipeline-upload",title:"6. Pipeline - Upload",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-pipeline-upload.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-pipeline-upload",permalink:"/docs/1.0/kubeflow/basic-pipeline-upload",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-pipeline-upload.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"6. Pipeline - Upload",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"5. Pipeline - Write",permalink:"/docs/1.0/kubeflow/basic-pipeline"},next:{title:"7. Pipeline - Run",permalink:"/docs/1.0/kubeflow/basic-run"}},o={},s=[{value:"Upload Pipeline",id:"upload-pipeline",level:2},{value:"1. Pipelines \ud0ed \uc120\ud0dd",id:"1-pipelines-\ud0ed-\uc120\ud0dd",level:3},{value:"2. Upload Pipeline \uc120\ud0dd",id:"2-upload-pipeline-\uc120\ud0dd",level:3},{value:"3. Choose file \uc120\ud0dd",id:"3-choose-file-\uc120\ud0dd",level:3},{value:"4. \uc0dd\uc131\ub41c yaml\ud30c\uc77c \uc5c5\ub85c\ub4dc",id:"4-\uc0dd\uc131\ub41c-yaml\ud30c\uc77c-\uc5c5\ub85c\ub4dc",level:3},{value:"5. Create",id:"5-create",level:3},{value:"Upload Pipeline Version",id:"upload-pipeline-version",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...p}=e;return(0,l.kt)(u,(0,n.Z)({},c,p,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"upload-pipeline"},"Upload Pipeline"),(0,l.kt)("p",null,"\uc774\uc81c \uc6b0\ub9ac\uac00 \ub9cc\ub4e0 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc9c1\uc811 kubeflow\uc5d0\uc11c \uc5c5\ub85c\ub4dc \ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ud30c\uc774\ud504\ub77c\uc778 \uc5c5\ub85c\ub4dc\ub294 kubeflow \ub300\uc2dc\ubcf4\ub4dc UI\ub97c \ud1b5\ud574 \uc9c4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n",(0,l.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-kf#%EC%A0%95%EC%83%81-%EC%84%A4%EC%B9%98-%ED%99%95%EC%9D%B8"},"Install Kubeflow")," \uc5d0\uc11c \uc0ac\uc6a9\ud55c \ubc29\ubc95\uc744 \uc774\uc6a9\ud574 \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"http://localhost:8080"},"http://localhost:8080"),"\uc5d0 \uc811\uc18d\ud574 \ub300\uc2dc\ubcf4\ub4dc\ub97c \uc5f4\uc5b4\uc90d\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-pipelines-\ud0ed-\uc120\ud0dd"},"1. Pipelines \ud0ed \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-0.png",src:i(6451).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"2-upload-pipeline-\uc120\ud0dd"},"2. Upload Pipeline \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-1.png",src:i(1382).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"3-choose-file-\uc120\ud0dd"},"3. Choose file \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-2.png",src:i(3109).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"4-\uc0dd\uc131\ub41c-yaml\ud30c\uc77c-\uc5c5\ub85c\ub4dc"},"4. \uc0dd\uc131\ub41c yaml\ud30c\uc77c \uc5c5\ub85c\ub4dc"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-3.png",src:i(9393).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"5-create"},"5. Create"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-4.png",src:i(2017).Z,width:"3360",height:"2100"})),(0,l.kt)("h2",{id:"upload-pipeline-version"},"Upload Pipeline Version"),(0,l.kt)("p",null,"\uc5c5\ub85c\ub4dc\ub41c \ud30c\uc774\ud504\ub77c\uc778\uc740 \uc5c5\ub85c\ub4dc\ub97c \ud1b5\ud574\uc11c \ubc84\uc804\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ub9cc \uae43\ud5d9\uacfc \uac19\uc740 \ucf54\ub4dc \ucc28\uc6d0\uc758 \ubc84\uc804 \uad00\ub9ac\uac00 \uc544\ub2cc \uac19\uc740 \uc774\ub984\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubaa8\uc544\uc11c \ubcf4\uc5ec\uc8fc\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.\n\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud55c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 example_pipeline\uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-5.png",src:i(5736).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-4.png",src:i(2017).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"Upload Version\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud560 \uc218 \uc788\ub294 \ud654\uba74\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-6.png",src:i(502).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc \ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-7.png",src:i(8625).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\uc5c5\ub85c\ub4dc\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ud30c\uc774\ud504\ub77c\uc778 \ubc84\uc804\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-8.png",src:i(6854).Z,width:"3360",height:"2100"})))}d.isMDXComponent=!0},6451:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-0-f7b76be96957b718745ed2097584c522.png"},1382:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-1-db1f71e3803fa7f7864928391e5b515e.png"},3109:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-2-3ebafe6d26ce8382bed6c39fdb949ffc.png"},9393:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-3-39b0f036fc76c0832ea02dc835db627a.png"},2017:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-4-c6013b589b7ab9ec9b83fbbb68f41b2d.png"},5736:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-5-0b90b4869ebaf0654826f5763609e34a.png"},502:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-6-2a94de3824c6e38732d1d18ecb4b7d10.png"},8625:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-7-af0c439edb4ba0f0b7d7e11488d9c971.png"},6854:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-8-2aecbdbeaa0c064cb224d77c268717ca.png"}}]); \ No newline at end of file diff --git a/assets/js/4e3fc5d7.ef03e270.js b/assets/js/4e3fc5d7.ef03e270.js deleted file mode 100644 index a8aa2108..00000000 --- a/assets/js/4e3fc5d7.ef03e270.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6742],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>b});var n=i(7294);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function p(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(l[i]=e[i]);return l}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(l[i]=e[i])}return l}var o=n.createContext({}),s=function(e){var t=n.useContext(o),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},c=function(e){var t=s(e.components);return n.createElement(o.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var i=e.components,l=e.mdxType,p=e.originalType,o=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),u=s(i),g=l,b=u["".concat(o,".").concat(g)]||u[g]||d[g]||p;return i?n.createElement(b,a(a({ref:t},c),{},{components:i})):n.createElement(b,a({ref:t},c))}));function b(e,t){var i=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var p=i.length,a=new Array(p);a[0]=g;var r={};for(var o in t)hasOwnProperty.call(t,o)&&(r[o]=t[o]);r.originalType=e,r[u]="string"==typeof e?e:l,a[1]=r;for(var s=2;s{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>d,frontMatter:()=>p,metadata:()=>r,toc:()=>s});var n=i(7462),l=(i(7294),i(3905));const p={title:"6. Pipeline - Upload",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},a=void 0,r={unversionedId:"kubeflow/basic-pipeline-upload",id:"version-1.0/kubeflow/basic-pipeline-upload",title:"6. Pipeline - Upload",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-pipeline-upload.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-pipeline-upload",permalink:"/docs/1.0/kubeflow/basic-pipeline-upload",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-pipeline-upload.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"6. Pipeline - Upload",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"5. Pipeline - Write",permalink:"/docs/1.0/kubeflow/basic-pipeline"},next:{title:"7. Pipeline - Run",permalink:"/docs/1.0/kubeflow/basic-run"}},o={},s=[{value:"Upload Pipeline",id:"upload-pipeline",level:2},{value:"1. Pipelines \ud0ed \uc120\ud0dd",id:"1-pipelines-\ud0ed-\uc120\ud0dd",level:3},{value:"2. Upload Pipeline \uc120\ud0dd",id:"2-upload-pipeline-\uc120\ud0dd",level:3},{value:"3. Choose file \uc120\ud0dd",id:"3-choose-file-\uc120\ud0dd",level:3},{value:"4. \uc0dd\uc131\ub41c yaml\ud30c\uc77c \uc5c5\ub85c\ub4dc",id:"4-\uc0dd\uc131\ub41c-yaml\ud30c\uc77c-\uc5c5\ub85c\ub4dc",level:3},{value:"5. Create",id:"5-create",level:3},{value:"Upload Pipeline Version",id:"upload-pipeline-version",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...p}=e;return(0,l.kt)(u,(0,n.Z)({},c,p,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"upload-pipeline"},"Upload Pipeline"),(0,l.kt)("p",null,"\uc774\uc81c \uc6b0\ub9ac\uac00 \ub9cc\ub4e0 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc9c1\uc811 kubeflow\uc5d0\uc11c \uc5c5\ub85c\ub4dc \ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ud30c\uc774\ud504\ub77c\uc778 \uc5c5\ub85c\ub4dc\ub294 kubeflow \ub300\uc2dc\ubcf4\ub4dc UI\ub97c \ud1b5\ud574 \uc9c4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n",(0,l.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-kf#%EC%A0%95%EC%83%81-%EC%84%A4%EC%B9%98-%ED%99%95%EC%9D%B8"},"Install Kubeflow")," \uc5d0\uc11c \uc0ac\uc6a9\ud55c \ubc29\ubc95\uc744 \uc774\uc6a9\ud574 \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"http://localhost:8080"},"http://localhost:8080"),"\uc5d0 \uc811\uc18d\ud574 \ub300\uc2dc\ubcf4\ub4dc\ub97c \uc5f4\uc5b4\uc90d\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-pipelines-\ud0ed-\uc120\ud0dd"},"1. Pipelines \ud0ed \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-0.png",src:i(6451).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"2-upload-pipeline-\uc120\ud0dd"},"2. Upload Pipeline \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-1.png",src:i(1382).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"3-choose-file-\uc120\ud0dd"},"3. Choose file \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-2.png",src:i(3109).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"4-\uc0dd\uc131\ub41c-yaml\ud30c\uc77c-\uc5c5\ub85c\ub4dc"},"4. \uc0dd\uc131\ub41c yaml\ud30c\uc77c \uc5c5\ub85c\ub4dc"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-3.png",src:i(9393).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"5-create"},"5. Create"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-4.png",src:i(2017).Z,width:"3360",height:"2100"})),(0,l.kt)("h2",{id:"upload-pipeline-version"},"Upload Pipeline Version"),(0,l.kt)("p",null,"\uc5c5\ub85c\ub4dc\ub41c \ud30c\uc774\ud504\ub77c\uc778\uc740 \uc5c5\ub85c\ub4dc\ub97c \ud1b5\ud574\uc11c \ubc84\uc804\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ub9cc \uae43\ud5d9\uacfc \uac19\uc740 \ucf54\ub4dc \ucc28\uc6d0\uc758 \ubc84\uc804 \uad00\ub9ac\uac00 \uc544\ub2cc \uac19\uc740 \uc774\ub984\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubaa8\uc544\uc11c \ubcf4\uc5ec\uc8fc\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.\n\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud55c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 example_pipeline\uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-5.png",src:i(5736).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-4.png",src:i(2017).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"Upload Version\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud560 \uc218 \uc788\ub294 \ud654\uba74\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-6.png",src:i(502).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc \ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-7.png",src:i(8625).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\uc5c5\ub85c\ub4dc\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ud30c\uc774\ud504\ub77c\uc778 \ubc84\uc804\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-8.png",src:i(6854).Z,width:"3360",height:"2100"})))}d.isMDXComponent=!0},6451:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-0-f7b76be96957b718745ed2097584c522.png"},1382:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-1-db1f71e3803fa7f7864928391e5b515e.png"},3109:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-2-3ebafe6d26ce8382bed6c39fdb949ffc.png"},9393:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-3-39b0f036fc76c0832ea02dc835db627a.png"},2017:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-4-c6013b589b7ab9ec9b83fbbb68f41b2d.png"},5736:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-5-0b90b4869ebaf0654826f5763609e34a.png"},502:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-6-2a94de3824c6e38732d1d18ecb4b7d10.png"},8625:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-7-af0c439edb4ba0f0b7d7e11488d9c971.png"},6854:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-8-2aecbdbeaa0c064cb224d77c268717ca.png"}}]); \ No newline at end of file diff --git a/assets/js/4fc796a7.b7cad4fe.js b/assets/js/4fc796a7.b7cad4fe.js deleted file mode 100644 index 4794e748..00000000 --- a/assets/js/4fc796a7.b7cad4fe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3872],{3905:(n,e,t)=>{t.d(e,{Zo:()=>p,kt:()=>_});var a=t(7294);function l(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function r(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,a)}return t}function i(n){for(var e=1;e=0||(l[t]=n[t]);return l}(n,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(l[t]=n[t])}return l}var s=a.createContext({}),m=function(n){var e=a.useContext(s),t=e;return n&&(t="function"==typeof n?n(e):i(i({},e),n)),t},p=function(n){var e=m(n.components);return a.createElement(s.Provider,{value:e},n.children)},d="mdxType",c={inlineCode:"code",wrapper:function(n){var e=n.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(n,e){var t=n.components,l=n.mdxType,r=n.originalType,s=n.parentName,p=o(n,["components","mdxType","originalType","parentName"]),d=m(t),u=l,_=d["".concat(s,".").concat(u)]||d[u]||c[u]||r;return t?a.createElement(_,i(i({ref:e},p),{},{components:t})):a.createElement(_,i({ref:e},p))}));function _(n,e){var t=arguments,l=e&&e.mdxType;if("string"==typeof n||l){var r=t.length,i=new Array(r);i[0]=u;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=n,o[d]="string"==typeof n?n:l,i[1]=o;for(var m=2;m{t.r(e),t.d(e,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>m});var a=t(7462),l=(t(7294),t(3905));const r={title:"6. Multi Models",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},i=void 0,o={unversionedId:"api-deployment/seldon-children",id:"version-1.0/api-deployment/seldon-children",title:"6. Multi Models",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-children.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-children",permalink:"/docs/1.0/api-deployment/seldon-children",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-children.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"6. Multi Models",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"5. Model from MLflow",permalink:"/docs/1.0/api-deployment/seldon-mlflow"},next:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",permalink:"/docs/1.0/appendix/pyenv"}},s={},m=[{value:"Multi Models",id:"multi-models",level:2},{value:"Pipeline",id:"pipeline",level:2}],p={toc:m},d="wrapper";function c(n){let{components:e,...r}=n;return(0,l.kt)(d,(0,a.Z)({},p,r,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"multi-models"},"Multi Models"),(0,l.kt)("p",null,"\uc55e\uc11c \uc124\uba85\ud588\ub358 \ubc29\ubc95\ub4e4\uc740 \ubaa8\ub450 \ub2e8\uc77c \ubaa8\ub378\uc744 \ub300\uc0c1\uc73c\ub85c \ud588\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc5ec\ub7ec \uac1c\uc758 \ubaa8\ub378\uc744 \uc5f0\uacb0\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubd05\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"pipeline"},"Pipeline"),(0,l.kt)("p",null,"\uc6b0\uc120 \ubaa8\ub378\uc744 2\uac1c\ub97c \uc0dd\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa8\ub378\uc740 \uc55e\uc11c \uc0ac\uc6a9\ud55c SVC \ubaa8\ub378\uc5d0 StandardScaler\ub97c \ucd94\uac00\ud558\uace0 \uc800\uc7a5\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_scaler_from_csv(\n data_path: InputPath("csv"),\n scaled_data_path: OutputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n):\n import dill\n import pandas as pd\n from sklearn.preprocessing import StandardScaler\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n data = pd.read_csv(data_path)\n\n scaler = StandardScaler()\n scaled_data = scaler.fit_transform(data)\n scaled_data = pd.DataFrame(scaled_data, columns=data.columns, index=data.index)\n\n scaled_data.to_csv(scaled_data_path, index=False)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(scaler, file_writer)\n\n input_example = data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(data, scaler.transform(data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["scikit-learn"],\n install_mlflow=False\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_svc_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["scikit-learn"],\n install_mlflow=False\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n\nfrom kfp.dsl import pipeline\n\n\n@pipeline(name="multi_model_pipeline")\ndef multi_model_pipeline(kernel: str = "rbf"):\n iris_data = load_iris_data()\n scaled_data = train_scaler_from_csv(data=iris_data.outputs["data"])\n _ = upload_sklearn_model_to_mlflow(\n model_name="scaler",\n model=scaled_data.outputs["model"],\n input_example=scaled_data.outputs["input_example"],\n signature=scaled_data.outputs["signature"],\n conda_env=scaled_data.outputs["conda_env"],\n )\n model = train_svc_from_csv(\n train_data=scaled_data.outputs["scaled_data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name="svc",\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(multi_model_pipeline, "multi_model_pipeline.yaml")\n\n')),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"children-kubeflow.png",src:t(1906).Z,width:"2698",height:"1886"})),(0,l.kt)("p",null,"MLflow \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub450 \uac1c\uc758 \ubaa8\ub378\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"children-mlflow.png",src:t(3188).Z,width:"3006",height:"1744"})),(0,l.kt)("p",null,"\uac01\uac01\uc758 run_id\ub97c \ud655\uc778 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc774 SeldonDeployment \uc2a4\ud399\uc744 \uc815\uc758\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: multi-model-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: scaler-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/7f445015a0e94519b003d316478766ef/artifacts/scaler"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n - name: svc-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/87eb168e76264b39a24b0e5ca0fe922b/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: scaler\n image: seldonio/mlflowserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n - name: svc\n image: seldonio/mlflowserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n')),(0,l.kt)("p",null,"\ubaa8\ub378\uc774 \ub450 \uac1c\uac00 \ub418\uc5c8\uc73c\ubbc0\ub85c \uac01 \ubaa8\ub378\uc758 initContainer\uc640 container\ub97c \uc815\uc758\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\uc774 \ud544\ub4dc\ub294 \uc785\ub825\uac12\uc744 array\ub85c \ubc1b\uc73c\uba70 \uc21c\uc11c\ub294 \uad00\uacc4\uc5c6\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa8\ub378\uc774 \uc2e4\ud589\ud558\ub294 \uc21c\uc11c\ub294 graph\uc5d0\uc11c \uc815\uc758\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n')),(0,l.kt)("p",null,"graph\uc758 \ub3d9\uc791 \ubc29\uc2dd\uc740 \ucc98\uc74c \ubc1b\uc740 \uac12\uc744 \uc815\ud574\uc9c4 predict_method\ub85c \ubcc0\ud658\ud55c \ub4a4 children\uc73c\ub85c \uc815\uc758\ub41c \ubaa8\ub378\uc5d0 \uc804\ub2ec\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.\n\uc774 \uacbd\uc6b0 scaler -> svc \ub85c \ub370\uc774\ud130\uac00 \uc804\ub2ec\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\uc81c \uc704\uc758 \uc2a4\ud399\uc744 yaml\ud30c\uc77c\ub85c \uc0dd\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'cat < multi-model.yaml\napiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: multi-model-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: scaler-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/7f445015a0e94519b003d316478766ef/artifacts/scaler"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n - name: svc-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/87eb168e76264b39a24b0e5ca0fe922b/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: scaler\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n - name: svc\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\nEOF\n')),(0,l.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 API\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f multi-model.yaml\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"seldondeployment.machinelearning.seldon.io/multi-model-example created\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub410\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow-user-example-com | grep multi-model-example\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c pod\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"multi-model-example-model-0-scaler-svc-9955fb795-n9ffw 4/4 Running 0 2m30s\n")))}c.isMDXComponent=!0},1906:(n,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/children-kubeflow-5100745b1be1aa100dd153b1785ad218.png"},3188:(n,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/children-mlflow-5190d0e3f19a5772de21d1b08ece4822.png"}}]); \ No newline at end of file diff --git a/assets/js/4fc796a7.c39aed9e.js b/assets/js/4fc796a7.c39aed9e.js new file mode 100644 index 00000000..ec99b4e8 --- /dev/null +++ b/assets/js/4fc796a7.c39aed9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3872],{3905:(n,e,t)=>{t.d(e,{Zo:()=>p,kt:()=>_});var a=t(7294);function l(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function r(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,a)}return t}function i(n){for(var e=1;e=0||(l[t]=n[t]);return l}(n,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(l[t]=n[t])}return l}var s=a.createContext({}),m=function(n){var e=a.useContext(s),t=e;return n&&(t="function"==typeof n?n(e):i(i({},e),n)),t},p=function(n){var e=m(n.components);return a.createElement(s.Provider,{value:e},n.children)},d="mdxType",c={inlineCode:"code",wrapper:function(n){var e=n.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(n,e){var t=n.components,l=n.mdxType,r=n.originalType,s=n.parentName,p=o(n,["components","mdxType","originalType","parentName"]),d=m(t),u=l,_=d["".concat(s,".").concat(u)]||d[u]||c[u]||r;return t?a.createElement(_,i(i({ref:e},p),{},{components:t})):a.createElement(_,i({ref:e},p))}));function _(n,e){var t=arguments,l=e&&e.mdxType;if("string"==typeof n||l){var r=t.length,i=new Array(r);i[0]=u;var o={};for(var s in e)hasOwnProperty.call(e,s)&&(o[s]=e[s]);o.originalType=n,o[d]="string"==typeof n?n:l,i[1]=o;for(var m=2;m{t.r(e),t.d(e,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>m});var a=t(7462),l=(t(7294),t(3905));const r={title:"6. Multi Models",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},i=void 0,o={unversionedId:"api-deployment/seldon-children",id:"version-1.0/api-deployment/seldon-children",title:"6. Multi Models",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-children.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-children",permalink:"/docs/1.0/api-deployment/seldon-children",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-children.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"6. Multi Models",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"5. Model from MLflow",permalink:"/docs/1.0/api-deployment/seldon-mlflow"},next:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",permalink:"/docs/1.0/appendix/pyenv"}},s={},m=[{value:"Multi Models",id:"multi-models",level:2},{value:"Pipeline",id:"pipeline",level:2}],p={toc:m},d="wrapper";function c(n){let{components:e,...r}=n;return(0,l.kt)(d,(0,a.Z)({},p,r,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"multi-models"},"Multi Models"),(0,l.kt)("p",null,"\uc55e\uc11c \uc124\uba85\ud588\ub358 \ubc29\ubc95\ub4e4\uc740 \ubaa8\ub450 \ub2e8\uc77c \ubaa8\ub378\uc744 \ub300\uc0c1\uc73c\ub85c \ud588\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc5ec\ub7ec \uac1c\uc758 \ubaa8\ub378\uc744 \uc5f0\uacb0\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubd05\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"pipeline"},"Pipeline"),(0,l.kt)("p",null,"\uc6b0\uc120 \ubaa8\ub378\uc744 2\uac1c\ub97c \uc0dd\uc131\ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa8\ub378\uc740 \uc55e\uc11c \uc0ac\uc6a9\ud55c SVC \ubaa8\ub378\uc5d0 StandardScaler\ub97c \ucd94\uac00\ud558\uace0 \uc800\uc7a5\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_scaler_from_csv(\n data_path: InputPath("csv"),\n scaled_data_path: OutputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n):\n import dill\n import pandas as pd\n from sklearn.preprocessing import StandardScaler\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n data = pd.read_csv(data_path)\n\n scaler = StandardScaler()\n scaled_data = scaler.fit_transform(data)\n scaled_data = pd.DataFrame(scaled_data, columns=data.columns, index=data.index)\n\n scaled_data.to_csv(scaled_data_path, index=False)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(scaler, file_writer)\n\n input_example = data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(data, scaler.transform(data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["scikit-learn"],\n install_mlflow=False\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_svc_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["scikit-learn"],\n install_mlflow=False\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n\nfrom kfp.dsl import pipeline\n\n\n@pipeline(name="multi_model_pipeline")\ndef multi_model_pipeline(kernel: str = "rbf"):\n iris_data = load_iris_data()\n scaled_data = train_scaler_from_csv(data=iris_data.outputs["data"])\n _ = upload_sklearn_model_to_mlflow(\n model_name="scaler",\n model=scaled_data.outputs["model"],\n input_example=scaled_data.outputs["input_example"],\n signature=scaled_data.outputs["signature"],\n conda_env=scaled_data.outputs["conda_env"],\n )\n model = train_svc_from_csv(\n train_data=scaled_data.outputs["scaled_data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name="svc",\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(multi_model_pipeline, "multi_model_pipeline.yaml")\n\n')),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"children-kubeflow.png",src:t(1906).Z,width:"2698",height:"1886"})),(0,l.kt)("p",null,"MLflow \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub450 \uac1c\uc758 \ubaa8\ub378\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"children-mlflow.png",src:t(3188).Z,width:"3006",height:"1744"})),(0,l.kt)("p",null,"\uac01\uac01\uc758 run_id\ub97c \ud655\uc778 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc774 SeldonDeployment \uc2a4\ud399\uc744 \uc815\uc758\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: multi-model-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: scaler-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/7f445015a0e94519b003d316478766ef/artifacts/scaler"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n - name: svc-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/87eb168e76264b39a24b0e5ca0fe922b/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: scaler\n image: seldonio/mlflowserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n - name: svc\n image: seldonio/mlflowserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n')),(0,l.kt)("p",null,"\ubaa8\ub378\uc774 \ub450 \uac1c\uac00 \ub418\uc5c8\uc73c\ubbc0\ub85c \uac01 \ubaa8\ub378\uc758 initContainer\uc640 container\ub97c \uc815\uc758\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\uc774 \ud544\ub4dc\ub294 \uc785\ub825\uac12\uc744 array\ub85c \ubc1b\uc73c\uba70 \uc21c\uc11c\ub294 \uad00\uacc4\uc5c6\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa8\ub378\uc774 \uc2e4\ud589\ud558\ub294 \uc21c\uc11c\ub294 graph\uc5d0\uc11c \uc815\uc758\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n')),(0,l.kt)("p",null,"graph\uc758 \ub3d9\uc791 \ubc29\uc2dd\uc740 \ucc98\uc74c \ubc1b\uc740 \uac12\uc744 \uc815\ud574\uc9c4 predict_method\ub85c \ubcc0\ud658\ud55c \ub4a4 children\uc73c\ub85c \uc815\uc758\ub41c \ubaa8\ub378\uc5d0 \uc804\ub2ec\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.\n\uc774 \uacbd\uc6b0 scaler -> svc \ub85c \ub370\uc774\ud130\uac00 \uc804\ub2ec\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\uc81c \uc704\uc758 \uc2a4\ud399\uc744 yaml\ud30c\uc77c\ub85c \uc0dd\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'cat < multi-model.yaml\napiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: multi-model-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: scaler-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/7f445015a0e94519b003d316478766ef/artifacts/scaler"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n - name: svc-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/87eb168e76264b39a24b0e5ca0fe922b/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: scaler\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n - name: svc\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: scaler\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: predict_method\n type: STRING\n value: "transform"\n children:\n - name: svc\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\nEOF\n')),(0,l.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 API\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f multi-model.yaml\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"seldondeployment.machinelearning.seldon.io/multi-model-example created\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub410\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow-user-example-com | grep multi-model-example\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c pod\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"multi-model-example-model-0-scaler-svc-9955fb795-n9ffw 4/4 Running 0 2m30s\n")))}c.isMDXComponent=!0},1906:(n,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/children-kubeflow-5100745b1be1aa100dd153b1785ad218.png"},3188:(n,e,t)=>{t.d(e,{Z:()=>a});const a=t.p+"assets/images/children-mlflow-5190d0e3f19a5772de21d1b08ece4822.png"}}]); \ No newline at end of file diff --git a/assets/js/541347e5.065e6089.js b/assets/js/541347e5.065e6089.js new file mode 100644 index 00000000..79df4908 --- /dev/null +++ b/assets/js/541347e5.065e6089.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2725],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,p=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),d=u(n),m=i,k=d["".concat(p,".").concat(m)]||d[m]||c[m]||l;return n?r.createElement(k,o(o({ref:t},s),{},{components:n})):r.createElement(k,o({ref:t},s))}));function k(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,o=new Array(l);o[0]=m;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[d]="string"==typeof e?e:i,o[1]=a;for(var u=2;u{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var r=n(7462),i=(n(7294),n(3905));const l={title:"3. Components of MLOps",description:"Describe MLOps Components",sidebar_position:3,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2021-12-10T00:00:00.000Z"),contributors:["Youngcheol Jang"]},o=void 0,a={unversionedId:"introduction/component",id:"version-1.0/introduction/component",title:"3. Components of MLOps",description:"Describe MLOps Components",source:"@site/versioned_docs/version-1.0/introduction/component.md",sourceDirName:"introduction",slug:"/introduction/component",permalink:"/docs/1.0/introduction/component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/introduction/component.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Components of MLOps",description:"Describe MLOps Components",sidebar_position:3,date:"2021-12-03T00:00:00.000Z",lastmod:"2021-12-10T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"2. Levels of MLOps",permalink:"/docs/1.0/introduction/levels"},next:{title:"4. Why Kubernetes?",permalink:"/docs/1.0/introduction/why_kubernetes"}},p={},u=[{value:"Practitioners guide to MLOps",id:"practitioners-guide-to-mlops",level:2},{value:"1. Experimentation",id:"1-experimentation",level:3},{value:"2. Data Processing",id:"2-data-processing",level:3},{value:"3. Model training",id:"3-model-training",level:3},{value:"4. Model evaluation",id:"4-model-evaluation",level:3},{value:"5. Model serving",id:"5-model-serving",level:3},{value:"6. Online experimentation",id:"6-online-experimentation",level:3},{value:"7. Model Monitoring",id:"7-model-monitoring",level:3},{value:"8. ML Pipeline",id:"8-ml-pipeline",level:3},{value:"9. Model Registry",id:"9-model-registry",level:3},{value:"10. Dataset and Feature Repository",id:"10-dataset-and-feature-repository",level:3},{value:"11. ML Metadata and Artifact Tracking",id:"11-ml-metadata-and-artifact-tracking",level:3}],s={toc:u},d="wrapper";function c(e){let{components:t,...l}=e;return(0,i.kt)(d,(0,r.Z)({},s,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"practitioners-guide-to-mlops"},"Practitioners guide to MLOps"),(0,i.kt)("p",null," 2021\ub144 5\uc6d4\uc5d0 \ubc1c\ud45c\ub41c \uad6c\uae00\uc758 ",(0,i.kt)("a",{parentName:"p",href:"https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf"},"white paper : Practitioners guide to MLOps: A framework for continuous delivery and automation of machine learning"),"\uc5d0\uc11c\ub294 MLOps\uc758 \ud575\uc2ec \uae30\ub2a5\ub4e4\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc744 \uc5b8\uae09\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"mlops-component",src:n(8037).Z,width:"2352",height:"1890"})),(0,i.kt)("p",null," \uac01 \uae30\ub2a5\uc774 \uc5b4\ub5a4 \uc5ed\ud560\uc744 \ud558\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"1-experimentation"},"1. Experimentation"),(0,i.kt)("p",null," \uc2e4\ud5d8(Experimentation)\uc740 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \ub370\uc774\ud130\ub97c \ubd84\uc11d\ud558\uace0, \ud504\ub85c\ud1a0\ud0c0\uc785 \ubaa8\ub378\uc744 \ub9cc\ub4e4\uba70 \ud559\uc2b5 \uae30\ub2a5\uc744 \uad6c\ud604\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uae43(Git)\uacfc \uac19\uc740 \ubc84\uc804 \ucee8\ud2b8\ub864 \ub3c4\uad6c\uc640 \ud1b5\ud569\ub41c \ub178\ud2b8\ubd81(Jupyter Notebook) \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\ud55c \ub370\uc774\ud130, \ud558\uc774\ud37c \ud30c\ub77c\ubbf8\ud130, \ud3c9\uac00 \uc9c0\ud45c\ub97c \ud3ec\ud568\ud55c \uc2e4\ud5d8 \ucd94\uc801 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub370\uc774\ud130\uc640 \ubaa8\ub378\uc5d0 \ub300\ud55c \ubd84\uc11d \ubc0f \uc2dc\uac01\ud654 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"2-data-processing"},"2. Data Processing"),(0,i.kt)("p",null," \ub370\uc774\ud130 \ucc98\ub9ac(Data Processing)\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378 \uac1c\ubc1c \ub2e8\uacc4, \uc9c0\uc18d\uc801\uc778 \ud559\uc2b5(Continuous Training) \ub2e8\uacc4, \uadf8\ub9ac\uace0 API \ubc30\ud3ec(API Deployment) \ub2e8\uacc4\uc5d0\uc11c \ub9ce\uc740 \uc591\uc758 \ub370\uc774\ud130\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574 \uc8fc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ub370\uc774\ud130 \uc18c\uc2a4\uc640 \uc11c\ube44\uc2a4\uc5d0 \ud638\ud658\ub418\ub294 \ub370\uc774\ud130 \ucee4\ub125\ud130(connector) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc640 \ud638\ud658\ub418\ub294 \ub370\uc774\ud130 \uc778\ucf54\ub354(encoder) & \ub514\ucf54\ub354(decoder) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ub370\uc774\ud130 \ubcc0\ud658\uacfc \ud53c\ucc98 \uc5d4\uc9c0\ub2c8\uc5b4\ub9c1(feature engineering) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ud559\uc2b5\uacfc \uc11c\ube59\uc744 \uc704\ud55c \ud655\uc7a5 \uac00\ub2a5\ud55c \ubc30\uce58, \uc2a4\ud2b8\ub9bc \ub370\uc774\ud130 \ucc98\ub9ac \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"3-model-training"},"3. Model training"),(0,i.kt)("p",null," \ubaa8\ub378 \ud559\uc2b5(Model training)\uc740 \ubaa8\ub378 \ud559\uc2b5\uc744 \uc704\ud55c \uc54c\uace0\ub9ac\uc998\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc2e4\ud589\uc2dc\ucf1c\uc8fc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"ML \ud504\ub808\uc784\uc6cc\ud06c\uc758 \uc2e4\ud589\uc744 \uc704\ud55c \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc218\uc758 GPU / \ubd84\uc0b0 \ud559\uc2b5 \uc0ac\uc6a9\uc744 \uc704\ud55c \ubd84\uc0b0 \ud559\uc2b5 \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ud558\uc774\ud37c \ud30c\ub77c\ubbf8\ud130 \ud29c\ub2dd\uacfc \ucd5c\uc801\ud654 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"4-model-evaluation"},"4. Model evaluation"),(0,i.kt)("p",null," \ubaa8\ub378 \ud3c9\uac00(Model evaluation)\ub294 \uc2e4\ud5d8 \ud658\uacbd\uacfc \uc0c1\uc6a9 \ud658\uacbd\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \ubaa8\ub378\uc758 \uc131\ub2a5\uc744 \uad00\ucc30\ud560 \uc218 \uc788\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud3c9\uac00 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ubaa8\ub378 \uc131\ub2a5 \ud3c9\uac00 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \uc9c0\uc18d \ud559\uc2b5 \uc2e4\ud589 \uacb0\uacfc\uc5d0 \ub300\ud55c \uc608\uce21 \uc131\ub2a5 \ucd94\uc801"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \ubaa8\ub378\uc758 \uc131\ub2a5 \ube44\uad50\uc640 \uc2dc\uac01\ud654"),(0,i.kt)("li",{parentName:"ul"},"\ud574\uc11d\ud560 \uc218 \uc788\ub294 AI \uae30\uc220\uc744 \uc774\uc6a9\ud55c \ubaa8\ub378 \ucd9c\ub825 \ud574\uc11d \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"5-model-serving"},"5. Model serving"),(0,i.kt)("p",null," \ubaa8\ub378 \uc11c\ube59(Model serving)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uace0 \uc11c\ube59\ud558\uae30 \uc704\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uc800 \uc9c0\uc5f0 \ucd94\ub860\uacfc \uace0\uac00\uc6a9\uc131 \ucd94\ub860 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c ML \ubaa8\ub378 \uc11c\ube59 \ud504\ub808\uc784\uc6cc\ud06c \uc9c0\uc6d0(Tensorflow Serving, TorchServe, NVIDIA Triton, Scikit-learn, XGGoost. etc)"),(0,i.kt)("li",{parentName:"ul"},"\ubcf5\uc7a1\ud55c \ud615\ud0dc\uc758 \ucd94\ub860 \ub8e8\ud2f4 \uae30\ub2a5 \uc81c\uacf5, \uc608\ub97c \ub4e4\uc5b4 \uc804\ucc98\ub9ac(preprocess) \ub610\ub294 \ud6c4\ucc98\ub9ac(postprocess) \uae30\ub2a5\uacfc \ucd5c\uc885 \uacb0\uacfc\ub97c \uc704\ud574 \ub2e4\uc218\uc758 \ubaa8\ub378\uc774 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\ub97c \ub9d0\ud569\ub2c8\ub2e4."),(0,i.kt)("li",{parentName:"ul"},"\uc21c\uac04\uc801\uc73c\ub85c \uce58\uc19f\ub294 \ucd94\ub860 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc624\ud1a0 \uc2a4\ucf00\uc77c\ub9c1(autoscaling) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ucd94\ub860 \uc694\uccad\uacfc \ucd94\ub860 \uacb0\uacfc\uc5d0 \ub300\ud55c \ub85c\uae45 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"6-online-experimentation"},"6. Online experimentation"),(0,i.kt)("p",null," \uc628\ub77c\uc778 \uc2e4\ud5d8(Online experimentation)\uc740 \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc774 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c, \uc774 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uba74 \uc5b4\ub290 \uc815\ub3c4\uc758 \uc131\ub2a5\uc744 \ubcf4\uc77c \uac83\uc778\uc9c0 \uac80\uc99d\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \uc0c8 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\ub294 \uac83\uae4c\uc9c0 \uc5f0\ub3d9\ud558\uae30 \uc704\ud574 \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\uc640 \uc5f0\ub3d9\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uce74\ub098\ub9ac(canary) & \uc100\ub3c4(shadow) \ubc30\ud3ec \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"A/B \ud14c\uc2a4\ud2b8 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\uba40\ud2f0 \uc554\ub4dc \ubc34\ub527(Multi-armed bandit) \ud14c\uc2a4\ud2b8 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"7-model-monitoring"},"7. Model Monitoring"),(0,i.kt)("p",null,"\ubaa8\ub378 \ubaa8\ub2c8\ud130\ub9c1(Model Monitoring)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0 \ubc30\ud3ec\ub41c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\ub294\uc9c0\ub97c \ubaa8\ub2c8\ud130\ub9c1\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \ub5a8\uc5b4\uc838 \uc5c5\ub370\uc774\ud2b8\uac00 \ud544\uc694\ud55c\uc9c0\uc5d0 \ub300\ud55c \uc815\ubcf4 \ub4f1\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"8-ml-pipeline"},"8. ML Pipeline"),(0,i.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ud30c\uc774\ud504\ub77c\uc778(ML Pipeline)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0\uc11c \ubcf5\uc7a1\ud55c ML \ud559\uc2b5\uacfc \ucd94\ub860 \uc791\uc5c5\uc744 \uad6c\uc131\ud558\uace0 \uc81c\uc5b4\ud558\uace0 \uc790\ub3d9\ud654\ud558\uae30 \uc704\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \uc774\ubca4\ud2b8\ub97c \uc18c\uc2a4\ub97c \ud1b5\ud55c \ud30c\uc774\ud504\ub77c\uc778 \uc2e4\ud589 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\ud30c\uc774\ud504\ub77c\uc778 \ud30c\ub77c\ubbf8\ud130\uc640 \uc0dd\uc131\ub418\ub294 \uc0b0\ucd9c\ubb3c \uad00\ub9ac\ub97c \uc704\ud55c \uba38\uc2e0\ub7ec\ub2dd \uba54\ud0c0\ub370\uc774\ud130 \ucd94\uc801\uacfc \uc5f0\ub3d9 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc778 \uba38\uc2e0\ub7ec\ub2dd \uc791\uc5c5\uc744 \uc704\ud55c \ub0b4\uc7a5 \ucef4\ud3ec\ub10c\ud2b8 \uc9c0\uc6d0\uacfc \uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \uad6c\ud604\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \uc9c0\uc6d0 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \uc2e4\ud589 \ud658\uacbd \uc81c\uacf5 \uae30\ub2a5")),(0,i.kt)("h3",{id:"9-model-registry"},"9. Model Registry"),(0,i.kt)("p",null," \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \uc0dd\uba85 \uc8fc\uae30(Lifecycle)\uc744 \uc911\uc559 \uc800\uc7a5\uc18c\uc5d0\uc11c \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ud574 \uc8fc\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud559\uc2b5\ub41c \ubaa8\ub378 \uadf8\ub9ac\uace0 \ubc30\ud3ec\ub41c \ubaa8\ub378\uc5d0 \ub300\ud55c \ub4f1\ub85d, \ucd94\uc801, \ubc84\uc800\ub2dd \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ubc30\ud3ec\ub97c \uc704\ud574 \ud544\uc694\ud55c \ub370\uc774\ud130\uc640 \ub7f0\ud0c0\uc784 \ud328\ud0a4\uc9c0\ub4e4\uc5d0 \ub300\ud55c \uc815\ubcf4 \uc800\uc7a5 \uae30\ub2a5")),(0,i.kt)("h3",{id:"10-dataset-and-feature-repository"},"10. Dataset and Feature Repository"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub370\uc774\ud130\uc5d0 \ub300\ud55c \uacf5\uc720, \uac80\uc0c9, \uc7ac\uc0ac\uc6a9 \uadf8\ub9ac\uace0 \ubc84\uc804 \uad00\ub9ac \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc774\ubca4\ud2b8 \uc2a4\ud2b8\ub9ac\ubc0d \ubc0f \uc628\ub77c\uc778 \ucd94\ub860 \uc791\uc5c5\uc5d0 \ub300\ud55c \uc2e4\uc2dc\uac04 \ucc98\ub9ac \ubc0f \uc800 \uc9c0\uc5f0 \uc11c\ube59 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc0ac\uc9c4, \ud14d\uc2a4\ud2b8, \ud14c\uc774\ube14 \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130 \uc9c0\uc6d0 \uae30\ub2a5")),(0,i.kt)("h3",{id:"11-ml-metadata-and-artifact-tracking"},"11. ML Metadata and Artifact Tracking"),(0,i.kt)("p",null," MLOps\uc758 \uac01 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \uc0b0\ucd9c\ubb3c\ub4e4\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4. ML \uba54\ud0c0\ub370\uc774\ud130\ub294 \uc774\ub7f0 \uc0b0\ucd9c\ubb3c\ub4e4\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.\nML \uba54\ud0c0\ub370\uc774\ud130\uc640 \uc0b0\ucd9c\ubb3c \uad00\ub9ac\ub294 \uc0b0\ucd9c\ubb3c\uc758 \uc704\uce58, \ud0c0\uc785, \uc18d\uc131, \uadf8\ub9ac\uace0 \uad00\ub828\ub41c \uc2e4\ud5d8(experiment)\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uad00\ub9ac\ud558\uae30 \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"ML \uc0b0\ucd9c\ubb3c\uc5d0 \ub300\ud55c \ud788\uc2a4\ud1a0\ub9ac \uad00\ub9ac \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc2e4\ud5d8\uacfc \ud30c\uc774\ud504\ub77c\uc778 \ud30c\ub77c\ubbf8\ud130 \uc124\uc815\uc5d0 \ub300\ud55c \ucd94\uc801, \uacf5\uc720 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"ML \uc0b0\ucd9c\ubb3c\uc5d0 \ub300\ud55c \uc800\uc7a5, \uc811\uadfc, \uc2dc\uac01\ud654, \ub2e4\uc6b4\ub85c\ub4dc \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\ub978 MLOps \uae30\ub2a5\uacfc\uc758 \ud1b5\ud569 \uae30\ub2a5 \uc81c\uacf5")))}c.isMDXComponent=!0},8037:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/mlops-component-540cce1f22f97807b54c5e0dd1fec01e.png"}}]); \ No newline at end of file diff --git a/assets/js/541347e5.5f1bb48f.js b/assets/js/541347e5.5f1bb48f.js deleted file mode 100644 index e3986d35..00000000 --- a/assets/js/541347e5.5f1bb48f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2725],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=i.createContext({}),u=function(e){var t=i.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=u(e.components);return i.createElement(p.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,k=d["".concat(p,".").concat(m)]||d[m]||c[m]||l;return n?i.createElement(k,o(o({ref:t},s),{},{components:n})):i.createElement(k,o({ref:t},s))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[d]="string"==typeof e?e:r,o[1]=a;for(var u=2;u{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var i=n(7462),r=(n(7294),n(3905));const l={title:"3. Components of MLOps",description:"Describe MLOps Components",sidebar_position:3,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2021-12-10T00:00:00.000Z"),contributors:["Youngcheol Jang"]},o=void 0,a={unversionedId:"introduction/component",id:"version-1.0/introduction/component",title:"3. Components of MLOps",description:"Describe MLOps Components",source:"@site/versioned_docs/version-1.0/introduction/component.md",sourceDirName:"introduction",slug:"/introduction/component",permalink:"/docs/1.0/introduction/component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/introduction/component.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Components of MLOps",description:"Describe MLOps Components",sidebar_position:3,date:"2021-12-03T00:00:00.000Z",lastmod:"2021-12-10T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"2. Levels of MLOps",permalink:"/docs/1.0/introduction/levels"},next:{title:"4. Why Kubernetes?",permalink:"/docs/1.0/introduction/why_kubernetes"}},p={},u=[{value:"Practitioners guide to MLOps",id:"practitioners-guide-to-mlops",level:2},{value:"1. Experimentation",id:"1-experimentation",level:3},{value:"2. Data Processing",id:"2-data-processing",level:3},{value:"3. Model training",id:"3-model-training",level:3},{value:"4. Model evaluation",id:"4-model-evaluation",level:3},{value:"5. Model serving",id:"5-model-serving",level:3},{value:"6. Online experimentation",id:"6-online-experimentation",level:3},{value:"7. Model Monitoring",id:"7-model-monitoring",level:3},{value:"8. ML Pipeline",id:"8-ml-pipeline",level:3},{value:"9. Model Registry",id:"9-model-registry",level:3},{value:"10. Dataset and Feature Repository",id:"10-dataset-and-feature-repository",level:3},{value:"11. ML Metadata and Artifact Tracking",id:"11-ml-metadata-and-artifact-tracking",level:3}],s={toc:u},d="wrapper";function c(e){let{components:t,...l}=e;return(0,r.kt)(d,(0,i.Z)({},s,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"practitioners-guide-to-mlops"},"Practitioners guide to MLOps"),(0,r.kt)("p",null," 2021\ub144 5\uc6d4\uc5d0 \ubc1c\ud45c\ub41c \uad6c\uae00\uc758 ",(0,r.kt)("a",{parentName:"p",href:"https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf"},"white paper : Practitioners guide to MLOps: A framework for continuous delivery and automation of machine learning"),"\uc5d0\uc11c\ub294 MLOps\uc758 \ud575\uc2ec \uae30\ub2a5\ub4e4\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc744 \uc5b8\uae09\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlops-component",src:n(8037).Z,width:"2352",height:"1890"})),(0,r.kt)("p",null," \uac01 \uae30\ub2a5\uc774 \uc5b4\ub5a4 \uc5ed\ud560\uc744 \ud558\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"1-experimentation"},"1. Experimentation"),(0,r.kt)("p",null," \uc2e4\ud5d8(Experimentation)\uc740 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \ub370\uc774\ud130\ub97c \ubd84\uc11d\ud558\uace0, \ud504\ub85c\ud1a0\ud0c0\uc785 \ubaa8\ub378\uc744 \ub9cc\ub4e4\uba70 \ud559\uc2b5 \uae30\ub2a5\uc744 \uad6c\ud604\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\uae43(Git)\uacfc \uac19\uc740 \ubc84\uc804 \ucee8\ud2b8\ub864 \ub3c4\uad6c\uc640 \ud1b5\ud569\ub41c \ub178\ud2b8\ubd81(Jupyter Notebook) \ud658\uacbd \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\ud55c \ub370\uc774\ud130, \ud558\uc774\ud37c \ud30c\ub77c\ubbf8\ud130, \ud3c9\uac00 \uc9c0\ud45c\ub97c \ud3ec\ud568\ud55c \uc2e4\ud5d8 \ucd94\uc801 \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ub370\uc774\ud130\uc640 \ubaa8\ub378\uc5d0 \ub300\ud55c \ubd84\uc11d \ubc0f \uc2dc\uac01\ud654 \uae30\ub2a5 \uc81c\uacf5")),(0,r.kt)("h3",{id:"2-data-processing"},"2. Data Processing"),(0,r.kt)("p",null," \ub370\uc774\ud130 \ucc98\ub9ac(Data Processing)\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378 \uac1c\ubc1c \ub2e8\uacc4, \uc9c0\uc18d\uc801\uc778 \ud559\uc2b5(Continuous Training) \ub2e8\uacc4, \uadf8\ub9ac\uace0 API \ubc30\ud3ec(API Deployment) \ub2e8\uacc4\uc5d0\uc11c \ub9ce\uc740 \uc591\uc758 \ub370\uc774\ud130\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574 \uc8fc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ub370\uc774\ud130 \uc18c\uc2a4\uc640 \uc11c\ube44\uc2a4\uc5d0 \ud638\ud658\ub418\ub294 \ub370\uc774\ud130 \ucee4\ub125\ud130(connector) \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc640 \ud638\ud658\ub418\ub294 \ub370\uc774\ud130 \uc778\ucf54\ub354(encoder) & \ub514\ucf54\ub354(decoder) \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ub370\uc774\ud130 \ubcc0\ud658\uacfc \ud53c\ucc98 \uc5d4\uc9c0\ub2c8\uc5b4\ub9c1(feature engineering) \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ud559\uc2b5\uacfc \uc11c\ube59\uc744 \uc704\ud55c \ud655\uc7a5 \uac00\ub2a5\ud55c \ubc30\uce58, \uc2a4\ud2b8\ub9bc \ub370\uc774\ud130 \ucc98\ub9ac \uae30\ub2a5 \uc81c\uacf5")),(0,r.kt)("h3",{id:"3-model-training"},"3. Model training"),(0,r.kt)("p",null," \ubaa8\ub378 \ud559\uc2b5(Model training)\uc740 \ubaa8\ub378 \ud559\uc2b5\uc744 \uc704\ud55c \uc54c\uace0\ub9ac\uc998\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc2e4\ud589\uc2dc\ucf1c\uc8fc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"ML \ud504\ub808\uc784\uc6cc\ud06c\uc758 \uc2e4\ud589\uc744 \uc704\ud55c \ud658\uacbd \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ub2e4\uc218\uc758 GPU / \ubd84\uc0b0 \ud559\uc2b5 \uc0ac\uc6a9\uc744 \uc704\ud55c \ubd84\uc0b0 \ud559\uc2b5 \ud658\uacbd \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ud558\uc774\ud37c \ud30c\ub77c\ubbf8\ud130 \ud29c\ub2dd\uacfc \ucd5c\uc801\ud654 \uae30\ub2a5 \uc81c\uacf5")),(0,r.kt)("h3",{id:"4-model-evaluation"},"4. Model evaluation"),(0,r.kt)("p",null," \ubaa8\ub378 \ud3c9\uac00(Model evaluation)\ub294 \uc2e4\ud5d8 \ud658\uacbd\uacfc \uc0c1\uc6a9 \ud658\uacbd\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \ubaa8\ub378\uc758 \uc131\ub2a5\uc744 \uad00\ucc30\ud560 \uc218 \uc788\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ud3c9\uac00 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ubaa8\ub378 \uc131\ub2a5 \ud3c9\uac00 \uae30\ub2a5"),(0,r.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \uc9c0\uc18d \ud559\uc2b5 \uc2e4\ud589 \uacb0\uacfc\uc5d0 \ub300\ud55c \uc608\uce21 \uc131\ub2a5 \ucd94\uc801"),(0,r.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \ubaa8\ub378\uc758 \uc131\ub2a5 \ube44\uad50\uc640 \uc2dc\uac01\ud654"),(0,r.kt)("li",{parentName:"ul"},"\ud574\uc11d\ud560 \uc218 \uc788\ub294 AI \uae30\uc220\uc744 \uc774\uc6a9\ud55c \ubaa8\ub378 \ucd9c\ub825 \ud574\uc11d \uae30\ub2a5 \uc81c\uacf5")),(0,r.kt)("h3",{id:"5-model-serving"},"5. Model serving"),(0,r.kt)("p",null," \ubaa8\ub378 \uc11c\ube59(Model serving)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uace0 \uc11c\ube59\ud558\uae30 \uc704\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\uc800 \uc9c0\uc5f0 \ucd94\ub860\uacfc \uace0\uac00\uc6a9\uc131 \ucd94\ub860 \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c ML \ubaa8\ub378 \uc11c\ube59 \ud504\ub808\uc784\uc6cc\ud06c \uc9c0\uc6d0(Tensorflow Serving, TorchServe, NVIDIA Triton, Scikit-learn, XGGoost. etc)"),(0,r.kt)("li",{parentName:"ul"},"\ubcf5\uc7a1\ud55c \ud615\ud0dc\uc758 \ucd94\ub860 \ub8e8\ud2f4 \uae30\ub2a5 \uc81c\uacf5, \uc608\ub97c \ub4e4\uc5b4 \uc804\ucc98\ub9ac(preprocess) \ub610\ub294 \ud6c4\ucc98\ub9ac(postprocess) \uae30\ub2a5\uacfc \ucd5c\uc885 \uacb0\uacfc\ub97c \uc704\ud574 \ub2e4\uc218\uc758 \ubaa8\ub378\uc774 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\ub97c \ub9d0\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"\uc21c\uac04\uc801\uc73c\ub85c \uce58\uc19f\ub294 \ucd94\ub860 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc624\ud1a0 \uc2a4\ucf00\uc77c\ub9c1(autoscaling) \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ucd94\ub860 \uc694\uccad\uacfc \ucd94\ub860 \uacb0\uacfc\uc5d0 \ub300\ud55c \ub85c\uae45 \uae30\ub2a5 \uc81c\uacf5")),(0,r.kt)("h3",{id:"6-online-experimentation"},"6. Online experimentation"),(0,r.kt)("p",null," \uc628\ub77c\uc778 \uc2e4\ud5d8(Online experimentation)\uc740 \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc774 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c, \uc774 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uba74 \uc5b4\ub290 \uc815\ub3c4\uc758 \uc131\ub2a5\uc744 \ubcf4\uc77c \uac83\uc778\uc9c0 \uac80\uc99d\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \uc0c8 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\ub294 \uac83\uae4c\uc9c0 \uc5f0\ub3d9\ud558\uae30 \uc704\ud574 \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\uc640 \uc5f0\ub3d9\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\uce74\ub098\ub9ac(canary) & \uc100\ub3c4(shadow) \ubc30\ud3ec \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"A/B \ud14c\uc2a4\ud2b8 \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\uba40\ud2f0 \uc554\ub4dc \ubc34\ub527(Multi-armed bandit) \ud14c\uc2a4\ud2b8 \uae30\ub2a5 \uc81c\uacf5")),(0,r.kt)("h3",{id:"7-model-monitoring"},"7. Model Monitoring"),(0,r.kt)("p",null,"\ubaa8\ub378 \ubaa8\ub2c8\ud130\ub9c1(Model Monitoring)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0 \ubc30\ud3ec\ub41c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\ub294\uc9c0\ub97c \ubaa8\ub2c8\ud130\ub9c1\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \ub5a8\uc5b4\uc838 \uc5c5\ub370\uc774\ud2b8\uac00 \ud544\uc694\ud55c\uc9c0\uc5d0 \ub300\ud55c \uc815\ubcf4 \ub4f1\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"8-ml-pipeline"},"8. ML Pipeline"),(0,r.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ud30c\uc774\ud504\ub77c\uc778(ML Pipeline)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0\uc11c \ubcf5\uc7a1\ud55c ML \ud559\uc2b5\uacfc \ucd94\ub860 \uc791\uc5c5\uc744 \uad6c\uc131\ud558\uace0 \uc81c\uc5b4\ud558\uace0 \uc790\ub3d9\ud654\ud558\uae30 \uc704\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \uc774\ubca4\ud2b8\ub97c \uc18c\uc2a4\ub97c \ud1b5\ud55c \ud30c\uc774\ud504\ub77c\uc778 \uc2e4\ud589 \uae30\ub2a5"),(0,r.kt)("li",{parentName:"ul"},"\ud30c\uc774\ud504\ub77c\uc778 \ud30c\ub77c\ubbf8\ud130\uc640 \uc0dd\uc131\ub418\ub294 \uc0b0\ucd9c\ubb3c \uad00\ub9ac\ub97c \uc704\ud55c \uba38\uc2e0\ub7ec\ub2dd \uba54\ud0c0\ub370\uc774\ud130 \ucd94\uc801\uacfc \uc5f0\ub3d9 \uae30\ub2a5"),(0,r.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc778 \uba38\uc2e0\ub7ec\ub2dd \uc791\uc5c5\uc744 \uc704\ud55c \ub0b4\uc7a5 \ucef4\ud3ec\ub10c\ud2b8 \uc9c0\uc6d0\uacfc \uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \uad6c\ud604\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \uc9c0\uc6d0 \uae30\ub2a5"),(0,r.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \uc2e4\ud589 \ud658\uacbd \uc81c\uacf5 \uae30\ub2a5")),(0,r.kt)("h3",{id:"9-model-registry"},"9. Model Registry"),(0,r.kt)("p",null," \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \uc0dd\uba85 \uc8fc\uae30(Lifecycle)\uc744 \uc911\uc559 \uc800\uc7a5\uc18c\uc5d0\uc11c \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ud574 \uc8fc\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ud559\uc2b5\ub41c \ubaa8\ub378 \uadf8\ub9ac\uace0 \ubc30\ud3ec\ub41c \ubaa8\ub378\uc5d0 \ub300\ud55c \ub4f1\ub85d, \ucd94\uc801, \ubc84\uc800\ub2dd \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ubc30\ud3ec\ub97c \uc704\ud574 \ud544\uc694\ud55c \ub370\uc774\ud130\uc640 \ub7f0\ud0c0\uc784 \ud328\ud0a4\uc9c0\ub4e4\uc5d0 \ub300\ud55c \uc815\ubcf4 \uc800\uc7a5 \uae30\ub2a5")),(0,r.kt)("h3",{id:"10-dataset-and-feature-repository"},"10. Dataset and Feature Repository"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ub370\uc774\ud130\uc5d0 \ub300\ud55c \uacf5\uc720, \uac80\uc0c9, \uc7ac\uc0ac\uc6a9 \uadf8\ub9ac\uace0 \ubc84\uc804 \uad00\ub9ac \uae30\ub2a5"),(0,r.kt)("li",{parentName:"ul"},"\uc774\ubca4\ud2b8 \uc2a4\ud2b8\ub9ac\ubc0d \ubc0f \uc628\ub77c\uc778 \ucd94\ub860 \uc791\uc5c5\uc5d0 \ub300\ud55c \uc2e4\uc2dc\uac04 \ucc98\ub9ac \ubc0f \uc800 \uc9c0\uc5f0 \uc11c\ube59 \uae30\ub2a5"),(0,r.kt)("li",{parentName:"ul"},"\uc0ac\uc9c4, \ud14d\uc2a4\ud2b8, \ud14c\uc774\ube14 \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130 \uc9c0\uc6d0 \uae30\ub2a5")),(0,r.kt)("h3",{id:"11-ml-metadata-and-artifact-tracking"},"11. ML Metadata and Artifact Tracking"),(0,r.kt)("p",null," MLOps\uc758 \uac01 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \uc0b0\ucd9c\ubb3c\ub4e4\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4. ML \uba54\ud0c0\ub370\uc774\ud130\ub294 \uc774\ub7f0 \uc0b0\ucd9c\ubb3c\ub4e4\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.\nML \uba54\ud0c0\ub370\uc774\ud130\uc640 \uc0b0\ucd9c\ubb3c \uad00\ub9ac\ub294 \uc0b0\ucd9c\ubb3c\uc758 \uc704\uce58, \ud0c0\uc785, \uc18d\uc131, \uadf8\ub9ac\uace0 \uad00\ub828\ub41c \uc2e4\ud5d8(experiment)\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uad00\ub9ac\ud558\uae30 \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"ML \uc0b0\ucd9c\ubb3c\uc5d0 \ub300\ud55c \ud788\uc2a4\ud1a0\ub9ac \uad00\ub9ac \uae30\ub2a5"),(0,r.kt)("li",{parentName:"ul"},"\uc2e4\ud5d8\uacfc \ud30c\uc774\ud504\ub77c\uc778 \ud30c\ub77c\ubbf8\ud130 \uc124\uc815\uc5d0 \ub300\ud55c \ucd94\uc801, \uacf5\uc720 \uae30\ub2a5"),(0,r.kt)("li",{parentName:"ul"},"ML \uc0b0\ucd9c\ubb3c\uc5d0 \ub300\ud55c \uc800\uc7a5, \uc811\uadfc, \uc2dc\uac01\ud654, \ub2e4\uc6b4\ub85c\ub4dc \uae30\ub2a5 \uc81c\uacf5"),(0,r.kt)("li",{parentName:"ul"},"\ub2e4\ub978 MLOps \uae30\ub2a5\uacfc\uc758 \ud1b5\ud569 \uae30\ub2a5 \uc81c\uacf5")))}c.isMDXComponent=!0},8037:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mlops-component-540cce1f22f97807b54c5e0dd1fec01e.png"}}]); \ No newline at end of file diff --git a/assets/js/5523074d.12b2dbd4.js b/assets/js/5523074d.12b2dbd4.js new file mode 100644 index 00000000..6c7b7f64 --- /dev/null +++ b/assets/js/5523074d.12b2dbd4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4297],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),l=c(n),d=o,k=l["".concat(s,".").concat(d)]||l[d]||m[d]||a;return n?r.createElement(k,p(p({ref:t},u),{},{components:n})):r.createElement(k,p({ref:t},u))}));function k(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,p=new Array(a);p[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[l]="string"==typeof e?e:o,p[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var r=n(7462),o=(n(7294),n(3905));const a={title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",sidebar_position:4,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2021-12-10T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},p=void 0,i={unversionedId:"introduction/why_kubernetes",id:"version-1.0/introduction/why_kubernetes",title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",source:"@site/versioned_docs/version-1.0/introduction/why_kubernetes.md",sourceDirName:"introduction",slug:"/introduction/why_kubernetes",permalink:"/docs/1.0/introduction/why_kubernetes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/introduction/why_kubernetes.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",sidebar_position:4,date:"2021-12-03T00:00:00.000Z",lastmod:"2021-12-10T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Components of MLOps",permalink:"/docs/1.0/introduction/component"},next:{title:"1. Introduction",permalink:"/docs/1.0/setup-kubernetes/intro"}},s={},c=[{value:"MLOps & Kubernetes",id:"mlops--kubernetes",level:2},{value:"Container",id:"container",level:2},{value:"Container Orchestration System",id:"container-orchestration-system",level:2}],u={toc:c},l="wrapper";function m(e){let{components:t,...a}=e;return(0,o.kt)(l,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"mlops--kubernetes"},"MLOps & Kubernetes"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 MLOps\ub97c \uc774\uc57c\uae30\ud560 \ub54c, \ucfe0\ubc84\ub124\ud2f0\uc2a4(Kubernetes)\ub77c\ub294 \ub2e8\uc5b4\uac00 \ud56d\uc0c1 \ud568\uaed8 \ub4e4\ub9ac\ub294 \uc774\uc720\uac00 \ubb34\uc5c7\uc77c\uae4c\uc694?"),(0,o.kt)("p",null,"\uc131\uacf5\uc801\uc778 MLOps \uc2dc\uc2a4\ud15c\uc744 \uad6c\ucd95\ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/introduction/component"},"MLOps\uc758 \uad6c\uc131\uc694\uc18c")," \uc5d0\uc11c \uc124\uba85\ud55c \uac83\ucc98\ub7fc \ub2e4\uc591\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc774 \ud544\uc694\ud558\uc9c0\ub9cc, \uac01\uac01\uc758 \uad6c\uc131 \uc694\uc18c\ub4e4\uc774 \uc720\uae30\uc801\uc73c\ub85c \uc6b4\uc601\ub418\uae30 \uc704\ud574\uc11c\ub294 \uc778\ud504\ub77c \ub808\ubca8\uc5d0\uc11c \uc218\ub9ce\uc740 \uc774\uc288\ub97c \ud574\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uac04\ub2e8\ud558\uac8c\ub294 \uc218\ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \ud559\uc2b5 \uc694\uccad\uc744 \ucc28\ub840\ub300\ub85c \uc2e4\ud589\ud558\ub294 \uac83, \ub2e4\ub978 \uc791\uc5c5 \uacf5\uac04\uc5d0\uc11c\ub3c4 \uac19\uc740 \uc2e4\ud589 \ud658\uacbd\uc744 \ubcf4\uc7a5\ud574\uc57c \ud558\ub294 \uac83, \ubc30\ud3ec\ub41c \uc11c\ube44\uc2a4\uc5d0 \uc7a5\uc560\uac00 \uc0dd\uacbc\uc744 \ub54c \ube60\ub974\uac8c \ub300\uc751\ud574\uc57c \ud558\ub294 \uac83 \ub4f1\uc758 \uc774\uc288 \ub4f1\uc744 \uc0dd\uac01\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc5ec\uae30\uc11c \ucee8\ud14c\uc774\ub108(Container)\uc640 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c(Container Orchestration System)\uc758 \ud544\uc694\uc131\uc774 \ub4f1\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc640 \uac19\uc740 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc744 \ub3c4\uc785\ud558\uba74 \uc2e4\ud589 \ud658\uacbd\uc758 \uaca9\ub9ac\uc640 \uad00\ub9ac\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc744 \ub3c4\uc785\ud55c\ub2e4\uba74, \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\uace0 \ubc30\ud3ec\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ub2e4\uc218\uc758 \uac1c\ubc1c\uc790\uac00 \uc18c\uc218\uc758 \ud074\ub7ec\uc2a4\ud130\ub97c \uacf5\uc720\ud558\uba74\uc11c ",(0,o.kt)("em",{parentName:"p"},"'1\ubc88 \ud074\ub7ec\uc2a4\ud130 \uc0ac\uc6a9 \uc911\uc774\uc2e0\uac00\uc694?', 'GPU \uc0ac\uc6a9 \uc911\uc774\ub358 \uc81c \ud504\ub85c\uc138\uc2a4 \ub204\uac00 \uc8fd\uc600\ub098\uc694?', '\ub204\uac00 \ud074\ub7ec\uc2a4\ud130\uc5d0 x \ud328\ud0a4\uc9c0 \uc5c5\ub370\uc774\ud2b8\ud588\ub098\uc694?'")," \uc640 \uac19\uc740 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"container"},"Container"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 \ucee8\ud14c\uc774\ub108\ub780 \ubb34\uc5c7\uc77c\uae4c\uc694? \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8\uc5d0\uc11c\ub294 \ucee8\ud14c\uc774\ub108\ub97c ",(0,o.kt)("a",{parentName:"p",href:"https://azure.microsoft.com/ko-kr/overview/what-is-a-container/"},"\ub2e4\uc74c"),"\uacfc \uac19\uc774 \uc815\uc758\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\ucee8\ud14c\uc774\ub108\ub780 : \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud45c\uc900\ud654\ub41c \uc774\uc2dd \uac00\ub2a5\ud55c \ud328\ud0a4\uc9d5")),(0,o.kt)("p",null,"\uadf8\ub7f0\ub370 \uc65c \uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c \ucee8\ud14c\uc774\ub108\uac00 \ud544\uc694\ud560\uae4c\uc694? \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\ub4e4\uc740 \uc6b4\uc601\uccb4\uc81c\ub098 Python \uc2e4\ud589 \ud658\uacbd, \ud328\ud0a4\uc9c0 \ubc84\uc804 \ub4f1\uc5d0 \ub530\ub77c \ub2e4\ub974\uac8c \ub3d9\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574\uc11c \uba38\uc2e0\ub7ec\ub2dd\uc5d0 \uc0ac\uc6a9\ub41c \uc18c\uc2a4 \ucf54\ub4dc\uc640 \ud568\uaed8 \uc885\uc18d\uc801\uc778 \uc2e4\ud589 \ud658\uacbd \uc804\uccb4\ub97c ",(0,o.kt)("strong",{parentName:"p"},"\ud558\ub098\ub85c \ubb36\uc5b4\uc11c(\ud328\ud0a4\uc9d5\ud574\uc11c)")," \uacf5\uc720\ud558\uace0 \uc2e4\ud589\ud558\ub294 \ub370 \ud65c\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\uc220\uc774 \ucee8\ud14c\uc774\ub108\ub77c\uc774\uc81c\uc774\uc158(Containerization) \uae30\uc220\uc785\ub2c8\ub2e4.\n\uc774\ub807\uac8c \ud328\ud0a4\uc9d5\ub41c \ud615\ud0dc\ub97c \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub77c\uace0 \ubd80\ub974\uba70, \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uacf5\uc720\ud568\uc73c\ub85c\uc368 \uc0ac\uc6a9\uc790\ub4e4\uc740 \uc5b4\ub5a4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub4e0 \uac19\uc740 \uc2e4\ud589 \uacb0\uacfc\ub97c \ubcf4\uc7a5\ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc989, \ub2e8\uc21c\ud788 Jupyter Notebook \ud30c\uc77c\uc774\ub098, \ubaa8\ub378\uc758 \uc18c\uc2a4 \ucf54\ub4dc\uc640 requirements.txt \ud30c\uc77c\uc744 \uacf5\uc720\ud558\ub294 \uac83\uc774 \uc544\ub2cc, \ubaa8\ub4e0 \uc2e4\ud589 \ud658\uacbd\uc774 \ub2f4\uae34 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uacf5\uc720\ud55c\ub2e4\uba74 ",(0,o.kt)("em",{parentName:"p"},'"\uc81c \ub178\ud2b8\ubd81\uc5d0\uc11c\ub294 \uc798 \ub418\ub294\ub370\uc694?"')," \uc640 \uac19\uc740 \uc0c1\ud669\uc744 \ud53c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,'\ucee8\ud14c\uc774\ub108\ub97c \ucc98\uc74c \uc811\ud558\uc2dc\ub294 \ubd84\ub4e4\uc774 \ud754\ud788 \ud558\uc2dc\ub294 \uc624\ud574 \uc911 \ud558\ub098\ub294 "',(0,o.kt)("strong",{parentName:"p"},"\ucee8\ud14c\uc774\ub108 == \ub3c4\ucee4"),'"\ub77c\uace0 \ubc1b\uc544\ub4e4\uc774\ub294 \uac83\uc785\ub2c8\ub2e4.',(0,o.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4\ub294 \ucee8\ud14c\uc774\ub108\uc640 \uac19\uc740 \uc758\ubbf8\ub97c \uc9c0\ub2c8\ub294 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c, \ucee8\ud14c\uc774\ub108\ub97c \ub744\uc6b0\uac70\ub098, \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4\uace0 \uacf5\uc720\ud558\ub294 \uac83\uacfc \uac19\uc774 \ucee8\ud14c\uc774\ub108\ub97c \ub354\uc6b1\ub354 \uc27d\uace0 \uc720\uc5f0\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc815\ub9ac\ud558\uc790\uba74 \ucee8\ud14c\uc774\ub108\ub294 \uac00\uc0c1\ud654 \uae30\uc220\uc774\uace0, \ub3c4\ucee4\ub294 \uac00\uc0c1\ud654 \uae30\uc220\uc758 \uad6c\ud604\uccb4\ub77c\uace0 \ub9d0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub2e4\ub9cc, \ub3c4\ucee4\ub294 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654 \ub3c4\uad6c \uc911\uc5d0\uc11c \uc26c\uc6b4 \uc0ac\uc6a9\uc131\uacfc \ub192\uc740 \ud6a8\uc728\uc131\uc744 \ubc14\ud0d5\uc73c\ub85c \uac00\uc7a5 \ube60\ub974\uac8c \uc131\uc7a5\ud558\uc5ec \ub300\uc138\uac00 \ub418\uc5c8\uae30\uc5d0 \ucee8\ud14c\uc774\ub108\ud558\uba74 \ub3c4\ucee4\ub77c\ub294 \uc774\ubbf8\uc9c0\uac00 \uc790\ub3d9\uc73c\ub85c \ub5a0\uc624\ub974\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ucee8\ud14c\uc774\ub108\uc640 \ub3c4\ucee4 \uc0dd\ud0dc\uacc4\uac00 \ub300\uc138\uac00 \ub418\uae30\uae4c\uc9c0\ub294 \ub2e4\uc591\ud55c \uc774\uc720\uac00 \uc788\uc9c0\ub9cc, \uae30\uc220\uc801\uc73c\ub85c \uc790\uc138\ud55c \uc774\uc57c\uae30\ub294 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc758 \ubc94\uc704\ub97c \ub118\uc5b4\uc11c\uae30 \ub54c\ubb38\uc5d0 \ub2e4\ub8e8\uc9c0\ub294 \uc54a\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \ud639\uc740 \ub3c4\ucee4\ub97c \ucc98\uc74c \ub4e4\uc5b4\ubcf4\uc2dc\ub294 \ubd84\ub4e4\uc5d0\uac8c\ub294 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc758 \ub0b4\uc6a9\uc774 \ub2e4\uc18c \uc5b4\ub835\uac8c \ub290\uaef4\uc9c8 \uc218 \uc788\uc73c\ubbc0\ub85c, ",(0,o.kt)("a",{parentName:"p",href:"https://opentutorials.org/course/4781"},"\uc0dd\ud65c\ucf54\ub529"),", ",(0,o.kt)("a",{parentName:"p",href:"https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html"},"subicura \ub2d8\uc758 \uac1c\uc778 \ube14\ub85c\uadf8 \uae00")," \ub4f1\uc758 \uc790\ub8cc\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"container-orchestration-system"},"Container Orchestration System"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694? ",(0,o.kt)("strong",{parentName:"p"},"\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158"),"\uc774\ub77c\ub294 \ub2e8\uc5b4\uc5d0\uc11c \ucd94\uce21\ud574 \ubcfc \uc218 \uc788\ub4ef\uc774, \uc218\ub9ce\uc740 \ucee8\ud14c\uc774\ub108\uac00 \uc788\uc744 \ub54c \ucee8\ud14c\uc774\ub108\ub4e4\uc774 \uc11c\ub85c \uc870\ud654\ub86d\uac8c \uad6c\ub3d9\ub420 \uc218 \uc788\ub3c4\ub85d \uc9c0\ud718\ud558\ub294 \uc2dc\uc2a4\ud15c\uc5d0 \ube44\uc720\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \uae30\ubc18\uc758 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc11c\ube44\uc2a4\ub294 \ucee8\ud14c\uc774\ub108\uc758 \ud615\ud0dc\ub85c \uc0ac\uc6a9\uc790\ub4e4\uc5d0\uac8c \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc774\ub54c \uad00\ub9ac\ud574\uc57c \ud560 \ucee8\ud14c\uc774\ub108\uc758 \uc218\uac00 \uc801\ub2e4\uba74 \uc6b4\uc601 \ub2f4\ub2f9\uc790 \ud55c \uba85\uc774\uc11c\ub3c4 \ucda9\ubd84\ud788 \ubaa8\ub4e0 \uc0c1\ud669\uc5d0 \ub300\uc751\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc, \uc218\ubc31 \uac1c \uc774\uc0c1\uc758 \ucee8\ud14c\uc774\ub108\uac00 \uc218 \uc2ed \ub300 \uc774\uc0c1\uc758 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uad6c\ub3d9\ub418\uace0 \uc788\uace0 \uc7a5\uc560\ub97c \uc77c\uc73c\ud0a4\uc9c0 \uc54a\uace0 \ud56d\uc0c1 \uc815\uc0c1 \ub3d9\uc791\ud574\uc57c \ud55c\ub2e4\uba74, \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uc758 \uc815\uc0c1 \ub3d9\uc791 \uc5ec\ubd80\ub97c \ub2f4\ub2f9\uc790 \ud55c \uba85\uc774 \ud30c\uc545\ud558\uace0 \uc774\uc288\uc5d0 \ub300\uc751\ud558\ub294 \uac83\uc740 \ubd88\uac00\ub2a5\uc5d0 \uac00\uae5d\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc608\ub97c \ub4e4\uba74, \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\ub294\uc9c0\ub97c \uacc4\uc18d\ud574\uc11c \ubaa8\ub2c8\ud130\ub9c1(Monitoring)\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \ud2b9\uc815 \uc11c\ube44\uc2a4\uac00 \uc7a5\uc560\ub97c \uc77c\uc73c\ucf30\ub2e4\uba74 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108\uc758 \ub85c\uadf8\ub97c \ud655\uc778\ud574\uac00\uba70 \ubb38\uc81c\ub97c \ud30c\uc545\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub610\ud55c, \ud2b9\uc815 \ud074\ub7ec\uc2a4\ud130\ub098 \ud2b9\uc815 \ucee8\ud14c\uc774\ub108\uc5d0 \uc791\uc5c5\uc774 \ubab0\ub9ac\uc9c0 \uc54a\ub3c4\ub85d \uc2a4\ucf00\uc904\ub9c1(Scheduling)\ud558\uace0 \ub85c\ub4dc \ubc38\ub7f0\uc2f1(Load Balancing)\ud558\uba70, \uc2a4\ucf00\uc77c\ub9c1(Scaling)\ud558\ub294 \ub4f1\uc758 \uc218\ub9ce\uc740 \uc791\uc5c5\uc744 \ub2f4\ub2f9\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uc774\ub807\uac8c \uc218\ub9ce\uc740 \ucee8\ud14c\uc774\ub108\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\ud574\uc11c \uad00\ub9ac\ud558\uace0 \uc6b4\uc601\ud558\ub294 \uacfc\uc815\uc744 \uc870\uae08\uc774\ub098\ub9c8 \uc27d\uac8c, \uc790\ub3d9\uc73c\ub85c \ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uac00 \ubc14\ub85c \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc785\ub2c8\ub2e4. "),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c\ub294 \uc5b4\ub5bb\uac8c \uc4f0\uc77c \uc218 \uc788\uc744\uae4c\uc694?",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c GPU\uac00 \uc788\uc5b4\uc57c \ud558\ub294 \ub525\ub7ec\ub2dd \ud559\uc2b5 \ucf54\ub4dc\uac00 \ud328\ud0a4\uc9d5\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uc0ac\uc6a9 \uac00\ub2a5\ud55c GPU\uac00 \uc788\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc218\ud589\ud558\uace0, \ub9ce\uc740 \uba54\ubaa8\ub9ac\ub97c \ud544\uc694\ub85c \ud558\ub294 \ub370\uc774\ud130 \uc804\ucc98\ub9ac \ucf54\ub4dc\uac00 \ud328\ud0a4\uc9d5\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uba54\ubaa8\ub9ac\uc758 \uc5ec\uc720\uac00 \ub9ce\uc740 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc218\ud589\ud558\uace0, \ud559\uc2b5 \uc911\uc5d0 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubb38\uc81c\uac00 \uc0dd\uae30\uba74 \uc790\ub3d9\uc73c\ub85c \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \ub2e4\ub978 \ud074\ub7ec\uc2a4\ud130\ub85c \uc774\ub3d9\uc2dc\ud0a4\uace0 \ub2e4\uc2dc \ud559\uc2b5\uc744 \uc9c4\ud589\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \uc0ac\ub78c\uc774 \uc77c\uc77c\uc774 \uc218\ud589\ud558\uc9c0 \uc54a\uace0, \uc790\ub3d9\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \uc2dc\uc2a4\ud15c\uc744 \uac1c\ubc1c\ud55c \ub4a4 \ub9e1\uae30\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc9d1\ud544\uc744 \ud558\ub294 2022\ub144\uc744 \uae30\uc900\uc73c\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc758 \uc0ac\uc2e4\uc0c1\uc758 \ud45c\uc900(De facto standard)\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"CNCF\uc5d0\uc11c 2018\ub144 \ubc1c\ud45c\ud55c ",(0,o.kt)("a",{parentName:"p",href:"https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/"},"Survey")," \uc5d0 \ub530\ub974\uba74 \ub2e4\uc74c \uadf8\ub9bc\uacfc \uac19\uc774 \uc774\ubbf8 \ub450\uac01\uc744 \ub098\ud0c0\ub0b4\uace0 \uc788\uc5c8\uc73c\uba70, 2019\ub144 \ubc1c\ud45c\ud55c ",(0,o.kt)("a",{parentName:"p",href:"https://www.cncf.io/wp-content/uploads/2020/08/CNCF_Survey_Report.pdf"},"Survey"),"\uc5d0 \ub530\ub974\uba74 \uadf8\uc911 78%\uac00 \uc0c1\uc6a9 \uc218\uc900(Production Level)\uc5d0\uc11c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"k8s-graph",src:n(2745).Z,width:"2048",height:"1317"})),(0,o.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0dd\ud0dc\uacc4\uac00 \uc774\ucc98\ub7fc \ucee4\uc9c0\uac8c \ub41c \uc774\uc720\uc5d0\ub294 \uc5ec\ub7ec \uac00\uc9c0 \uc774\uc720\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub3c4\ucee4\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc5ed\uc2dc \uba38\uc2e0\ub7ec\ub2dd \uae30\ubc18\uc758 \uc11c\ube44\uc2a4\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud558\ub294 \uae30\uc220\uc774 \uc544\ub2c8\uae30\uc5d0, \uc790\uc138\ud788 \ub2e4\ub8e8\uae30\uc5d0\ub294 \uc0c1\ub2f9\ud788 \ub9ce\uc740 \uc591\uc758 \uae30\uc220\uc801\uc778 \ub0b4\uc6a9\uc744 \ub2e4\ub8e8\uc5b4\uc57c \ud558\ubbc0\ub85c \uc774\ubc88 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc0dd\ub7b5\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub2e4\ub9cc, ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc55e\uc73c\ub85c \ub2e4\ub8f0 \ub0b4\uc6a9\uc740 \ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc744 \uc5b4\ub290 \uc815\ub3c4 \uc54c\uace0 \uacc4\uc2e0 \ubd84\ub4e4\uc744 \ub300\uc0c1\uc73c\ub85c \uc791\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0 \ub300\ud574 \uc775\uc219\ud558\uc9c0 \uc54a\uc73c\uc2e0 \ubd84\ub4e4\uc740 \ub2e4\uc74c ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uacf5\uc2dd \ubb38\uc11c"),", ",(0,o.kt)("a",{parentName:"p",href:"https://subicura.com/k8s/"},"subicura \ub2d8\uc758 \uac1c\uc778 \ube14\ub85c\uadf8 \uae00")," \ub4f1\uc758 \uc27d\uace0 \uc790\uc138\ud55c \uc790\ub8cc\ub4e4\uc744 \uba3c\uc800 \ucc38\uace0\ud574\uc8fc\uc2dc\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."))}m.isMDXComponent=!0},2745:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/k8s-graph-4320bbc5bf9fc0dccdeb1edc0157e8ec.png"}}]); \ No newline at end of file diff --git a/assets/js/5523074d.f224ebe1.js b/assets/js/5523074d.f224ebe1.js deleted file mode 100644 index 74406f2a..00000000 --- a/assets/js/5523074d.f224ebe1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4297],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),l=c(n),d=o,k=l["".concat(s,".").concat(d)]||l[d]||m[d]||a;return n?r.createElement(k,i(i({ref:t},u),{},{components:n})):r.createElement(k,i({ref:t},u))}));function k(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[l]="string"==typeof e?e:o,i[1]=p;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var r=n(7462),o=(n(7294),n(3905));const a={title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",sidebar_position:4,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2021-12-10T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},i=void 0,p={unversionedId:"introduction/why_kubernetes",id:"version-1.0/introduction/why_kubernetes",title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",source:"@site/versioned_docs/version-1.0/introduction/why_kubernetes.md",sourceDirName:"introduction",slug:"/introduction/why_kubernetes",permalink:"/docs/1.0/introduction/why_kubernetes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/introduction/why_kubernetes.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",sidebar_position:4,date:"2021-12-03T00:00:00.000Z",lastmod:"2021-12-10T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Components of MLOps",permalink:"/docs/1.0/introduction/component"},next:{title:"1. Introduction",permalink:"/docs/1.0/setup-kubernetes/intro"}},s={},c=[{value:"MLOps & Kubernetes",id:"mlops--kubernetes",level:2},{value:"Container",id:"container",level:2},{value:"Container Orchestration System",id:"container-orchestration-system",level:2}],u={toc:c},l="wrapper";function m(e){let{components:t,...a}=e;return(0,o.kt)(l,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"mlops--kubernetes"},"MLOps & Kubernetes"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 MLOps\ub97c \uc774\uc57c\uae30\ud560 \ub54c, \ucfe0\ubc84\ub124\ud2f0\uc2a4(Kubernetes)\ub77c\ub294 \ub2e8\uc5b4\uac00 \ud56d\uc0c1 \ud568\uaed8 \ub4e4\ub9ac\ub294 \uc774\uc720\uac00 \ubb34\uc5c7\uc77c\uae4c\uc694?"),(0,o.kt)("p",null,"\uc131\uacf5\uc801\uc778 MLOps \uc2dc\uc2a4\ud15c\uc744 \uad6c\ucd95\ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/introduction/component"},"MLOps\uc758 \uad6c\uc131\uc694\uc18c")," \uc5d0\uc11c \uc124\uba85\ud55c \uac83\ucc98\ub7fc \ub2e4\uc591\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc774 \ud544\uc694\ud558\uc9c0\ub9cc, \uac01\uac01\uc758 \uad6c\uc131 \uc694\uc18c\ub4e4\uc774 \uc720\uae30\uc801\uc73c\ub85c \uc6b4\uc601\ub418\uae30 \uc704\ud574\uc11c\ub294 \uc778\ud504\ub77c \ub808\ubca8\uc5d0\uc11c \uc218\ub9ce\uc740 \uc774\uc288\ub97c \ud574\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uac04\ub2e8\ud558\uac8c\ub294 \uc218\ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \ud559\uc2b5 \uc694\uccad\uc744 \ucc28\ub840\ub300\ub85c \uc2e4\ud589\ud558\ub294 \uac83, \ub2e4\ub978 \uc791\uc5c5 \uacf5\uac04\uc5d0\uc11c\ub3c4 \uac19\uc740 \uc2e4\ud589 \ud658\uacbd\uc744 \ubcf4\uc7a5\ud574\uc57c \ud558\ub294 \uac83, \ubc30\ud3ec\ub41c \uc11c\ube44\uc2a4\uc5d0 \uc7a5\uc560\uac00 \uc0dd\uacbc\uc744 \ub54c \ube60\ub974\uac8c \ub300\uc751\ud574\uc57c \ud558\ub294 \uac83 \ub4f1\uc758 \uc774\uc288 \ub4f1\uc744 \uc0dd\uac01\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc5ec\uae30\uc11c \ucee8\ud14c\uc774\ub108(Container)\uc640 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c(Container Orchestration System)\uc758 \ud544\uc694\uc131\uc774 \ub4f1\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc640 \uac19\uc740 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc744 \ub3c4\uc785\ud558\uba74 \uc2e4\ud589 \ud658\uacbd\uc758 \uaca9\ub9ac\uc640 \uad00\ub9ac\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc744 \ub3c4\uc785\ud55c\ub2e4\uba74, \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\uace0 \ubc30\ud3ec\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ub2e4\uc218\uc758 \uac1c\ubc1c\uc790\uac00 \uc18c\uc218\uc758 \ud074\ub7ec\uc2a4\ud130\ub97c \uacf5\uc720\ud558\uba74\uc11c ",(0,o.kt)("em",{parentName:"p"},"'1\ubc88 \ud074\ub7ec\uc2a4\ud130 \uc0ac\uc6a9 \uc911\uc774\uc2e0\uac00\uc694?', 'GPU \uc0ac\uc6a9 \uc911\uc774\ub358 \uc81c \ud504\ub85c\uc138\uc2a4 \ub204\uac00 \uc8fd\uc600\ub098\uc694?', '\ub204\uac00 \ud074\ub7ec\uc2a4\ud130\uc5d0 x \ud328\ud0a4\uc9c0 \uc5c5\ub370\uc774\ud2b8\ud588\ub098\uc694?'")," \uc640 \uac19\uc740 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"container"},"Container"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 \ucee8\ud14c\uc774\ub108\ub780 \ubb34\uc5c7\uc77c\uae4c\uc694? \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8\uc5d0\uc11c\ub294 \ucee8\ud14c\uc774\ub108\ub97c ",(0,o.kt)("a",{parentName:"p",href:"https://azure.microsoft.com/ko-kr/overview/what-is-a-container/"},"\ub2e4\uc74c"),"\uacfc \uac19\uc774 \uc815\uc758\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\ucee8\ud14c\uc774\ub108\ub780 : \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud45c\uc900\ud654\ub41c \uc774\uc2dd \uac00\ub2a5\ud55c \ud328\ud0a4\uc9d5")),(0,o.kt)("p",null,"\uadf8\ub7f0\ub370 \uc65c \uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c \ucee8\ud14c\uc774\ub108\uac00 \ud544\uc694\ud560\uae4c\uc694? \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\ub4e4\uc740 \uc6b4\uc601\uccb4\uc81c\ub098 Python \uc2e4\ud589 \ud658\uacbd, \ud328\ud0a4\uc9c0 \ubc84\uc804 \ub4f1\uc5d0 \ub530\ub77c \ub2e4\ub974\uac8c \ub3d9\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574\uc11c \uba38\uc2e0\ub7ec\ub2dd\uc5d0 \uc0ac\uc6a9\ub41c \uc18c\uc2a4 \ucf54\ub4dc\uc640 \ud568\uaed8 \uc885\uc18d\uc801\uc778 \uc2e4\ud589 \ud658\uacbd \uc804\uccb4\ub97c ",(0,o.kt)("strong",{parentName:"p"},"\ud558\ub098\ub85c \ubb36\uc5b4\uc11c(\ud328\ud0a4\uc9d5\ud574\uc11c)")," \uacf5\uc720\ud558\uace0 \uc2e4\ud589\ud558\ub294 \ub370 \ud65c\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\uc220\uc774 \ucee8\ud14c\uc774\ub108\ub77c\uc774\uc81c\uc774\uc158(Containerization) \uae30\uc220\uc785\ub2c8\ub2e4.\n\uc774\ub807\uac8c \ud328\ud0a4\uc9d5\ub41c \ud615\ud0dc\ub97c \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub77c\uace0 \ubd80\ub974\uba70, \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uacf5\uc720\ud568\uc73c\ub85c\uc368 \uc0ac\uc6a9\uc790\ub4e4\uc740 \uc5b4\ub5a4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub4e0 \uac19\uc740 \uc2e4\ud589 \uacb0\uacfc\ub97c \ubcf4\uc7a5\ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc989, \ub2e8\uc21c\ud788 Jupyter Notebook \ud30c\uc77c\uc774\ub098, \ubaa8\ub378\uc758 \uc18c\uc2a4 \ucf54\ub4dc\uc640 requirements.txt \ud30c\uc77c\uc744 \uacf5\uc720\ud558\ub294 \uac83\uc774 \uc544\ub2cc, \ubaa8\ub4e0 \uc2e4\ud589 \ud658\uacbd\uc774 \ub2f4\uae34 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uacf5\uc720\ud55c\ub2e4\uba74 ",(0,o.kt)("em",{parentName:"p"},'"\uc81c \ub178\ud2b8\ubd81\uc5d0\uc11c\ub294 \uc798 \ub418\ub294\ub370\uc694?"')," \uc640 \uac19\uc740 \uc0c1\ud669\uc744 \ud53c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,'\ucee8\ud14c\uc774\ub108\ub97c \ucc98\uc74c \uc811\ud558\uc2dc\ub294 \ubd84\ub4e4\uc774 \ud754\ud788 \ud558\uc2dc\ub294 \uc624\ud574 \uc911 \ud558\ub098\ub294 "',(0,o.kt)("strong",{parentName:"p"},"\ucee8\ud14c\uc774\ub108 == \ub3c4\ucee4"),'"\ub77c\uace0 \ubc1b\uc544\ub4e4\uc774\ub294 \uac83\uc785\ub2c8\ub2e4.',(0,o.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4\ub294 \ucee8\ud14c\uc774\ub108\uc640 \uac19\uc740 \uc758\ubbf8\ub97c \uc9c0\ub2c8\ub294 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c, \ucee8\ud14c\uc774\ub108\ub97c \ub744\uc6b0\uac70\ub098, \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4\uace0 \uacf5\uc720\ud558\ub294 \uac83\uacfc \uac19\uc774 \ucee8\ud14c\uc774\ub108\ub97c \ub354\uc6b1\ub354 \uc27d\uace0 \uc720\uc5f0\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc815\ub9ac\ud558\uc790\uba74 \ucee8\ud14c\uc774\ub108\ub294 \uac00\uc0c1\ud654 \uae30\uc220\uc774\uace0, \ub3c4\ucee4\ub294 \uac00\uc0c1\ud654 \uae30\uc220\uc758 \uad6c\ud604\uccb4\ub77c\uace0 \ub9d0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub2e4\ub9cc, \ub3c4\ucee4\ub294 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654 \ub3c4\uad6c \uc911\uc5d0\uc11c \uc26c\uc6b4 \uc0ac\uc6a9\uc131\uacfc \ub192\uc740 \ud6a8\uc728\uc131\uc744 \ubc14\ud0d5\uc73c\ub85c \uac00\uc7a5 \ube60\ub974\uac8c \uc131\uc7a5\ud558\uc5ec \ub300\uc138\uac00 \ub418\uc5c8\uae30\uc5d0 \ucee8\ud14c\uc774\ub108\ud558\uba74 \ub3c4\ucee4\ub77c\ub294 \uc774\ubbf8\uc9c0\uac00 \uc790\ub3d9\uc73c\ub85c \ub5a0\uc624\ub974\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ucee8\ud14c\uc774\ub108\uc640 \ub3c4\ucee4 \uc0dd\ud0dc\uacc4\uac00 \ub300\uc138\uac00 \ub418\uae30\uae4c\uc9c0\ub294 \ub2e4\uc591\ud55c \uc774\uc720\uac00 \uc788\uc9c0\ub9cc, \uae30\uc220\uc801\uc73c\ub85c \uc790\uc138\ud55c \uc774\uc57c\uae30\ub294 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc758 \ubc94\uc704\ub97c \ub118\uc5b4\uc11c\uae30 \ub54c\ubb38\uc5d0 \ub2e4\ub8e8\uc9c0\ub294 \uc54a\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \ud639\uc740 \ub3c4\ucee4\ub97c \ucc98\uc74c \ub4e4\uc5b4\ubcf4\uc2dc\ub294 \ubd84\ub4e4\uc5d0\uac8c\ub294 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc758 \ub0b4\uc6a9\uc774 \ub2e4\uc18c \uc5b4\ub835\uac8c \ub290\uaef4\uc9c8 \uc218 \uc788\uc73c\ubbc0\ub85c, ",(0,o.kt)("a",{parentName:"p",href:"https://opentutorials.org/course/4781"},"\uc0dd\ud65c\ucf54\ub529"),", ",(0,o.kt)("a",{parentName:"p",href:"https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html"},"subicura \ub2d8\uc758 \uac1c\uc778 \ube14\ub85c\uadf8 \uae00")," \ub4f1\uc758 \uc790\ub8cc\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"container-orchestration-system"},"Container Orchestration System"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694? ",(0,o.kt)("strong",{parentName:"p"},"\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158"),"\uc774\ub77c\ub294 \ub2e8\uc5b4\uc5d0\uc11c \ucd94\uce21\ud574 \ubcfc \uc218 \uc788\ub4ef\uc774, \uc218\ub9ce\uc740 \ucee8\ud14c\uc774\ub108\uac00 \uc788\uc744 \ub54c \ucee8\ud14c\uc774\ub108\ub4e4\uc774 \uc11c\ub85c \uc870\ud654\ub86d\uac8c \uad6c\ub3d9\ub420 \uc218 \uc788\ub3c4\ub85d \uc9c0\ud718\ud558\ub294 \uc2dc\uc2a4\ud15c\uc5d0 \ube44\uc720\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \uae30\ubc18\uc758 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc11c\ube44\uc2a4\ub294 \ucee8\ud14c\uc774\ub108\uc758 \ud615\ud0dc\ub85c \uc0ac\uc6a9\uc790\ub4e4\uc5d0\uac8c \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc774\ub54c \uad00\ub9ac\ud574\uc57c \ud560 \ucee8\ud14c\uc774\ub108\uc758 \uc218\uac00 \uc801\ub2e4\uba74 \uc6b4\uc601 \ub2f4\ub2f9\uc790 \ud55c \uba85\uc774\uc11c\ub3c4 \ucda9\ubd84\ud788 \ubaa8\ub4e0 \uc0c1\ud669\uc5d0 \ub300\uc751\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc, \uc218\ubc31 \uac1c \uc774\uc0c1\uc758 \ucee8\ud14c\uc774\ub108\uac00 \uc218 \uc2ed \ub300 \uc774\uc0c1\uc758 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uad6c\ub3d9\ub418\uace0 \uc788\uace0 \uc7a5\uc560\ub97c \uc77c\uc73c\ud0a4\uc9c0 \uc54a\uace0 \ud56d\uc0c1 \uc815\uc0c1 \ub3d9\uc791\ud574\uc57c \ud55c\ub2e4\uba74, \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uc758 \uc815\uc0c1 \ub3d9\uc791 \uc5ec\ubd80\ub97c \ub2f4\ub2f9\uc790 \ud55c \uba85\uc774 \ud30c\uc545\ud558\uace0 \uc774\uc288\uc5d0 \ub300\uc751\ud558\ub294 \uac83\uc740 \ubd88\uac00\ub2a5\uc5d0 \uac00\uae5d\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc608\ub97c \ub4e4\uba74, \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\ub294\uc9c0\ub97c \uacc4\uc18d\ud574\uc11c \ubaa8\ub2c8\ud130\ub9c1(Monitoring)\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \ud2b9\uc815 \uc11c\ube44\uc2a4\uac00 \uc7a5\uc560\ub97c \uc77c\uc73c\ucf30\ub2e4\uba74 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108\uc758 \ub85c\uadf8\ub97c \ud655\uc778\ud574\uac00\uba70 \ubb38\uc81c\ub97c \ud30c\uc545\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub610\ud55c, \ud2b9\uc815 \ud074\ub7ec\uc2a4\ud130\ub098 \ud2b9\uc815 \ucee8\ud14c\uc774\ub108\uc5d0 \uc791\uc5c5\uc774 \ubab0\ub9ac\uc9c0 \uc54a\ub3c4\ub85d \uc2a4\ucf00\uc904\ub9c1(Scheduling)\ud558\uace0 \ub85c\ub4dc \ubc38\ub7f0\uc2f1(Load Balancing)\ud558\uba70, \uc2a4\ucf00\uc77c\ub9c1(Scaling)\ud558\ub294 \ub4f1\uc758 \uc218\ub9ce\uc740 \uc791\uc5c5\uc744 \ub2f4\ub2f9\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uc774\ub807\uac8c \uc218\ub9ce\uc740 \ucee8\ud14c\uc774\ub108\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\ud574\uc11c \uad00\ub9ac\ud558\uace0 \uc6b4\uc601\ud558\ub294 \uacfc\uc815\uc744 \uc870\uae08\uc774\ub098\ub9c8 \uc27d\uac8c, \uc790\ub3d9\uc73c\ub85c \ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uac00 \ubc14\ub85c \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc785\ub2c8\ub2e4. "),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c\ub294 \uc5b4\ub5bb\uac8c \uc4f0\uc77c \uc218 \uc788\uc744\uae4c\uc694?",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c GPU\uac00 \uc788\uc5b4\uc57c \ud558\ub294 \ub525\ub7ec\ub2dd \ud559\uc2b5 \ucf54\ub4dc\uac00 \ud328\ud0a4\uc9d5\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uc0ac\uc6a9 \uac00\ub2a5\ud55c GPU\uac00 \uc788\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc218\ud589\ud558\uace0, \ub9ce\uc740 \uba54\ubaa8\ub9ac\ub97c \ud544\uc694\ub85c \ud558\ub294 \ub370\uc774\ud130 \uc804\ucc98\ub9ac \ucf54\ub4dc\uac00 \ud328\ud0a4\uc9d5\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uba54\ubaa8\ub9ac\uc758 \uc5ec\uc720\uac00 \ub9ce\uc740 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc218\ud589\ud558\uace0, \ud559\uc2b5 \uc911\uc5d0 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubb38\uc81c\uac00 \uc0dd\uae30\uba74 \uc790\ub3d9\uc73c\ub85c \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \ub2e4\ub978 \ud074\ub7ec\uc2a4\ud130\ub85c \uc774\ub3d9\uc2dc\ud0a4\uace0 \ub2e4\uc2dc \ud559\uc2b5\uc744 \uc9c4\ud589\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \uc0ac\ub78c\uc774 \uc77c\uc77c\uc774 \uc218\ud589\ud558\uc9c0 \uc54a\uace0, \uc790\ub3d9\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \uc2dc\uc2a4\ud15c\uc744 \uac1c\ubc1c\ud55c \ub4a4 \ub9e1\uae30\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc9d1\ud544\uc744 \ud558\ub294 2022\ub144\uc744 \uae30\uc900\uc73c\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc758 \uc0ac\uc2e4\uc0c1\uc758 \ud45c\uc900(De facto standard)\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"CNCF\uc5d0\uc11c 2018\ub144 \ubc1c\ud45c\ud55c ",(0,o.kt)("a",{parentName:"p",href:"https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/"},"Survey")," \uc5d0 \ub530\ub974\uba74 \ub2e4\uc74c \uadf8\ub9bc\uacfc \uac19\uc774 \uc774\ubbf8 \ub450\uac01\uc744 \ub098\ud0c0\ub0b4\uace0 \uc788\uc5c8\uc73c\uba70, 2019\ub144 \ubc1c\ud45c\ud55c ",(0,o.kt)("a",{parentName:"p",href:"https://www.cncf.io/wp-content/uploads/2020/08/CNCF_Survey_Report.pdf"},"Survey"),"\uc5d0 \ub530\ub974\uba74 \uadf8\uc911 78%\uac00 \uc0c1\uc6a9 \uc218\uc900(Production Level)\uc5d0\uc11c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"k8s-graph",src:n(2745).Z,width:"2048",height:"1317"})),(0,o.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0dd\ud0dc\uacc4\uac00 \uc774\ucc98\ub7fc \ucee4\uc9c0\uac8c \ub41c \uc774\uc720\uc5d0\ub294 \uc5ec\ub7ec \uac00\uc9c0 \uc774\uc720\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub3c4\ucee4\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc5ed\uc2dc \uba38\uc2e0\ub7ec\ub2dd \uae30\ubc18\uc758 \uc11c\ube44\uc2a4\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud558\ub294 \uae30\uc220\uc774 \uc544\ub2c8\uae30\uc5d0, \uc790\uc138\ud788 \ub2e4\ub8e8\uae30\uc5d0\ub294 \uc0c1\ub2f9\ud788 \ub9ce\uc740 \uc591\uc758 \uae30\uc220\uc801\uc778 \ub0b4\uc6a9\uc744 \ub2e4\ub8e8\uc5b4\uc57c \ud558\ubbc0\ub85c \uc774\ubc88 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc0dd\ub7b5\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub2e4\ub9cc, ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc55e\uc73c\ub85c \ub2e4\ub8f0 \ub0b4\uc6a9\uc740 \ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc744 \uc5b4\ub290 \uc815\ub3c4 \uc54c\uace0 \uacc4\uc2e0 \ubd84\ub4e4\uc744 \ub300\uc0c1\uc73c\ub85c \uc791\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0 \ub300\ud574 \uc775\uc219\ud558\uc9c0 \uc54a\uc73c\uc2e0 \ubd84\ub4e4\uc740 \ub2e4\uc74c ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uacf5\uc2dd \ubb38\uc11c"),", ",(0,o.kt)("a",{parentName:"p",href:"https://subicura.com/k8s/"},"subicura \ub2d8\uc758 \uac1c\uc778 \ube14\ub85c\uadf8 \uae00")," \ub4f1\uc758 \uc27d\uace0 \uc790\uc138\ud55c \uc790\ub8cc\ub4e4\uc744 \uba3c\uc800 \ucc38\uace0\ud574\uc8fc\uc2dc\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."))}m.isMDXComponent=!0},2745:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/k8s-graph-4320bbc5bf9fc0dccdeb1edc0157e8ec.png"}}]); \ No newline at end of file diff --git a/assets/js/57b26f6a.2774ace9.js b/assets/js/57b26f6a.2774ace9.js deleted file mode 100644 index 42b33553..00000000 --- a/assets/js/57b26f6a.2774ace9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8693],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>f});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function p(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var l=a.createContext({}),u=function(t){var e=a.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):p(p({},e),t)),n},d=function(t){var e=u(t.components);return a.createElement(l.Provider,{value:e},t.children)},s="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},c=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,d=i(t,["components","mdxType","originalType","parentName"]),s=u(n),c=r,f=s["".concat(l,".").concat(c)]||s[c]||m[c]||o;return n?a.createElement(f,p(p({ref:e},d),{},{components:n})):a.createElement(f,p({ref:e},d))}));function f(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=n.length,p=new Array(o);p[0]=c;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[s]="string"==typeof t?t:r,p[1]=i;for(var u=2;u{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const o={title:"8. Component - InputPath/OutputPath",description:"",sidebar_position:8,contributors:["Jongseob Jeon","SeungTae Kim"]},p=void 0,i={unversionedId:"kubeflow/advanced-component",id:"version-1.0/kubeflow/advanced-component",title:"8. Component - InputPath/OutputPath",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-component.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-component",permalink:"/docs/1.0/kubeflow/advanced-component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-component.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:8,frontMatter:{title:"8. Component - InputPath/OutputPath",description:"",sidebar_position:8,contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"7. Pipeline - Run",permalink:"/docs/1.0/kubeflow/basic-run"},next:{title:"9. Component - Environment",permalink:"/docs/1.0/kubeflow/advanced-environment"}},l={},u=[{value:"Complex Outputs",id:"complex-outputs",level:2},{value:"Component Contents",id:"component-contents",level:2},{value:"Component Wrapper",id:"component-wrapper",level:2},{value:"Define a standalone Python function",id:"define-a-standalone-python-function",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"Rule to use InputPath/OutputPath",id:"rule-to-use-inputpathoutputpath",level:2},{value:"Load Data Component",id:"load-data-component",level:3},{value:"Write Pipeline",id:"write-pipeline",level:3}],d={toc:u},s="wrapper";function m(t){let{components:e,...n}=t;return(0,r.kt)(s,(0,a.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"complex-outputs"},"Complex Outputs"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/kubeflow-concepts#component-contents"},"Kubeflow Concepts")," \uc608\uc2dc\ub85c \ub098\uc654\ub358 \ucf54\ub4dc\ub97c \ucef4\ud3ec\ub10c\ud2b8\ub85c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"component-contents"},"Component Contents"),(0,r.kt)("p",null,"\uc544\ub798 \ucf54\ub4dc\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/kubeflow-concepts#component-contents"},"Kubeflow Concepts"),"\uc5d0\uc11c \uc0ac\uc6a9\ud588\ub358 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import dill\nimport pandas as pd\n\nfrom sklearn.svm import SVC\n\ntrain_data = pd.read_csv(train_data_path)\ntrain_target = pd.read_csv(train_target_path)\n\nclf = SVC(kernel=kernel)\nclf.fit(train_data, train_target)\n\nwith open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("h2",{id:"component-wrapper"},"Component Wrapper"),(0,r.kt)("h3",{id:"define-a-standalone-python-function"},"Define a standalone Python function"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uc5d0 \ud544\uc694\ud55c Config\ub4e4\uacfc \ud568\uaed8 \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'def train_from_csv(\n train_data_path: str,\n train_target_path: str,\n model_path: str,\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"../kubeflow/basic-component"},"Basic Usage Component"),"\uc5d0\uc11c \uc124\uba85\ud560 \ub54c \uc785\ub825\uacfc \ucd9c\ub825\uc5d0 \ub300\ud55c \ud0c0\uc785 \ud78c\ud2b8\ub97c \uc801\uc5b4\uc57c \ud55c\ub2e4\uace0 \uc124\uba85 \ud588\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9cc\uc57d json\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ubcf8 \ud0c0\uc785\uc774 \uc544\ub2cc dataframe, model\uc640 \uac19\uc774 \ubcf5\uc7a1\ud55c \uac1d\uccb4\ub4e4\uc740 \uc5b4\ub5bb\uac8c \ud560\uae4c\uc694?"),(0,r.kt)("p",null,"\ud30c\uc774\uc36c\uc5d0\uc11c \ud568\uc218\uac04\uc5d0 \uac12\uc744 \uc804\ub2ec\ud560 \ub54c, \uac1d\uccb4\ub97c \ubc18\ud658\ud574\ub3c4 \uadf8 \uac12\uc774 \ud638\uc2a4\ud2b8\uc758 \uba54\ubaa8\ub9ac\uc5d0 \uc800\uc7a5\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \ub2e4\uc74c \ud568\uc218\uc5d0\uc11c\ub3c4 \uac19\uc740 \uac1d\uccb4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc kubeflow\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc740 \uac01\uac01 \ucee8\ud14c\uc774\ub108 \uc704\uc5d0\uc11c \uc11c\ub85c \ub3c5\ub9bd\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc989, \uac19\uc740 \uba54\ubaa8\ub9ac\ub97c \uacf5\uc720\ud558\uace0 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ubcf4\ud1b5\uc758 \ud30c\uc774\uc36c \ud568\uc218\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uacfc \uac19\uc774 \uac1d\uccb4\ub97c \uc804\ub2ec\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc5d0 \ub118\uaca8 \uc904 \uc218 \uc788\ub294 \uc815\ubcf4\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"json")," \uc73c\ub85c\ub9cc \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c Model\uc774\ub098 DataFrame\uacfc \uac19\uc774 json \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc5c6\ub294 \ud0c0\uc785\uc758 \uac1d\uccb4\ub294 \ub2e4\ub978 \ubc29\ubc95\uc744 \ud1b5\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"Kubeflow\uc5d0\uc11c\ub294 \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 json-serializable \ud558\uc9c0 \uc54a\uc740 \ud0c0\uc785\uc758 \uac1d\uccb4\ub294 \uba54\ubaa8\ub9ac \ub300\uc2e0 \ud30c\uc77c\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud55c \ub4a4, \uadf8 \ud30c\uc77c\uc744 \uc774\uc6a9\ud574 \uc815\ubcf4\ub97c \uc804\ub2ec\ud569\ub2c8\ub2e4. \uc800\uc7a5\ub41c \ud30c\uc77c\uc758 \uacbd\ub85c\ub294 str\uc774\uae30 \ub54c\ubb38\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc5d0 \uc804\ub2ec\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uadf8\ub7f0\ub370 kubeflow\uc5d0\uc11c\ub294 minio\ub97c \uc774\uc6a9\ud574 \ud30c\uc77c\uc744 \uc800\uc7a5\ud558\ub294\ub370 \uc720\uc800\ub294 \uc2e4\ud589\uc744 \ud558\uae30 \uc804\uc5d0\ub294 \uac01 \ud30c\uc77c\uc758 \uacbd\ub85c\ub97c \uc54c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c kubeflow\uc5d0\uc11c\ub294 \uc785\ub825\uacfc \ucd9c\ub825\uc758 \uacbd\ub85c\uc640 \uad00\ub828\ub41c \ub9e4\uc9c1\uc744 \uc81c\uacf5\ud558\ub294\ub370 \ubc14\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"InputPath"),"\uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"InputPath"),"\ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \uc785\ub825 \uacbd\ub85c\ub97c ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \ucd9c\ub825 \uacbd\ub85c\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\uace0 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"data_path: OutputPath()"),"\ub97c argument\ub85c \ub9cc\ub4ed\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \ub370\uc774\ud130\ub97c \ubc1b\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"data_path: InputPath()"),"\uc744 argument\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ub807\uac8c \ub9cc\ub4e0 \ud6c4 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc11c\ub85c \uc5f0\uacb0\uc744 \ud558\uba74 kubeflow\uc5d0\uc11c \ud544\uc694\ud55c \uacbd\ub85c\ub97c \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud6c4 \uc785\ub825\ud574 \uc8fc\uae30 \ub54c\ubb38\uc5d0 \ub354 \uc774\uc0c1 \uc720\uc800\ub294 \uacbd\ub85c\ub97c \uc2e0\uacbd\uc4f0\uc9c0 \uc54a\uace0 \ucef4\ud3ec\ub10c\ud2b8\uac04\uc758 \uad00\uacc4\ub9cc \uc2e0\uacbd\uc4f0\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc774 \ub0b4\uc6a9\uc744 \ubc14\ud0d5\uc73c\ub85c \ub2e4\uc2dc \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath\n\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,"InputPath\ub098 OutputPath\ub294 string\uc744 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 string\uc740 \uc785\ub825 \ub610\ub294 \ucd9c\ub825\ud558\ub824\uace0 \ud558\ub294 \ud30c\uc77c\uc758 \ud3ec\ub9f7\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\ub2e4\uace0 \uaf2d \uc774 \ud3ec\ub9f7\uc73c\ub85c \ud30c\uc77c \ud615\ud0dc\ub85c \uc800\uc7a5\uc774 \uac15\uc81c\ub418\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\ub9cc \ud30c\uc774\ud504\ub77c\uc778\uc744 \ucef4\ud30c\uc77c\ud560 \ub54c \ucd5c\uc18c\ud55c\uc758 \ud0c0\uc785 \uccb4\ud06c\ub97c \uc704\ud55c \ub3c4\uc6b0\ubbf8 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d \ud30c\uc77c \ud3ec\ub9f7\uc774 \uace0\uc815\ub418\uc9c0 \uc54a\ub294\ub2e4\uba74 \uc785\ub825\ud558\uc9c0 \uc54a\uc73c\uba74 \ub429\ub2c8\ub2e4 (\ud0c0\uc785 \ud78c\ud2b8 \uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"Any")," \uc640 \uac19\uc740 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4)."),(0,r.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,r.kt)("p",null,"\uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("h2",{id:"rule-to-use-inputpathoutputpath"},"Rule to use InputPath/OutputPath"),(0,r.kt)("p",null,"InputPath\ub098 OutputPath argument\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \uc791\uc131\ud560 \ub54c \uc9c0\ucf1c\uc57c\ud558\ub294 \uaddc\uce59\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"load-data-component"},"Load Data Component"),(0,r.kt)("p",null,"\uc704\uc5d0\uc11c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub370\uc774\ud130\uac00 \ud544\uc694\ud558\ubbc0\ub85c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n')),(0,r.kt)("h3",{id:"write-pipeline"},"Write Pipeline"),(0,r.kt)("p",null,"\uc774\uc81c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud574 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="complex_pipeline")\ndef complex_pipeline(kernel: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n')),(0,r.kt)("p",null,"\ud55c \uac00\uc9c0 \uc774\uc0c1\ud55c \uc810\uc744 \ud655\uc778\ud558\uc168\ub098\uc694?",(0,r.kt)("br",{parentName:"p"}),"\n","\ubc14\ub85c \uc785\ub825\uacfc \ucd9c\ub825\uc5d0\uc11c \ubc1b\ub294 argument\uc911 \uacbd\ub85c\uc640 \uad00\ub828\ub41c \uac83\ub4e4\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"_path")," \uc811\ubbf8\uc0ac\uac00 \ubaa8\ub450 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},'iris_data.outputs["data_path"]')," \uac00 \uc544\ub2cc ",(0,r.kt)("inlineCode",{parentName:"p"},'iris_data.outputs["data"]')," \uc73c\ub85c \uc811\uadfc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 kubeflow\uc5d0\uc11c \uc815\ud55c \ubc95\uce59\uc73c\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"InputPath")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \uc73c\ub85c \uc0dd\uc131\ub41c \uacbd\ub85c\ub4e4\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc811\uadfc\ud560 \ub54c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"_path")," \uc811\ubbf8\uc0ac\ub97c \uc0dd\ub7b5\ud558\uc5ec \uc811\uadfc\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\ub9cc \ubc29\uae08 \uc791\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud560 \uacbd\uc6b0 \uc2e4\ud589\uc774 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uc774\uc720\ub294 \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/57b26f6a.8f4c12df.js b/assets/js/57b26f6a.8f4c12df.js new file mode 100644 index 00000000..7beb9f77 --- /dev/null +++ b/assets/js/57b26f6a.8f4c12df.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8693],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>f});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function p(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var l=a.createContext({}),u=function(t){var e=a.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):p(p({},e),t)),n},d=function(t){var e=u(t.components);return a.createElement(l.Provider,{value:e},t.children)},s="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},c=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,d=i(t,["components","mdxType","originalType","parentName"]),s=u(n),c=r,f=s["".concat(l,".").concat(c)]||s[c]||m[c]||o;return n?a.createElement(f,p(p({ref:e},d),{},{components:n})):a.createElement(f,p({ref:e},d))}));function f(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=n.length,p=new Array(o);p[0]=c;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[s]="string"==typeof t?t:r,p[1]=i;for(var u=2;u{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const o={title:"8. Component - InputPath/OutputPath",description:"",sidebar_position:8,contributors:["Jongseob Jeon","SeungTae Kim"]},p=void 0,i={unversionedId:"kubeflow/advanced-component",id:"version-1.0/kubeflow/advanced-component",title:"8. Component - InputPath/OutputPath",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-component.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-component",permalink:"/docs/1.0/kubeflow/advanced-component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-component.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:8,frontMatter:{title:"8. Component - InputPath/OutputPath",description:"",sidebar_position:8,contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"7. Pipeline - Run",permalink:"/docs/1.0/kubeflow/basic-run"},next:{title:"9. Component - Environment",permalink:"/docs/1.0/kubeflow/advanced-environment"}},l={},u=[{value:"Complex Outputs",id:"complex-outputs",level:2},{value:"Component Contents",id:"component-contents",level:2},{value:"Component Wrapper",id:"component-wrapper",level:2},{value:"Define a standalone Python function",id:"define-a-standalone-python-function",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"Rule to use InputPath/OutputPath",id:"rule-to-use-inputpathoutputpath",level:2},{value:"Load Data Component",id:"load-data-component",level:3},{value:"Write Pipeline",id:"write-pipeline",level:3}],d={toc:u},s="wrapper";function m(t){let{components:e,...n}=t;return(0,r.kt)(s,(0,a.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"complex-outputs"},"Complex Outputs"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/kubeflow-concepts#component-contents"},"Kubeflow Concepts")," \uc608\uc2dc\ub85c \ub098\uc654\ub358 \ucf54\ub4dc\ub97c \ucef4\ud3ec\ub10c\ud2b8\ub85c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"component-contents"},"Component Contents"),(0,r.kt)("p",null,"\uc544\ub798 \ucf54\ub4dc\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/kubeflow-concepts#component-contents"},"Kubeflow Concepts"),"\uc5d0\uc11c \uc0ac\uc6a9\ud588\ub358 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import dill\nimport pandas as pd\n\nfrom sklearn.svm import SVC\n\ntrain_data = pd.read_csv(train_data_path)\ntrain_target = pd.read_csv(train_target_path)\n\nclf = SVC(kernel=kernel)\nclf.fit(train_data, train_target)\n\nwith open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("h2",{id:"component-wrapper"},"Component Wrapper"),(0,r.kt)("h3",{id:"define-a-standalone-python-function"},"Define a standalone Python function"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uc5d0 \ud544\uc694\ud55c Config\ub4e4\uacfc \ud568\uaed8 \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'def train_from_csv(\n train_data_path: str,\n train_target_path: str,\n model_path: str,\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"../kubeflow/basic-component"},"Basic Usage Component"),"\uc5d0\uc11c \uc124\uba85\ud560 \ub54c \uc785\ub825\uacfc \ucd9c\ub825\uc5d0 \ub300\ud55c \ud0c0\uc785 \ud78c\ud2b8\ub97c \uc801\uc5b4\uc57c \ud55c\ub2e4\uace0 \uc124\uba85 \ud588\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9cc\uc57d json\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ubcf8 \ud0c0\uc785\uc774 \uc544\ub2cc dataframe, model\uc640 \uac19\uc774 \ubcf5\uc7a1\ud55c \uac1d\uccb4\ub4e4\uc740 \uc5b4\ub5bb\uac8c \ud560\uae4c\uc694?"),(0,r.kt)("p",null,"\ud30c\uc774\uc36c\uc5d0\uc11c \ud568\uc218\uac04\uc5d0 \uac12\uc744 \uc804\ub2ec\ud560 \ub54c, \uac1d\uccb4\ub97c \ubc18\ud658\ud574\ub3c4 \uadf8 \uac12\uc774 \ud638\uc2a4\ud2b8\uc758 \uba54\ubaa8\ub9ac\uc5d0 \uc800\uc7a5\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \ub2e4\uc74c \ud568\uc218\uc5d0\uc11c\ub3c4 \uac19\uc740 \uac1d\uccb4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc kubeflow\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc740 \uac01\uac01 \ucee8\ud14c\uc774\ub108 \uc704\uc5d0\uc11c \uc11c\ub85c \ub3c5\ub9bd\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc989, \uac19\uc740 \uba54\ubaa8\ub9ac\ub97c \uacf5\uc720\ud558\uace0 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ubcf4\ud1b5\uc758 \ud30c\uc774\uc36c \ud568\uc218\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uacfc \uac19\uc774 \uac1d\uccb4\ub97c \uc804\ub2ec\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc5d0 \ub118\uaca8 \uc904 \uc218 \uc788\ub294 \uc815\ubcf4\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"json")," \uc73c\ub85c\ub9cc \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c Model\uc774\ub098 DataFrame\uacfc \uac19\uc774 json \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc5c6\ub294 \ud0c0\uc785\uc758 \uac1d\uccb4\ub294 \ub2e4\ub978 \ubc29\ubc95\uc744 \ud1b5\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"Kubeflow\uc5d0\uc11c\ub294 \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 json-serializable \ud558\uc9c0 \uc54a\uc740 \ud0c0\uc785\uc758 \uac1d\uccb4\ub294 \uba54\ubaa8\ub9ac \ub300\uc2e0 \ud30c\uc77c\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud55c \ub4a4, \uadf8 \ud30c\uc77c\uc744 \uc774\uc6a9\ud574 \uc815\ubcf4\ub97c \uc804\ub2ec\ud569\ub2c8\ub2e4. \uc800\uc7a5\ub41c \ud30c\uc77c\uc758 \uacbd\ub85c\ub294 str\uc774\uae30 \ub54c\ubb38\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc5d0 \uc804\ub2ec\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uadf8\ub7f0\ub370 kubeflow\uc5d0\uc11c\ub294 minio\ub97c \uc774\uc6a9\ud574 \ud30c\uc77c\uc744 \uc800\uc7a5\ud558\ub294\ub370 \uc720\uc800\ub294 \uc2e4\ud589\uc744 \ud558\uae30 \uc804\uc5d0\ub294 \uac01 \ud30c\uc77c\uc758 \uacbd\ub85c\ub97c \uc54c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c kubeflow\uc5d0\uc11c\ub294 \uc785\ub825\uacfc \ucd9c\ub825\uc758 \uacbd\ub85c\uc640 \uad00\ub828\ub41c \ub9e4\uc9c1\uc744 \uc81c\uacf5\ud558\ub294\ub370 \ubc14\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"InputPath"),"\uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"InputPath"),"\ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \uc785\ub825 \uacbd\ub85c\ub97c ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \ucd9c\ub825 \uacbd\ub85c\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\uace0 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"data_path: OutputPath()"),"\ub97c argument\ub85c \ub9cc\ub4ed\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \ub370\uc774\ud130\ub97c \ubc1b\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"data_path: InputPath()"),"\uc744 argument\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ub807\uac8c \ub9cc\ub4e0 \ud6c4 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc11c\ub85c \uc5f0\uacb0\uc744 \ud558\uba74 kubeflow\uc5d0\uc11c \ud544\uc694\ud55c \uacbd\ub85c\ub97c \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud6c4 \uc785\ub825\ud574 \uc8fc\uae30 \ub54c\ubb38\uc5d0 \ub354 \uc774\uc0c1 \uc720\uc800\ub294 \uacbd\ub85c\ub97c \uc2e0\uacbd\uc4f0\uc9c0 \uc54a\uace0 \ucef4\ud3ec\ub10c\ud2b8\uac04\uc758 \uad00\uacc4\ub9cc \uc2e0\uacbd\uc4f0\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc774 \ub0b4\uc6a9\uc744 \ubc14\ud0d5\uc73c\ub85c \ub2e4\uc2dc \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath\n\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,"InputPath\ub098 OutputPath\ub294 string\uc744 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 string\uc740 \uc785\ub825 \ub610\ub294 \ucd9c\ub825\ud558\ub824\uace0 \ud558\ub294 \ud30c\uc77c\uc758 \ud3ec\ub9f7\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\ub2e4\uace0 \uaf2d \uc774 \ud3ec\ub9f7\uc73c\ub85c \ud30c\uc77c \ud615\ud0dc\ub85c \uc800\uc7a5\uc774 \uac15\uc81c\ub418\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\ub9cc \ud30c\uc774\ud504\ub77c\uc778\uc744 \ucef4\ud30c\uc77c\ud560 \ub54c \ucd5c\uc18c\ud55c\uc758 \ud0c0\uc785 \uccb4\ud06c\ub97c \uc704\ud55c \ub3c4\uc6b0\ubbf8 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d \ud30c\uc77c \ud3ec\ub9f7\uc774 \uace0\uc815\ub418\uc9c0 \uc54a\ub294\ub2e4\uba74 \uc785\ub825\ud558\uc9c0 \uc54a\uc73c\uba74 \ub429\ub2c8\ub2e4 (\ud0c0\uc785 \ud78c\ud2b8 \uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"Any")," \uc640 \uac19\uc740 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4)."),(0,r.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,r.kt)("p",null,"\uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("h2",{id:"rule-to-use-inputpathoutputpath"},"Rule to use InputPath/OutputPath"),(0,r.kt)("p",null,"InputPath\ub098 OutputPath argument\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \uc791\uc131\ud560 \ub54c \uc9c0\ucf1c\uc57c\ud558\ub294 \uaddc\uce59\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"load-data-component"},"Load Data Component"),(0,r.kt)("p",null,"\uc704\uc5d0\uc11c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub370\uc774\ud130\uac00 \ud544\uc694\ud558\ubbc0\ub85c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n')),(0,r.kt)("h3",{id:"write-pipeline"},"Write Pipeline"),(0,r.kt)("p",null,"\uc774\uc81c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud574 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="complex_pipeline")\ndef complex_pipeline(kernel: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n')),(0,r.kt)("p",null,"\ud55c \uac00\uc9c0 \uc774\uc0c1\ud55c \uc810\uc744 \ud655\uc778\ud558\uc168\ub098\uc694?",(0,r.kt)("br",{parentName:"p"}),"\n","\ubc14\ub85c \uc785\ub825\uacfc \ucd9c\ub825\uc5d0\uc11c \ubc1b\ub294 argument\uc911 \uacbd\ub85c\uc640 \uad00\ub828\ub41c \uac83\ub4e4\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"_path")," \uc811\ubbf8\uc0ac\uac00 \ubaa8\ub450 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},'iris_data.outputs["data_path"]')," \uac00 \uc544\ub2cc ",(0,r.kt)("inlineCode",{parentName:"p"},'iris_data.outputs["data"]')," \uc73c\ub85c \uc811\uadfc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 kubeflow\uc5d0\uc11c \uc815\ud55c \ubc95\uce59\uc73c\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"InputPath")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \uc73c\ub85c \uc0dd\uc131\ub41c \uacbd\ub85c\ub4e4\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc811\uadfc\ud560 \ub54c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"_path")," \uc811\ubbf8\uc0ac\ub97c \uc0dd\ub7b5\ud558\uc5ec \uc811\uadfc\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\ub9cc \ubc29\uae08 \uc791\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud560 \uacbd\uc6b0 \uc2e4\ud589\uc774 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uc774\uc720\ub294 \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5b3cd5ae.264ec280.js b/assets/js/5b3cd5ae.264ec280.js new file mode 100644 index 00000000..27bf78a8 --- /dev/null +++ b/assets/js/5b3cd5ae.264ec280.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2375],{3905:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),m=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},s=function(e){var n=m(e.components);return a.createElement(p.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=m(t),c=r,k=d["".concat(p,".").concat(c)]||d[c]||u[c]||l;return t?a.createElement(k,o(o({ref:n},s),{},{components:t})):a.createElement(k,o({ref:n},s))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=t.length,o=new Array(l);o[0]=c;var i={};for(var p in n)hasOwnProperty.call(n,p)&&(i[p]=n[p]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var m=2;m{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>m});var a=t(7462),r=(t(7294),t(3905));const l={title:"4. Seldon Fields",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},o=void 0,i={unversionedId:"api-deployment/seldon-fields",id:"api-deployment/seldon-fields",title:"4. Seldon Fields",description:"",source:"@site/docs/api-deployment/seldon-fields.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-fields",permalink:"/docs/api-deployment/seldon-fields",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-fields.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Seldon Fields",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"3. Seldon Monitoring",permalink:"/docs/api-deployment/seldon-pg"},next:{title:"5. Model from MLflow",permalink:"/docs/api-deployment/seldon-mlflow"}},p={},m=[{value:"How Seldon Core works?",id:"how-seldon-core-works",level:2},{value:"SeldonDeployment Spec",id:"seldondeployment-spec",level:2},{value:"componentSpecs",id:"componentspecs",level:2},{value:"volumes",id:"volumes",level:3},{value:"initContainer",id:"initcontainer",level:3},{value:"name",id:"name",level:4},{value:"image",id:"image",level:4},{value:"args",id:"args",level:4},{value:"volumeMounts",id:"volumemounts",level:3},{value:"container",id:"container",level:3},{value:"name",id:"name-1",level:4},{value:"image",id:"image-1",level:4},{value:"volumeMounts",id:"volumemounts-1",level:4},{value:"securityContext",id:"securitycontext",level:4},{value:"graph",id:"graph",level:2},{value:"name",id:"name-2",level:3},{value:"type",id:"type",level:3},{value:"parameters",id:"parameters",level:3},{value:"children",id:"children",level:3}],s={toc:m},d="wrapper";function u(e){let{components:n,...l}=e;return(0,r.kt)(d,(0,a.Z)({},s,l,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"how-seldon-core-works"},"How Seldon Core works?"),(0,r.kt)("p",null,"Seldon Core\uac00 API \uc11c\ubc84\ub97c \uc0dd\uc131\ud558\ub294 \uacfc\uc815\uc744 \uc694\uc57d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"seldon-fields-0.png",src:t(3438).Z,width:"2784",height:"1000"})),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"initContainer\ub294 \ubaa8\ub378 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud544\uc694\ud55c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"\ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ubaa8\ub378\uc744 container\ub85c \uc804\ub2ec\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"container\ub294 \uc804\ub2ec\ubc1b\uc740 \ubaa8\ub378\uc744 \uac10\uc2fc API \uc11c\ubc84\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"\uc0dd\uc131\ub41c API \uc11c\ubc84 \uc8fc\uc18c\ub85c API\ub97c \uc694\uccad\ud558\uc5ec \ubaa8\ub378\uc758 \ucd94\ub860 \uac12\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("h2",{id:"seldondeployment-spec"},"SeldonDeployment Spec"),(0,r.kt)("p",null,"Seldon Core\ub97c \uc0ac\uc6a9\ud560 \ub54c, \uc8fc\ub85c \uc0ac\uc6a9\ud558\uac8c \ub418\ub294 \ucee4\uc2a4\ud140 \ub9ac\uc18c\uc2a4\uc778 SeldonDeployment\ub97c \uc815\uc758\ud558\ub294 yaml \ud30c\uc77c\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n\n containers:\n - name: model\n image: seldonio/sklearnserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n\n')),(0,r.kt)("p",null,"SeldonDeployment spe \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"name")," \uacfc ",(0,r.kt)("inlineCode",{parentName:"p"},"predictors")," \ud544\ub4dc\ub294 required \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc5d0\uc11c pod\uc758 \uad6c\ubd84\uc744 \uc704\ud55c \uc774\ub984\uc73c\ub85c \ud06c\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"predictors"),"\ub294 \ud55c \uac1c\ub85c \uad6c\uc131\ub41c array\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"graph")," \uac00 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc5ec\uae30\uc11c\ub3c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 pod\uc758 \uad6c\ubd84\uc744 \uc704\ud55c \uc774\ub984\uc73c\ub85c \ud06c\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. "),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"graph"),"\uc5d0\uc11c \uc815\uc758\ud574\uc57c \ud560 \ud544\ub4dc\ub4e4\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"componentspecs"},"componentSpecs"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \ub294 \ud558\ub098\ub85c \uad6c\uc131\ub41c array\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"spec")," \ud0a4\uac12\uc774 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"spec")," \uc5d0\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"volumes"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"initContainers"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"containers")," \uc758 \ud544\ub4dc\uac00 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"volumes"},"volumes"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumes:\n- name: model-provision-location\n emptyDir: {}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"volumes"),"\uc740 initContainer\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\ub294 \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uae30 \uc704\ud55c \uacf5\uac04\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","array\ub85c \uc785\ub825\uc744 \ubc1b\uc73c\uba70 array\uc758 \uad6c\uc131 \uc694\uc18c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uacfc ",(0,r.kt)("inlineCode",{parentName:"p"},"emptyDir")," \uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \uac12\ub4e4\uc740 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uace0 \uc62e\uae38 \ub54c \ud55c\ubc88 \uc0ac\uc6a9\ub418\ubbc0\ub85c \ud06c\uac8c \uc218\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"initcontainer"},"initContainer"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'- name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n')),(0,r.kt)("p",null,"initContainer\ub294 API\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c \uc0ac\uc6a9\ub418\ub294 \ud544\ub4dc\ub4e4\uc740 \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ub54c \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \uc815\ud574\uc90d\ub2c8\ub2e4."),(0,r.kt)("p",null,"initContainer\uc758 \uac12\uc740 n\uac1c\uc758 array\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc73c\uba70 \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub378\ub9c8\ub2e4 \uac01\uac01 \uc9c0\uc815\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"name"},"name"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc758 pod\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub514\ubc84\uae45\uc744 \uc704\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"{model_name}-initializer")," \ub85c \uc0ac\uc6a9\ud558\uae38 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"image"},"image"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"image")," \ub294 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uae30 \uc704\ud574 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0 \uc774\ub984\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","seldon core\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \uc774\ubbf8\uc9c0\ub294 \ud06c\uac8c \ub450 \uac00\uc9c0\uc785\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"gcr.io/kfserving/storage-initializer:v0.4.0"),(0,r.kt)("li",{parentName:"ul"},"seldonio/rclone-storage-initializer:1.13.0-dev")),(0,r.kt)("p",null,"\uac01\uac01\uc758 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uc744 \ucc38\uace0 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.seldon.io/projects/seldon-core/en/latest/servers/kfserving-storage-initializer.html"},"kfserving")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core/tree/master/components/rclone-storage-initializer"},"rclone"))),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c\ub294 kfserving\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"args"},"args"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n')),(0,r.kt)("p",null,"gcr.io/kfserving/storage-initializer:v0.4.0 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\uac00 \uc2e4\ud589(",(0,r.kt)("inlineCode",{parentName:"p"},"run"),")\ub420 \ub54c \uc785\ub825\ubc1b\ub294 argument\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","array\ub85c \uad6c\uc131\ub418\uba70 \uccab \ubc88\uc9f8 array\uc758 \uac12\uc740 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ubaa8\ub378\uc758 \uc8fc\uc18c\ub97c \uc801\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub450 \ubc88\uc9f8 array\uc758 \uac12\uc740 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc8fc\uc18c\ub97c \uc801\uc2b5\ub2c8\ub2e4. (seldon core\uc5d0\uc11c\ub294 \uc8fc\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"/mnt/models"),"\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.)"),(0,r.kt)("h3",{id:"volumemounts"},"volumeMounts"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"volumneMounts"),"\ub294 volumes\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"/mnt/models"),"\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc5d0\uc11c \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d \ubcfc\ub968\uc744 \ubd99\uc5ec\uc8fc\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/storage/volumes/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 Volume"),"\uc744 \ucc38\uc870 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"container"},"container"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"containers:\n- name: model\n image: seldonio/sklearnserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n")),(0,r.kt)("p",null,"container\ub294 \uc2e4\uc81c\ub85c \ubaa8\ub378\uc774 API \ud615\uc2dd\uc73c\ub85c \uc2e4\ud589\ub420 \ub54c\uc758 \uc124\uc815\uc744 \uc815\uc758\ud558\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4. "),(0,r.kt)("h4",{id:"name-1"},"name"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc758 pod\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub378\uc758 \uc774\ub984\uc744 \uc801\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"image-1"},"image"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"image")," \ub294 \ubaa8\ub378\uc744 API\ub85c \ub9cc\ub4dc\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ubbf8\uc9c0\uc5d0\ub294 \ubaa8\ub378\uc774 \ub85c\ub4dc\ub420 \ub54c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uc774 \ubaa8\ub450 \uc124\uce58\ub418\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"Seldon Core\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \uacf5\uc2dd \uc774\ubbf8\uc9c0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"seldonio/sklearnserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/mlflowserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/xgboostserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/tfserving")),(0,r.kt)("h4",{id:"volumemounts-1"},"volumeMounts"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumeMounts:\n- mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n")),(0,r.kt)("p",null,"initContainer\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ub370\uc774\ud130\uac00 \uc788\ub294 \uacbd\ub85c\ub97c \uc54c\ub824\uc8fc\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub54c \ubaa8\ub378\uc774 \uc218\uc815\ub418\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"readOnly: true"),"\ub3c4 \uac19\uc774 \uc8fc\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"securitycontext"},"securityContext"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n")),(0,r.kt)("p",null,"\ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud560 \ub54c pod\uc774 \uad8c\ud55c\uc774 \uc5c6\uc5b4\uc11c \ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc218\ud589\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \uc704\ud574\uc11c root \uad8c\ud55c\uc744 \ubd80\uc5ec\ud569\ub2c8\ub2e4. (\ub2e4\ub9cc \uc774 \uc791\uc5c5\uc740 \uc2e4\uc81c \uc11c\ube59 \uc2dc \ubcf4\uc548 \ubb38\uc81c\uac00 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.)"),(0,r.kt)("h2",{id:"graph"},"graph"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n')),(0,r.kt)("p",null,"\ubaa8\ub378\uc774 \ub3d9\uc791\ud558\ub294 \uc21c\uc11c\ub97c \uc815\uc758\ud55c \ud544\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"name-2"},"name"),(0,r.kt)("p",null,"\ubaa8\ub378 \uadf8\ub798\ud504\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. container\uc5d0\uc11c \uc815\uc758\ub41c \uc774\ub984\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"type"},"type"),(0,r.kt)("p",null,"type\uc740 \ud06c\uac8c 4\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"TRANSFORMER"),(0,r.kt)("li",{parentName:"ol"},"MODEL"),(0,r.kt)("li",{parentName:"ol"},"OUTPUT_TRANSFORMER"),(0,r.kt)("li",{parentName:"ol"},"ROUTER")),(0,r.kt)("p",null,"\uac01 type\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.seldon.io/projects/seldon-core/en/latest/examples/graph-metadata.html"},"Seldon Core Complex Graphs Metadata Example"),"\uc744 \ucc38\uc870 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"parameters"},"parameters"),(0,r.kt)("p",null,"class init \uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \uac12\ub4e4\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","sklearnserver\uc5d0\uc11c \ud544\uc694\ud55c \uac12\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/SeldonIO/seldon-core/blob/master/servers/sklearnserver/sklearnserver/SKLearnServer.py"},"\ub2e4\uc74c \ud30c\uc77c"),"\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'class SKLearnServer(SeldonComponent):\n def __init__(self, model_uri: str = None, method: str = "predict_proba"):\n')),(0,r.kt)("p",null,"\ucf54\ub4dc\ub97c \ubcf4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"model_uri"),"\uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"method"),"\ub97c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"children"},"children"),(0,r.kt)("p",null,"\uc21c\uc11c\ub3c4\ub97c \uc791\uc131\ud560 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."))}u.isMDXComponent=!0},3438:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/seldon-fields-0-7794367220b87e1aba920b6aad6f9bf8.png"}}]); \ No newline at end of file diff --git a/assets/js/5b3cd5ae.cdfd554f.js b/assets/js/5b3cd5ae.cdfd554f.js deleted file mode 100644 index 21ddde29..00000000 --- a/assets/js/5b3cd5ae.cdfd554f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2375],{3905:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),m=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},s=function(e){var n=m(e.components);return a.createElement(p.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=m(t),c=r,k=d["".concat(p,".").concat(c)]||d[c]||u[c]||l;return t?a.createElement(k,o(o({ref:n},s),{},{components:t})):a.createElement(k,o({ref:n},s))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=t.length,o=new Array(l);o[0]=c;var i={};for(var p in n)hasOwnProperty.call(n,p)&&(i[p]=n[p]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var m=2;m{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>m});var a=t(7462),r=(t(7294),t(3905));const l={title:"4. Seldon Fields",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},o=void 0,i={unversionedId:"api-deployment/seldon-fields",id:"api-deployment/seldon-fields",title:"4. Seldon Fields",description:"",source:"@site/docs/api-deployment/seldon-fields.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-fields",permalink:"/docs/api-deployment/seldon-fields",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-fields.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Seldon Fields",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"3. Seldon Monitoring",permalink:"/docs/api-deployment/seldon-pg"},next:{title:"5. Model from MLflow",permalink:"/docs/api-deployment/seldon-mlflow"}},p={},m=[{value:"How Seldon Core works?",id:"how-seldon-core-works",level:2},{value:"SeldonDeployment Spec",id:"seldondeployment-spec",level:2},{value:"componentSpecs",id:"componentspecs",level:2},{value:"volumes",id:"volumes",level:3},{value:"initContainer",id:"initcontainer",level:3},{value:"name",id:"name",level:4},{value:"image",id:"image",level:4},{value:"args",id:"args",level:4},{value:"volumeMounts",id:"volumemounts",level:3},{value:"container",id:"container",level:3},{value:"name",id:"name-1",level:4},{value:"image",id:"image-1",level:4},{value:"volumeMounts",id:"volumemounts-1",level:4},{value:"securityContext",id:"securitycontext",level:4},{value:"graph",id:"graph",level:2},{value:"name",id:"name-2",level:3},{value:"type",id:"type",level:3},{value:"parameters",id:"parameters",level:3},{value:"children",id:"children",level:3}],s={toc:m},d="wrapper";function u(e){let{components:n,...l}=e;return(0,r.kt)(d,(0,a.Z)({},s,l,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"how-seldon-core-works"},"How Seldon Core works?"),(0,r.kt)("p",null,"Seldon Core\uac00 API \uc11c\ubc84\ub97c \uc0dd\uc131\ud558\ub294 \uacfc\uc815\uc744 \uc694\uc57d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"seldon-fields-0.png",src:t(3438).Z,width:"2784",height:"1000"})),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"initContainer\ub294 \ubaa8\ub378 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud544\uc694\ud55c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"\ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ubaa8\ub378\uc744 container\ub85c \uc804\ub2ec\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"container\ub294 \uc804\ub2ec\ubc1b\uc740 \ubaa8\ub378\uc744 \uac10\uc2fc API \uc11c\ubc84\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"\uc0dd\uc131\ub41c API \uc11c\ubc84 \uc8fc\uc18c\ub85c API\ub97c \uc694\uccad\ud558\uc5ec \ubaa8\ub378\uc758 \ucd94\ub860 \uac12\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("h2",{id:"seldondeployment-spec"},"SeldonDeployment Spec"),(0,r.kt)("p",null,"Seldon Core\ub97c \uc0ac\uc6a9\ud560 \ub54c, \uc8fc\ub85c \uc0ac\uc6a9\ud558\uac8c \ub418\ub294 \ucee4\uc2a4\ud140 \ub9ac\uc18c\uc2a4\uc778 SeldonDeployment\ub97c \uc815\uc758\ud558\ub294 yaml \ud30c\uc77c\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n\n containers:\n - name: model\n image: seldonio/sklearnserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n\n')),(0,r.kt)("p",null,"SeldonDeployment spe \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"name")," \uacfc ",(0,r.kt)("inlineCode",{parentName:"p"},"predictors")," \ud544\ub4dc\ub294 required \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc5d0\uc11c pod\uc758 \uad6c\ubd84\uc744 \uc704\ud55c \uc774\ub984\uc73c\ub85c \ud06c\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"predictors"),"\ub294 \ud55c \uac1c\ub85c \uad6c\uc131\ub41c array\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"graph")," \uac00 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc5ec\uae30\uc11c\ub3c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 pod\uc758 \uad6c\ubd84\uc744 \uc704\ud55c \uc774\ub984\uc73c\ub85c \ud06c\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. "),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"graph"),"\uc5d0\uc11c \uc815\uc758\ud574\uc57c \ud560 \ud544\ub4dc\ub4e4\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"componentspecs"},"componentSpecs"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \ub294 \ud558\ub098\ub85c \uad6c\uc131\ub41c array\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"spec")," \ud0a4\uac12\uc774 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"spec")," \uc5d0\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"volumes"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"initContainers"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"containers")," \uc758 \ud544\ub4dc\uac00 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"volumes"},"volumes"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumes:\n- name: model-provision-location\n emptyDir: {}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"volumes"),"\uc740 initContainer\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\ub294 \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uae30 \uc704\ud55c \uacf5\uac04\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","array\ub85c \uc785\ub825\uc744 \ubc1b\uc73c\uba70 array\uc758 \uad6c\uc131 \uc694\uc18c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uacfc ",(0,r.kt)("inlineCode",{parentName:"p"},"emptyDir")," \uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \uac12\ub4e4\uc740 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uace0 \uc62e\uae38 \ub54c \ud55c\ubc88 \uc0ac\uc6a9\ub418\ubbc0\ub85c \ud06c\uac8c \uc218\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"initcontainer"},"initContainer"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'- name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n')),(0,r.kt)("p",null,"initContainer\ub294 API\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c \uc0ac\uc6a9\ub418\ub294 \ud544\ub4dc\ub4e4\uc740 \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ub54c \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \uc815\ud574\uc90d\ub2c8\ub2e4."),(0,r.kt)("p",null,"initContainer\uc758 \uac12\uc740 n\uac1c\uc758 array\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc73c\uba70 \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub378\ub9c8\ub2e4 \uac01\uac01 \uc9c0\uc815\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"name"},"name"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc758 pod\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub514\ubc84\uae45\uc744 \uc704\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"{model_name}-initializer")," \ub85c \uc0ac\uc6a9\ud558\uae38 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"image"},"image"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"image")," \ub294 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uae30 \uc704\ud574 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0 \uc774\ub984\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","seldon core\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \uc774\ubbf8\uc9c0\ub294 \ud06c\uac8c \ub450 \uac00\uc9c0\uc785\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"gcr.io/kfserving/storage-initializer:v0.4.0"),(0,r.kt)("li",{parentName:"ul"},"seldonio/rclone-storage-initializer:1.13.0-dev")),(0,r.kt)("p",null,"\uac01\uac01\uc758 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uc744 \ucc38\uace0 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.seldon.io/projects/seldon-core/en/latest/servers/kfserving-storage-initializer.html"},"kfserving")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core/tree/master/components/rclone-storage-initializer"},"rclone"))),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c\ub294 kfserving\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"args"},"args"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n')),(0,r.kt)("p",null,"gcr.io/kfserving/storage-initializer:v0.4.0 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\uac00 \uc2e4\ud589(",(0,r.kt)("inlineCode",{parentName:"p"},"run"),")\ub420 \ub54c \uc785\ub825\ubc1b\ub294 argument\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","array\ub85c \uad6c\uc131\ub418\uba70 \uccab \ubc88\uc9f8 array\uc758 \uac12\uc740 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ubaa8\ub378\uc758 \uc8fc\uc18c\ub97c \uc801\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub450 \ubc88\uc9f8 array\uc758 \uac12\uc740 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc8fc\uc18c\ub97c \uc801\uc2b5\ub2c8\ub2e4. (seldon core\uc5d0\uc11c\ub294 \uc8fc\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"/mnt/models"),"\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.)"),(0,r.kt)("h3",{id:"volumemounts"},"volumeMounts"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"volumneMounts"),"\ub294 volumes\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"/mnt/models"),"\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc5d0\uc11c \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d \ubcfc\ub968\uc744 \ubd99\uc5ec\uc8fc\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/storage/volumes/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 Volume"),"\uc744 \ucc38\uc870 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"container"},"container"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"containers:\n- name: model\n image: seldonio/sklearnserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n")),(0,r.kt)("p",null,"container\ub294 \uc2e4\uc81c\ub85c \ubaa8\ub378\uc774 API \ud615\uc2dd\uc73c\ub85c \uc2e4\ud589\ub420 \ub54c\uc758 \uc124\uc815\uc744 \uc815\uc758\ud558\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4. "),(0,r.kt)("h4",{id:"name-1"},"name"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc758 pod\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub378\uc758 \uc774\ub984\uc744 \uc801\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"image-1"},"image"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"image")," \ub294 \ubaa8\ub378\uc744 API\ub85c \ub9cc\ub4dc\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ubbf8\uc9c0\uc5d0\ub294 \ubaa8\ub378\uc774 \ub85c\ub4dc\ub420 \ub54c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uc774 \ubaa8\ub450 \uc124\uce58\ub418\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"Seldon Core\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \uacf5\uc2dd \uc774\ubbf8\uc9c0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"seldonio/sklearnserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/mlflowserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/xgboostserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/tfserving")),(0,r.kt)("h4",{id:"volumemounts-1"},"volumeMounts"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumeMounts:\n- mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n")),(0,r.kt)("p",null,"initContainer\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ub370\uc774\ud130\uac00 \uc788\ub294 \uacbd\ub85c\ub97c \uc54c\ub824\uc8fc\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub54c \ubaa8\ub378\uc774 \uc218\uc815\ub418\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"readOnly: true"),"\ub3c4 \uac19\uc774 \uc8fc\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"securitycontext"},"securityContext"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n")),(0,r.kt)("p",null,"\ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud560 \ub54c pod\uc774 \uad8c\ud55c\uc774 \uc5c6\uc5b4\uc11c \ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc218\ud589\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \uc704\ud574\uc11c root \uad8c\ud55c\uc744 \ubd80\uc5ec\ud569\ub2c8\ub2e4. (\ub2e4\ub9cc \uc774 \uc791\uc5c5\uc740 \uc2e4\uc81c \uc11c\ube59 \uc2dc \ubcf4\uc548 \ubb38\uc81c\uac00 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.)"),(0,r.kt)("h2",{id:"graph"},"graph"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n')),(0,r.kt)("p",null,"\ubaa8\ub378\uc774 \ub3d9\uc791\ud558\ub294 \uc21c\uc11c\ub97c \uc815\uc758\ud55c \ud544\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"name-2"},"name"),(0,r.kt)("p",null,"\ubaa8\ub378 \uadf8\ub798\ud504\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. container\uc5d0\uc11c \uc815\uc758\ub41c \uc774\ub984\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"type"},"type"),(0,r.kt)("p",null,"type\uc740 \ud06c\uac8c 4\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"TRANSFORMER"),(0,r.kt)("li",{parentName:"ol"},"MODEL"),(0,r.kt)("li",{parentName:"ol"},"OUTPUT_TRANSFORMER"),(0,r.kt)("li",{parentName:"ol"},"ROUTER")),(0,r.kt)("p",null,"\uac01 type\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.seldon.io/projects/seldon-core/en/latest/examples/graph-metadata.html"},"Seldon Core Complex Graphs Metadata Example"),"\uc744 \ucc38\uc870 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"parameters"},"parameters"),(0,r.kt)("p",null,"class init \uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \uac12\ub4e4\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","sklearnserver\uc5d0\uc11c \ud544\uc694\ud55c \uac12\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/SeldonIO/seldon-core/blob/master/servers/sklearnserver/sklearnserver/SKLearnServer.py"},"\ub2e4\uc74c \ud30c\uc77c"),"\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'class SKLearnServer(SeldonComponent):\n def __init__(self, model_uri: str = None, method: str = "predict_proba"):\n')),(0,r.kt)("p",null,"\ucf54\ub4dc\ub97c \ubcf4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"model_uri"),"\uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"method"),"\ub97c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"children"},"children"),(0,r.kt)("p",null,"\uc21c\uc11c\ub3c4\ub97c \uc791\uc131\ud560 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."))}u.isMDXComponent=!0},3438:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/seldon-fields-0-7794367220b87e1aba920b6aad6f9bf8.png"}}]); \ No newline at end of file diff --git a/assets/js/5dc48d01.290e886e.js b/assets/js/5dc48d01.290e886e.js new file mode 100644 index 00000000..7d7066a9 --- /dev/null +++ b/assets/js/5dc48d01.290e886e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2610],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>m});var n=r(7294);function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(u[r]=e[r]);return u}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(u[r]=e[r])}return u}var p=n.createContext({}),i=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},l=function(e){var t=i(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,u=e.mdxType,s=e.originalType,p=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),c=i(r),k=u,m=c["".concat(p,".").concat(k)]||c[k]||b[k]||s;return r?n.createElement(m,o(o({ref:t},l),{},{components:r})):n.createElement(m,o({ref:t},l))}));function m(e,t){var r=arguments,u=t&&t.mdxType;if("string"==typeof e||u){var s=r.length,o=new Array(s);o[0]=k;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[c]="string"==typeof e?e:u,o[1]=a;for(var i=2;i{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>b,frontMatter:()=>s,metadata:()=>a,toc:()=>i});var n=r(7462),u=(r(7294),r(3905));const s={title:"2. Setup Kubernetes",description:"Setup Kubernetes",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,a={unversionedId:"setup-kubernetes/kubernetes",id:"setup-kubernetes/kubernetes",title:"2. Setup Kubernetes",description:"Setup Kubernetes",source:"@site/docs/setup-kubernetes/kubernetes.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/kubernetes",permalink:"/docs/setup-kubernetes/kubernetes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/kubernetes.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Setup Kubernetes",description:"Setup Kubernetes",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Introduction",permalink:"/docs/setup-kubernetes/intro"},next:{title:"3. Install Prerequisite",permalink:"/docs/setup-kubernetes/install-prerequisite"}},p={},i=[{value:"Setup Kubernetes Cluster",id:"setup-kubernetes-cluster",level:2}],l={toc:i},c="wrapper";function b(e){let{components:t,...r}=e;return(0,u.kt)(c,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,u.kt)("h2",{id:"setup-kubernetes-cluster"},"Setup Kubernetes Cluster"),(0,u.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \ucc98\uc74c \ubc30\uc6b0\uc2dc\ub294 \ubd84\ub4e4\uc5d0\uac8c \uccab \uc9c4\uc785 \uc7a5\ubcbd\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc2e4\uc2b5 \ud658\uacbd\uc744 \uad6c\ucd95\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,u.kt)("p",null,"\ud504\ub85c\ub355\uc158 \ub808\ubca8\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \uc218 \uc788\uac8c \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\ub294 \ub3c4\uad6c\ub294 kubeadm \uc774\uc9c0\ub9cc, \uc0ac\uc6a9\uc790\ub4e4\uc774 \uc870\uae08 \ub354 \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 kubespray, kops \ub4f1\uc758 \ub3c4\uad6c\ub3c4 \uc874\uc7ac\ud558\uba70, \ud559\uc2b5 \ubaa9\uc801\uc744 \uc704\ud574\uc11c \ucef4\ud329\ud2b8\ud55c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uc815\ub9d0 \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 k3s, minikube, microk8s, kind \ub4f1\uc758 \ub3c4\uad6c\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,u.kt)("p",null,"\uac01\uac01\uc758 \ub3c4\uad6c\ub294 \uc7a5\ub2e8\uc810\uc774 \ub2e4\ub974\uae30\uc5d0 \uc0ac\uc6a9\uc790\ub9c8\ub2e4 \uc120\ud638\ud558\ub294 \ub3c4\uad6c\uac00 \ub2e4\ub978 \uc810\uc744 \uace0\ub824\ud558\uc5ec, \ubcf8 \uae00\uc5d0\uc11c\ub294 kubeadm, k3s, minikube\uc758 3\uac00\uc9c0 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud558\uc5ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.\n\uac01 \ub3c4\uad6c\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ube44\uad50\ub294 \ub2e4\uc74c \ucfe0\ubc84\ub124\ud2f0\uc2a4 ",(0,u.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/tasks/tools/"},"\uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ud655\uc778\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,u.kt)("p",null,(0,u.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \ud234\uc740 ",(0,u.kt)("strong",{parentName:"p"},"k3s"),"\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \ub54c \uc27d\uac8c \ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.",(0,u.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0 \ub178\ub4dc \uad6c\uc131\uae4c\uc9c0 \ud65c\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 ",(0,u.kt)("strong",{parentName:"p"},"kubeadm"),"\uc744 \uad8c\uc7a5\ud574 \ub4dc\ub9bd\ub2c8\ub2e4.",(0,u.kt)("br",{parentName:"p"}),"\n",(0,u.kt)("strong",{parentName:"p"},"minikube")," \ub294 \uc800\ud76c\uac00 \uc124\uba85\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8 \uc678\uc5d0\ub3c4 \ub2e4\ub978 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c add-on \ud615\uc2dd\uc73c\ub85c \uc27d\uac8c \uc124\uce58\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,u.kt)("p",null,"\ubcf8 ",(0,u.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uad6c\ucd95\ud558\uac8c \ub420 MLOps \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 \uc6d0\ud65c\ud788 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, \uac01\uac01\uc758 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \ub54c, \ucd94\uac00\ub85c \uc124\uc815\ud574 \uc8fc\uc5b4\uc57c \ud558\ub294 \ubd80\ubd84\uc774 \ucd94\uac00\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,u.kt)("p",null,"Ubuntu OS\uae4c\uc9c0\ub294 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud0d1\uc744 k8s cluster\ub85c \uad6c\ucd95\ud55c \ub4a4, \uc678\ubd80 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc811\uadfc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud558\ub294 \uac83\uae4c\uc9c0\uac00 \ubcf8 ",(0,u.kt)("strong",{parentName:"p"},"Setup Kubernetes"),"\ub2e8\uc6d0\uc758 \ubc94\uc704\uc785\ub2c8\ub2e4."),(0,u.kt)("p",null,"\uc790\uc138\ud55c \uad6c\ucd95 \ubc29\ubc95\uc740 3\uac00\uc9c0 \ub3c4\uad6c\ub9c8\ub2e4 \ub2e4\ub974\uae30\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ud750\ub984\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,u.kt)("pre",null,(0,u.kt)("code",{parentName:"pre",className:"language-bash"},"3. Setup Prerequisite\n4. Setup Kubernetes\n 4.1. with k3s\n 4.2. with minikube\n 4.3. with kubeadm\n5. Setup Kubernetes Modules\n")),(0,u.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uac01\uac01\uc758 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ubc18\ub4dc\uc2dc \ubaa8\ub4e0 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud574 \ubcfc \ud544\uc694\ub294 \uc5c6\uc73c\uba70, \uc774 \uc911 \uc5ec\ub7ec\ubd84\uc774 \uc775\uc219\ud558\uc2e0 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574\uc8fc\uc2dc\uba74 \ucda9\ubd84\ud569\ub2c8\ub2e4."))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6016bee0.a1b85c75.js b/assets/js/6016bee0.a1b85c75.js new file mode 100644 index 00000000..94385709 --- /dev/null +++ b/assets/js/6016bee0.a1b85c75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2349],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=s(n),m=o,f=c["".concat(p,".").concat(m)]||c[m]||u[m]||a;return n?r.createElement(f,l(l({ref:t},d),{},{components:n})):r.createElement(f,l({ref:t},d))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:o,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",sidebar_position:3,date:new Date("2021-12-24T00:00:00.000Z"),lastmod:new Date("2021-12-24T00:00:00.000Z"),contributors:["Jongseob Jeon"]},l=void 0,i={unversionedId:"api-deployment/seldon-pg",id:"version-1.0/api-deployment/seldon-pg",title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-pg.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-pg",permalink:"/docs/1.0/api-deployment/seldon-pg",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-pg.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",sidebar_position:3,date:"2021-12-24T00:00:00.000Z",lastmod:"2021-12-24T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"2. Deploy SeldonDeployment",permalink:"/docs/1.0/api-deployment/seldon-iris"},next:{title:"4. Seldon Fields",permalink:"/docs/1.0/api-deployment/seldon-fields"}},p={},s=[{value:"Grafana & Prometheus",id:"grafana--prometheus",level:2},{value:"\ub300\uc2dc\ubcf4\ub4dc",id:"\ub300\uc2dc\ubcf4\ub4dc",level:3},{value:"API \uc694\uccad",id:"api-\uc694\uccad",level:3}],d={toc:s},c="wrapper";function u(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"grafana--prometheus"},"Grafana & Prometheus"),(0,o.kt)("p",null,"\uc774\uc81c, ",(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/api-deployment/seldon-iris"},"\uc9c0\ub09c \ud398\uc774\uc9c0"),"\uc5d0\uc11c \uc0dd\uc131\ud588\ub358 SeldonDeployment \ub85c API Request \ub97c \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud574\ubcf4\uace0, \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \ubcc0\ud654\uac00 \uc77c\uc5b4\ub098\ub294\uc9c0 \ud655\uc778\ud574\ubd05\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"\ub300\uc2dc\ubcf4\ub4dc"},"\ub300\uc2dc\ubcf4\ub4dc"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-pg"},"\uc55e\uc11c \uc0dd\uc131\ud55c \ub300\uc2dc\ubcf4\ub4dc"),"\ub97c \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/seldon-core-analytics-grafana -n seldon-system 8090:80\n")),(0,o.kt)("h3",{id:"api-\uc694\uccad"},"API \uc694\uccad"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/api-deployment/seldon-iris#using-cli"},"\uc55e\uc11c \uc0dd\uc131\ud55c Seldon Deployment"),"\uc5d0 \uc694\uccad\uc744 ",(0,o.kt)("strong",{parentName:"p"},"\ubc18\ubcf5\ud574\uc11c")," \ubcf4\ub0c5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H 'Content-Type: application/json' \\\n-d '{ \"data\": { \"ndarray\": [[1,2,3,4]] } }'\n")),(0,o.kt)("p",null,"\uadf8\ub9ac\uace0 \uadf8\ub77c\ud30c\ub098 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 Global Request Rate \uc774 ",(0,o.kt)("inlineCode",{parentName:"p"},"0 ops")," \uc5d0\uc11c \uc21c\uac04\uc801\uc73c\ub85c \uc0c1\uc2b9\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"repeat-raise.png",src:n(147).Z,width:"5016",height:"2826"})),(0,o.kt)("p",null,"\uc774\ub807\uac8c \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}u.isMDXComponent=!0},147:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/repeat-raise-60a3d043d2ac70549160aa936b4bed46.png"}}]); \ No newline at end of file diff --git a/assets/js/6016bee0.a3d78bad.js b/assets/js/6016bee0.a3d78bad.js deleted file mode 100644 index 02b286e8..00000000 --- a/assets/js/6016bee0.a3d78bad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2349],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=s(n),m=o,f=c["".concat(p,".").concat(m)]||c[m]||u[m]||a;return n?r.createElement(f,l(l({ref:t},d),{},{components:n})):r.createElement(f,l({ref:t},d))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:o,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",sidebar_position:3,date:new Date("2021-12-24T00:00:00.000Z"),lastmod:new Date("2021-12-24T00:00:00.000Z"),contributors:["Jongseob Jeon"]},l=void 0,i={unversionedId:"api-deployment/seldon-pg",id:"version-1.0/api-deployment/seldon-pg",title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-pg.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-pg",permalink:"/docs/1.0/api-deployment/seldon-pg",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-pg.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",sidebar_position:3,date:"2021-12-24T00:00:00.000Z",lastmod:"2021-12-24T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"2. Deploy SeldonDeployment",permalink:"/docs/1.0/api-deployment/seldon-iris"},next:{title:"4. Seldon Fields",permalink:"/docs/1.0/api-deployment/seldon-fields"}},p={},s=[{value:"Grafana & Prometheus",id:"grafana--prometheus",level:2},{value:"\ub300\uc2dc\ubcf4\ub4dc",id:"\ub300\uc2dc\ubcf4\ub4dc",level:3},{value:"API \uc694\uccad",id:"api-\uc694\uccad",level:3}],d={toc:s},c="wrapper";function u(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"grafana--prometheus"},"Grafana & Prometheus"),(0,o.kt)("p",null,"\uc774\uc81c, ",(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/api-deployment/seldon-iris"},"\uc9c0\ub09c \ud398\uc774\uc9c0"),"\uc5d0\uc11c \uc0dd\uc131\ud588\ub358 SeldonDeployment \ub85c API Request \ub97c \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud574\ubcf4\uace0, \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \ubcc0\ud654\uac00 \uc77c\uc5b4\ub098\ub294\uc9c0 \ud655\uc778\ud574\ubd05\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"\ub300\uc2dc\ubcf4\ub4dc"},"\ub300\uc2dc\ubcf4\ub4dc"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-pg"},"\uc55e\uc11c \uc0dd\uc131\ud55c \ub300\uc2dc\ubcf4\ub4dc"),"\ub97c \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/seldon-core-analytics-grafana -n seldon-system 8090:80\n")),(0,o.kt)("h3",{id:"api-\uc694\uccad"},"API \uc694\uccad"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/api-deployment/seldon-iris#using-cli"},"\uc55e\uc11c \uc0dd\uc131\ud55c Seldon Deployment"),"\uc5d0 \uc694\uccad\uc744 ",(0,o.kt)("strong",{parentName:"p"},"\ubc18\ubcf5\ud574\uc11c")," \ubcf4\ub0c5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H 'Content-Type: application/json' \\\n-d '{ \"data\": { \"ndarray\": [[1,2,3,4]] } }'\n")),(0,o.kt)("p",null,"\uadf8\ub9ac\uace0 \uadf8\ub77c\ud30c\ub098 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 Global Request Rate \uc774 ",(0,o.kt)("inlineCode",{parentName:"p"},"0 ops")," \uc5d0\uc11c \uc21c\uac04\uc801\uc73c\ub85c \uc0c1\uc2b9\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"repeat-raise.png",src:n(147).Z,width:"5016",height:"2826"})),(0,o.kt)("p",null,"\uc774\ub807\uac8c \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}u.isMDXComponent=!0},147:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/repeat-raise-60a3d043d2ac70549160aa936b4bed46.png"}}]); \ No newline at end of file diff --git a/assets/js/6246222d.35293846.js b/assets/js/6246222d.35293846.js new file mode 100644 index 00000000..194c39e8 --- /dev/null +++ b/assets/js/6246222d.35293846.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[728],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>b});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=p(t),u=o,b=c["".concat(i,".").concat(u)]||c[u]||m[u]||s;return t?a.createElement(b,r(r({ref:n},d),{},{components:t})):a.createElement(b,r({ref:n},d))}));function b(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var s=t.length,r=new Array(s);r[0]=u;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l[c]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>r,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var a=t(7462),o=(t(7294),t(3905));const s={title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},r=void 0,l={unversionedId:"setup-components/install-components-seldon",id:"version-1.0/setup-components/install-components-seldon",title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",source:"@site/versioned_docs/version-1.0/setup-components/install-components-seldon.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-seldon",permalink:"/docs/1.0/setup-components/install-components-seldon",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-components/install-components-seldon.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"2. MLflow Tracking Server",permalink:"/docs/1.0/setup-components/install-components-mlflow"},next:{title:"4. Prometheus & Grafana",permalink:"/docs/1.0/setup-components/install-components-pg"}},i={},p=[{value:"Seldon-Core",id:"seldon-core",level:2},{value:"Selon-Core \uc124\uce58",id:"selon-core-\uc124\uce58",level:2},{value:"Ambassador - Helm Repository \ucd94\uac00",id:"ambassador---helm-repository-\ucd94\uac00",level:3},{value:"Ambassador - Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"ambassador---helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Ambassador - Helm Install",id:"ambassador---helm-install",level:3},{value:"Seldon-Core - Helm Install",id:"seldon-core---helm-install",level:3},{value:"References",id:"references",level:2}],d={toc:p},c="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(c,(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"seldon-core"},"Seldon-Core"),(0,o.kt)("p",null,"Seldon-Core\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd\uc5d0 \uc218\ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uc624\ud508\uc18c\uc2a4 \ud504\ub808\uc784\uc6cc\ud06c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 Seldon-Core \uc758 \uacf5\uc2dd ",(0,o.kt)("a",{parentName:"p",href:"https://www.seldon.io/tech/products/core/"},"\uc81c\ud488 \uc124\uba85 \ud398\uc774\uc9c0")," \uc640 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/SeldonIO/seldon-core"},"\uae43\ud5d9")," \uadf8\ub9ac\uace0 API Deployment \ud30c\ud2b8\ub97c \ucc38\uace0\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"selon-core-\uc124\uce58"},"Selon-Core \uc124\uce58"),(0,o.kt)("p",null,"Seldon-Core\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \uc778\uadf8\ub808\uc2a4(Ingress)\ub97c \ub2f4\ub2f9\ud558\ub294 Ambassador \uc640 Istio \uc640 \uac19\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html"},"\ubaa8\ub4c8\uc774 \ud544\uc694\ud569\ub2c8\ub2e4"),".",(0,o.kt)("br",{parentName:"p"}),"\n","Seldon-Core \uc5d0\uc11c\ub294 Ambassador \uc640 Istio \ub9cc\uc744 \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\uba70, ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 Ambassador\ub97c \uc0ac\uc6a9\ud574 Seldon-core\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c Ambassador\ub97c \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"ambassador---helm-repository-\ucd94\uac00"},"Ambassador - Helm Repository \ucd94\uac00"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add datawire https://www.getambassador.io\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'"datawire" has been added to your repositories\n')),(0,o.kt)("h3",{id:"ambassador---helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Ambassador - Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "datawire" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,o.kt)("h3",{id:"ambassador---helm-install"},"Ambassador - Helm Install"),(0,o.kt)("p",null,"ambassador Chart 6.9.3 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm install ambassador datawire/ambassador \\\n --namespace seldon-system \\\n --create-namespace \\\n --set image.repository=quay.io/datawire/ambassador \\\n --set enableAES=false \\\n --set crds.keep=false \\\n --version 6.9.3\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\n\nW1206 17:01:36.026326 26635 warnings.go:70] rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role\nW1206 17:01:36.029764 26635 warnings.go:70] rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding\nNAME: ambassador\nLAST DEPLOYED: Mon Dec 6 17:01:34 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\nNOTES:\n-------------------------------------------------------------------------------\n Congratulations! You've successfully installed Ambassador!\n\n-------------------------------------------------------------------------------\nTo get the IP address of Ambassador, run the following commands:\nNOTE: It may take a few minutes for the LoadBalancer IP to be available.\n You can watch the status of by running 'kubectl get svc -w --namespace seldon-system ambassador'\n\n On GKE/Azure:\n export SERVICE_IP=$(kubectl get svc --namespace seldon-system ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n\n On AWS:\n export SERVICE_IP=$(kubectl get svc --namespace seldon-system ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n\n echo http://$SERVICE_IP:\n\nFor help, visit our Slack at http://a8r.io/Slack or view the documentation online at https://www.getambassador.io.\n")),(0,o.kt)("p",null,"seldon-system \uc5d0 4 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"ambassador-7f596c8b57-4s9xh 1/1 Running 0 7m15s\nambassador-7f596c8b57-dt6lr 1/1 Running 0 7m15s\nambassador-7f596c8b57-h5l6f 1/1 Running 0 7m15s\nambassador-agent-77bccdfcd5-d5jxj 1/1 Running 0 7m15s\n")),(0,o.kt)("h3",{id:"seldon-core---helm-install"},"Seldon-Core - Helm Install"),(0,o.kt)("p",null,"seldon-core-operator Chart 1.11.2 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm install seldon-core seldon-core-operator \\\n --repo https://storage.googleapis.com/seldon-charts \\\n --namespace seldon-system \\\n --set usageMetrics.enabled=true \\\n --set ambassador.enabled=true \\\n --version 1.11.2\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\n\nW1206 17:05:38.336391 28181 warnings.go:70] admissionregistration.k8s.io/v1beta1 ValidatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration\nNAME: seldon-core\nLAST DEPLOYED: Mon Dec 6 17:05:34 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\n")),(0,o.kt)("p",null,"seldon-system namespace \uc5d0 1 \uac1c\uc758 seldon-controller-manager pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system | grep seldon-controller\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-controller-manager-8457b8b5c7-r2frm 1/1 Running 0 2m22s\n")),(0,o.kt)("h2",{id:"references"},"References"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.seldon.io/projects/seldon-core/en/latest/examples/server_examples.html#examples-server-examples--page-root"},"Example Model Servers with Seldon"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6246222d.9f3328d6.js b/assets/js/6246222d.9f3328d6.js deleted file mode 100644 index 0634dd1a..00000000 --- a/assets/js/6246222d.9f3328d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[728],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>b});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,s=e.originalType,i=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=p(t),u=o,b=c["".concat(i,".").concat(u)]||c[u]||m[u]||s;return t?a.createElement(b,r(r({ref:n},d),{},{components:t})):a.createElement(b,r({ref:n},d))}));function b(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var s=t.length,r=new Array(s);r[0]=u;var l={};for(var i in n)hasOwnProperty.call(n,i)&&(l[i]=n[i]);l.originalType=e,l[c]="string"==typeof e?e:o,r[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>r,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>p});var a=t(7462),o=(t(7294),t(3905));const s={title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},r=void 0,l={unversionedId:"setup-components/install-components-seldon",id:"version-1.0/setup-components/install-components-seldon",title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",source:"@site/versioned_docs/version-1.0/setup-components/install-components-seldon.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-seldon",permalink:"/docs/1.0/setup-components/install-components-seldon",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-components/install-components-seldon.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Seldon-Core",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Seldon-Core",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"2. MLflow Tracking Server",permalink:"/docs/1.0/setup-components/install-components-mlflow"},next:{title:"4. Prometheus & Grafana",permalink:"/docs/1.0/setup-components/install-components-pg"}},i={},p=[{value:"Seldon-Core",id:"seldon-core",level:2},{value:"Selon-Core \uc124\uce58",id:"selon-core-\uc124\uce58",level:2},{value:"Ambassador - Helm Repository \ucd94\uac00",id:"ambassador---helm-repository-\ucd94\uac00",level:3},{value:"Ambassador - Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"ambassador---helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Ambassador - Helm Install",id:"ambassador---helm-install",level:3},{value:"Seldon-Core - Helm Install",id:"seldon-core---helm-install",level:3},{value:"References",id:"references",level:2}],d={toc:p},c="wrapper";function m(e){let{components:n,...t}=e;return(0,o.kt)(c,(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"seldon-core"},"Seldon-Core"),(0,o.kt)("p",null,"Seldon-Core\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd\uc5d0 \uc218\ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uc624\ud508\uc18c\uc2a4 \ud504\ub808\uc784\uc6cc\ud06c \uc911 \ud558\ub098\uc785\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 Seldon-Core \uc758 \uacf5\uc2dd ",(0,o.kt)("a",{parentName:"p",href:"https://www.seldon.io/tech/products/core/"},"\uc81c\ud488 \uc124\uba85 \ud398\uc774\uc9c0")," \uc640 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/SeldonIO/seldon-core"},"\uae43\ud5d9")," \uadf8\ub9ac\uace0 API Deployment \ud30c\ud2b8\ub97c \ucc38\uace0\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"selon-core-\uc124\uce58"},"Selon-Core \uc124\uce58"),(0,o.kt)("p",null,"Seldon-Core\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \uc778\uadf8\ub808\uc2a4(Ingress)\ub97c \ub2f4\ub2f9\ud558\ub294 Ambassador \uc640 Istio \uc640 \uac19\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://docs.seldon.io/projects/seldon-core/en/latest/workflow/install.html"},"\ubaa8\ub4c8\uc774 \ud544\uc694\ud569\ub2c8\ub2e4"),".",(0,o.kt)("br",{parentName:"p"}),"\n","Seldon-Core \uc5d0\uc11c\ub294 Ambassador \uc640 Istio \ub9cc\uc744 \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\uba70, ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 Ambassador\ub97c \uc0ac\uc6a9\ud574 Seldon-core\ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c Ambassador\ub97c \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"ambassador---helm-repository-\ucd94\uac00"},"Ambassador - Helm Repository \ucd94\uac00"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add datawire https://www.getambassador.io\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'"datawire" has been added to your repositories\n')),(0,o.kt)("h3",{id:"ambassador---helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Ambassador - Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "datawire" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,o.kt)("h3",{id:"ambassador---helm-install"},"Ambassador - Helm Install"),(0,o.kt)("p",null,"ambassador Chart 6.9.3 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm install ambassador datawire/ambassador \\\n --namespace seldon-system \\\n --create-namespace \\\n --set image.repository=quay.io/datawire/ambassador \\\n --set enableAES=false \\\n --set crds.keep=false \\\n --version 6.9.3\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\n\nW1206 17:01:36.026326 26635 warnings.go:70] rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role\nW1206 17:01:36.029764 26635 warnings.go:70] rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding\nNAME: ambassador\nLAST DEPLOYED: Mon Dec 6 17:01:34 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\nNOTES:\n-------------------------------------------------------------------------------\n Congratulations! You've successfully installed Ambassador!\n\n-------------------------------------------------------------------------------\nTo get the IP address of Ambassador, run the following commands:\nNOTE: It may take a few minutes for the LoadBalancer IP to be available.\n You can watch the status of by running 'kubectl get svc -w --namespace seldon-system ambassador'\n\n On GKE/Azure:\n export SERVICE_IP=$(kubectl get svc --namespace seldon-system ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')\n\n On AWS:\n export SERVICE_IP=$(kubectl get svc --namespace seldon-system ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n\n echo http://$SERVICE_IP:\n\nFor help, visit our Slack at http://a8r.io/Slack or view the documentation online at https://www.getambassador.io.\n")),(0,o.kt)("p",null,"seldon-system \uc5d0 4 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"ambassador-7f596c8b57-4s9xh 1/1 Running 0 7m15s\nambassador-7f596c8b57-dt6lr 1/1 Running 0 7m15s\nambassador-7f596c8b57-h5l6f 1/1 Running 0 7m15s\nambassador-agent-77bccdfcd5-d5jxj 1/1 Running 0 7m15s\n")),(0,o.kt)("h3",{id:"seldon-core---helm-install"},"Seldon-Core - Helm Install"),(0,o.kt)("p",null,"seldon-core-operator Chart 1.11.2 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"helm install seldon-core seldon-core-operator \\\n --repo https://storage.googleapis.com/seldon-charts \\\n --namespace seldon-system \\\n --set usageMetrics.enabled=true \\\n --set ambassador.enabled=true \\\n --version 1.11.2\n")),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\n\nW1206 17:05:38.336391 28181 warnings.go:70] admissionregistration.k8s.io/v1beta1 ValidatingWebhookConfiguration is deprecated in v1.16+, unavailable in v1.22+; use admissionregistration.k8s.io/v1 ValidatingWebhookConfiguration\nNAME: seldon-core\nLAST DEPLOYED: Mon Dec 6 17:05:34 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\nTEST SUITE: None\n")),(0,o.kt)("p",null,"seldon-system namespace \uc5d0 1 \uac1c\uc758 seldon-controller-manager pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system | grep seldon-controller\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-controller-manager-8457b8b5c7-r2frm 1/1 Running 0 2m22s\n")),(0,o.kt)("h2",{id:"references"},"References"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://docs.seldon.io/projects/seldon-core/en/latest/examples/server_examples.html#examples-server-examples--page-root"},"Example Model Servers with Seldon"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/68f81397.1639e2c9.js b/assets/js/68f81397.b43c4224.js similarity index 60% rename from assets/js/68f81397.1639e2c9.js rename to assets/js/68f81397.b43c4224.js index 2bbcf4b8..520a511d 100644 --- a/assets/js/68f81397.1639e2c9.js +++ b/assets/js/68f81397.b43c4224.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2603],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"5. Experiments(AutoML)",description:"",sidebar_position:5,contributors:["Jaeyeon Kim"]},i=void 0,s={unversionedId:"kubeflow-dashboard-guide/experiments",id:"kubeflow-dashboard-guide/experiments",title:"5. Experiments(AutoML)",description:"",source:"@site/docs/kubeflow-dashboard-guide/experiments.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/experiments",permalink:"/docs/kubeflow-dashboard-guide/experiments",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/experiments.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"5. Experiments(AutoML)",description:"",sidebar_position:5,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Volumes",permalink:"/docs/kubeflow-dashboard-guide/volumes"},next:{title:"6. Kubeflow Pipeline \uad00\ub828",permalink:"/docs/kubeflow-dashboard-guide/experiments-and-others"}},l={},p=[],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Experiments(AutoML)\uc744 \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"automl",src:r(7274).Z,width:"1498",height:"272"})),(0,o.kt)("p",null,"Experiments(AutoML) \ud398\uc774\uc9c0\ub294 Kubeflow\uc5d0\uc11c Hyperparameter Tuning\uacfc Neural Architecture Search\ub97c \ud1b5\ud55c AutoML\uc744 \ub2f4\ub2f9\ud558\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/katib/overview/"},"Katib"),"\ub97c \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"Katib\uc640 Experiments(AutoML)\uc5d0 \ub300\ud55c \uc0ac\uc6a9\ubc95\uc740 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," v1.0\uc5d0\uc11c\ub294 \ub2e4\ub8e8\uc9c0 \uc54a\uc73c\uba70, v2.0\uc5d0 \ucd94\uac00\ub420 \uc608\uc815\uc785\ub2c8\ub2e4."))}d.isMDXComponent=!0},7274:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/automl-7f762c2c67e5319953ec8567769722fb.png"},7511:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2603],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"5. Experiments(AutoML)",description:"",sidebar_position:5,contributors:["Jaeyeon Kim"]},i=void 0,s={unversionedId:"kubeflow-dashboard-guide/experiments",id:"kubeflow-dashboard-guide/experiments",title:"5. Experiments(AutoML)",description:"",source:"@site/docs/kubeflow-dashboard-guide/experiments.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/experiments",permalink:"/docs/kubeflow-dashboard-guide/experiments",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/experiments.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"5. Experiments(AutoML)",description:"",sidebar_position:5,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Volumes",permalink:"/docs/kubeflow-dashboard-guide/volumes"},next:{title:"6. Kubeflow Pipeline \uad00\ub828",permalink:"/docs/kubeflow-dashboard-guide/experiments-and-others"}},l={},p=[],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Experiments(AutoML)\uc744 \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"automl",src:r(7274).Z,width:"1498",height:"272"})),(0,o.kt)("p",null,"Experiments(AutoML) \ud398\uc774\uc9c0\ub294 Kubeflow\uc5d0\uc11c Hyperparameter Tuning\uacfc Neural Architecture Search\ub97c \ud1b5\ud55c AutoML\uc744 \ub2f4\ub2f9\ud558\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/katib/overview/"},"Katib"),"\ub97c \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"Katib\uc640 Experiments(AutoML)\uc5d0 \ub300\ud55c \uc0ac\uc6a9\ubc95\uc740 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," v1.0\uc5d0\uc11c\ub294 \ub2e4\ub8e8\uc9c0 \uc54a\uc73c\uba70, v2.0\uc5d0 \ucd94\uac00\ub420 \uc608\uc815\uc785\ub2c8\ub2e4."))}d.isMDXComponent=!0},7274:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/automl-7f762c2c67e5319953ec8567769722fb.png"},7511:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file diff --git a/assets/js/6b57b422.11a6dccf.js b/assets/js/6b57b422.11a6dccf.js deleted file mode 100644 index 07c0bf39..00000000 --- a/assets/js/6b57b422.11a6dccf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8449],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),i=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=i(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=i(n),m=r,h=d["".concat(p,".").concat(m)]||d[m]||u[m]||l;return n?a.createElement(h,o(o({ref:t},c),{},{components:n})):a.createElement(h,o({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:r,o[1]=s;for(var i=2;i{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>s,toc:()=>i});var a=n(7462),r=(n(7294),n(3905));const l={title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",sidebar_position:4,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,s={unversionedId:"setup-components/install-components-pg",id:"setup-components/install-components-pg",title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",source:"@site/docs/setup-components/install-components-pg.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-pg",permalink:"/docs/setup-components/install-components-pg",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-components/install-components-pg.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",sidebar_position:4,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Seldon-Core",permalink:"/docs/setup-components/install-components-seldon"},next:{title:"1. Central Dashboard",permalink:"/docs/kubeflow-dashboard-guide/intro"}},p={},i=[{value:"Prometheus & Grafana",id:"prometheus--grafana",level:2},{value:"Helm Repository \ucd94\uac00",id:"helm-repository-\ucd94\uac00",level:3},{value:"Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Helm Install",id:"helm-install",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:3},{value:"References",id:"references",level:2}],c={toc:i},d="wrapper";function u(e){let{components:t,...l}=e;return(0,r.kt)(d,(0,a.Z)({},c,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"prometheus--grafana"},"Prometheus & Grafana"),(0,r.kt)("p",null,"\ud504\ub85c\uba54\ud14c\uc6b0\uc2a4(Prometheus) \uc640 \uadf8\ub77c\ud30c\ub098(Grafana) \ub294 \ubaa8\ub2c8\ud130\ub9c1\uc744 \uc704\ud55c \ub3c4\uad6c\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc548\uc815\uc801\uc778 \uc11c\ube44\uc2a4 \uc6b4\uc601\uc744 \uc704\ud574\uc11c\ub294 \uc11c\ube44\uc2a4\uc640 \uc11c\ube44\uc2a4\uac00 \uc6b4\uc601\ub418\uace0 \uc788\ub294 \uc778\ud504\ub77c\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\ud574\uc11c \uad00\ucc30\ud558\uace0, \uad00\ucc30\ud55c \uba54\ud2b8\ub9ad\uc744 \ubc14\ud0d5\uc73c\ub85c \ubb38\uc81c\uac00 \uc0dd\uae38 \ub54c \ube60\ub974\uac8c \ub300\uc751\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ubaa8\ub2c8\ud130\ub9c1\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc218\ud589\ud558\uae30 \uc704\ud55c \ub9ce\uc740 \ub3c4\uad6c \uc911 ",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc624\ud508\uc18c\uc2a4\uc778 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://prometheus.io/docs/introduction/overview/"},"Prometheus \uacf5\uc2dd \ubb38\uc11c"),", ",(0,r.kt)("a",{parentName:"p",href:"https://grafana.com/docs/"},"Grafana \uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ud655\uc778\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\ub294 \ub2e4\uc591\ud55c \ub300\uc0c1\uc73c\ub85c\ubd80\ud130 Metric\uc744 \uc218\uc9d1\ud558\ub294 \ub3c4\uad6c\uc774\uba70, \uadf8\ub77c\ud30c\ub098\ub294 \ubaa8\uc778 \ub370\uc774\ud130\ub97c \uc2dc\uac01\ud654\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc11c\ub85c \uac04\uc758 \uc885\uc18d\uc131\uc740 \uc5c6\uc9c0\ub9cc \uc0c1\ud638 \ubcf4\uc644\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5b4 \ud568\uaed8 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc124\uce58\ud55c \ub4a4, Seldon-Core \ub85c \uc0dd\uc131\ud55c SeldonDeployment \ub85c API \uc694\uccad\uc744 \ubcf4\ub0b4, \uc815\uc0c1\uc801\uc73c\ub85c Metrics \uc774 \uc218\uc9d1\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ubcf8 \uae00\uc5d0\uc11c\ub294 seldonio/seldon-core-analytics Helm Chart 1.12.0 \ubc84\uc804\uc744 \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc124\uce58\ud558\uace0, Seldon-Core \uc5d0\uc11c \uc0dd\uc131\ud55c SeldonDeployment\uc758 Metrics \uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ud655\uc778\ud558\uae30 \uc704\ud55c \ub300\uc2dc\ubcf4\ub4dc\ub3c4 \ud568\uaed8 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"helm-repository-\ucd94\uac00"},"Helm Repository \ucd94\uac00"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add seldonio https://storage.googleapis.com/seldon-charts\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'"seldonio" has been added to your repositories\n')),(0,r.kt)("h3",{id:"helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "seldonio" chart repository\n...Successfully got an update from the "datawire" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,r.kt)("h3",{id:"helm-install"},"Helm Install"),(0,r.kt)("p",null,"seldon-core-analytics Helm Chart 1.12.0 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm install seldon-core-analytics seldonio/seldon-core-analytics \\\n --namespace seldon-system \\\n --version 1.12.0\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\nNAME: seldon-core-analytics\nLAST DEPLOYED: Tue Dec 14 18:29:38 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system | grep seldon-core-analytics\n")),(0,r.kt)("p",null,"seldon-system namespace \uc5d0 6\uac1c\uc758 seldon-core-analytics \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-core-analytics-grafana-657c956c88-ng8wn 2/2 Running 0 114s\nseldon-core-analytics-kube-state-metrics-94bb6cb9-svs82 1/1 Running 0 114s\nseldon-core-analytics-prometheus-alertmanager-64cf7b8f5-nxbl8 2/2 Running 0 114s\nseldon-core-analytics-prometheus-node-exporter-5rrj5 1/1 Running 0 114s\nseldon-core-analytics-prometheus-pushgateway-8476474cff-sr4n6 1/1 Running 0 114s\nseldon-core-analytics-prometheus-seldon-685c664894-7cr45 2/2 Running 0 114s\n")),(0,r.kt)("h3",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uadf8\ub77c\ud30c\ub098\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc811\uc18d\ud558\uae30 \uc704\ud574, \ud3ec\ud2b8\ud3ec\uc6cc\ub529\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/seldon-core-analytics-grafana -n seldon-system 8090:80\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:8090"},"localhost:8090"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"grafana-install",src:n(1030).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc811\uc18d\uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Email or username : ",(0,r.kt)("inlineCode",{parentName:"li"},"admin")),(0,r.kt)("li",{parentName:"ul"},"Password : ",(0,r.kt)("inlineCode",{parentName:"li"},"password"))),(0,r.kt)("p",null,"\ub85c\uadf8\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"grafana-login",src:n(8234).Z,width:"3640",height:"2140"})),(0,r.kt)("p",null,"\uc88c\uce21\uc758 \ub300\uc2dc\ubcf4\ub4dc \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"Manage")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dashboard-click",src:n(1502).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"\uae30\ubcf8\uc801\uc778 \uadf8\ub77c\ud30c\ub098 \ub300\uc2dc\ubcf4\ub4dc\uac00 \ud3ec\ud568\ub418\uc5b4\uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"Prediction Analytics")," \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dashboard",src:n(4231).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"Seldon Core API Dashboard \uac00 \ubcf4\uc774\uace0, \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"seldon-dashboard",src:n(9803).Z,width:"5016",height:"2826"})),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core/tree/master/helm-charts/seldon-core-analytics"},"Seldon-Core-Analytics Helm Chart"))))}u.isMDXComponent=!0},1502:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dashboard-click-868bcd267717917295a8f9627d6c522e.png"},4231:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dashboard-ee3d0192807699b2515d184ff00f426d.png"},1030:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/grafana-install-4ca59cc00fad5ee1a50d91f30ab89bb1.png"},8234:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/grafana-login-b91326a2a0082ffb560ad1b30d381091.png"},9803:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/seldon-dashboard-01eccd6a30aac640474edef01050d277.png"}}]); \ No newline at end of file diff --git a/assets/js/6b57b422.a399220f.js b/assets/js/6b57b422.a399220f.js new file mode 100644 index 00000000..01249ed0 --- /dev/null +++ b/assets/js/6b57b422.a399220f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8449],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),i=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=i(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=i(n),m=r,h=d["".concat(p,".").concat(m)]||d[m]||u[m]||l;return n?a.createElement(h,o(o({ref:t},c),{},{components:n})):a.createElement(h,o({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:r,o[1]=s;for(var i=2;i{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>s,toc:()=>i});var a=n(7462),r=(n(7294),n(3905));const l={title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",sidebar_position:4,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,s={unversionedId:"setup-components/install-components-pg",id:"setup-components/install-components-pg",title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",source:"@site/docs/setup-components/install-components-pg.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-pg",permalink:"/docs/setup-components/install-components-pg",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-components/install-components-pg.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",sidebar_position:4,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Seldon-Core",permalink:"/docs/setup-components/install-components-seldon"},next:{title:"1. Central Dashboard",permalink:"/docs/kubeflow-dashboard-guide/intro"}},p={},i=[{value:"Prometheus & Grafana",id:"prometheus--grafana",level:2},{value:"Helm Repository \ucd94\uac00",id:"helm-repository-\ucd94\uac00",level:3},{value:"Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Helm Install",id:"helm-install",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:3},{value:"References",id:"references",level:2}],c={toc:i},d="wrapper";function u(e){let{components:t,...l}=e;return(0,r.kt)(d,(0,a.Z)({},c,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"prometheus--grafana"},"Prometheus & Grafana"),(0,r.kt)("p",null,"\ud504\ub85c\uba54\ud14c\uc6b0\uc2a4(Prometheus) \uc640 \uadf8\ub77c\ud30c\ub098(Grafana) \ub294 \ubaa8\ub2c8\ud130\ub9c1\uc744 \uc704\ud55c \ub3c4\uad6c\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc548\uc815\uc801\uc778 \uc11c\ube44\uc2a4 \uc6b4\uc601\uc744 \uc704\ud574\uc11c\ub294 \uc11c\ube44\uc2a4\uc640 \uc11c\ube44\uc2a4\uac00 \uc6b4\uc601\ub418\uace0 \uc788\ub294 \uc778\ud504\ub77c\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\ud574\uc11c \uad00\ucc30\ud558\uace0, \uad00\ucc30\ud55c \uba54\ud2b8\ub9ad\uc744 \ubc14\ud0d5\uc73c\ub85c \ubb38\uc81c\uac00 \uc0dd\uae38 \ub54c \ube60\ub974\uac8c \ub300\uc751\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ubaa8\ub2c8\ud130\ub9c1\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc218\ud589\ud558\uae30 \uc704\ud55c \ub9ce\uc740 \ub3c4\uad6c \uc911 ",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc624\ud508\uc18c\uc2a4\uc778 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://prometheus.io/docs/introduction/overview/"},"Prometheus \uacf5\uc2dd \ubb38\uc11c"),", ",(0,r.kt)("a",{parentName:"p",href:"https://grafana.com/docs/"},"Grafana \uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ud655\uc778\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\ub294 \ub2e4\uc591\ud55c \ub300\uc0c1\uc73c\ub85c\ubd80\ud130 Metric\uc744 \uc218\uc9d1\ud558\ub294 \ub3c4\uad6c\uc774\uba70, \uadf8\ub77c\ud30c\ub098\ub294 \ubaa8\uc778 \ub370\uc774\ud130\ub97c \uc2dc\uac01\ud654\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc11c\ub85c \uac04\uc758 \uc885\uc18d\uc131\uc740 \uc5c6\uc9c0\ub9cc \uc0c1\ud638 \ubcf4\uc644\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5b4 \ud568\uaed8 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc124\uce58\ud55c \ub4a4, Seldon-Core \ub85c \uc0dd\uc131\ud55c SeldonDeployment \ub85c API \uc694\uccad\uc744 \ubcf4\ub0b4, \uc815\uc0c1\uc801\uc73c\ub85c Metrics \uc774 \uc218\uc9d1\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ubcf8 \uae00\uc5d0\uc11c\ub294 seldonio/seldon-core-analytics Helm Chart 1.12.0 \ubc84\uc804\uc744 \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc124\uce58\ud558\uace0, Seldon-Core \uc5d0\uc11c \uc0dd\uc131\ud55c SeldonDeployment\uc758 Metrics \uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ud655\uc778\ud558\uae30 \uc704\ud55c \ub300\uc2dc\ubcf4\ub4dc\ub3c4 \ud568\uaed8 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"helm-repository-\ucd94\uac00"},"Helm Repository \ucd94\uac00"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add seldonio https://storage.googleapis.com/seldon-charts\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'"seldonio" has been added to your repositories\n')),(0,r.kt)("h3",{id:"helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "seldonio" chart repository\n...Successfully got an update from the "datawire" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,r.kt)("h3",{id:"helm-install"},"Helm Install"),(0,r.kt)("p",null,"seldon-core-analytics Helm Chart 1.12.0 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm install seldon-core-analytics seldonio/seldon-core-analytics \\\n --namespace seldon-system \\\n --version 1.12.0\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\nNAME: seldon-core-analytics\nLAST DEPLOYED: Tue Dec 14 18:29:38 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system | grep seldon-core-analytics\n")),(0,r.kt)("p",null,"seldon-system namespace \uc5d0 6\uac1c\uc758 seldon-core-analytics \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-core-analytics-grafana-657c956c88-ng8wn 2/2 Running 0 114s\nseldon-core-analytics-kube-state-metrics-94bb6cb9-svs82 1/1 Running 0 114s\nseldon-core-analytics-prometheus-alertmanager-64cf7b8f5-nxbl8 2/2 Running 0 114s\nseldon-core-analytics-prometheus-node-exporter-5rrj5 1/1 Running 0 114s\nseldon-core-analytics-prometheus-pushgateway-8476474cff-sr4n6 1/1 Running 0 114s\nseldon-core-analytics-prometheus-seldon-685c664894-7cr45 2/2 Running 0 114s\n")),(0,r.kt)("h3",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uadf8\ub77c\ud30c\ub098\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc811\uc18d\ud558\uae30 \uc704\ud574, \ud3ec\ud2b8\ud3ec\uc6cc\ub529\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/seldon-core-analytics-grafana -n seldon-system 8090:80\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:8090"},"localhost:8090"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"grafana-install",src:n(1030).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc811\uc18d\uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Email or username : ",(0,r.kt)("inlineCode",{parentName:"li"},"admin")),(0,r.kt)("li",{parentName:"ul"},"Password : ",(0,r.kt)("inlineCode",{parentName:"li"},"password"))),(0,r.kt)("p",null,"\ub85c\uadf8\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"grafana-login",src:n(8234).Z,width:"3640",height:"2140"})),(0,r.kt)("p",null,"\uc88c\uce21\uc758 \ub300\uc2dc\ubcf4\ub4dc \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"Manage")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dashboard-click",src:n(1502).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"\uae30\ubcf8\uc801\uc778 \uadf8\ub77c\ud30c\ub098 \ub300\uc2dc\ubcf4\ub4dc\uac00 \ud3ec\ud568\ub418\uc5b4\uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"Prediction Analytics")," \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dashboard",src:n(4231).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"Seldon Core API Dashboard \uac00 \ubcf4\uc774\uace0, \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"seldon-dashboard",src:n(9803).Z,width:"5016",height:"2826"})),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core/tree/master/helm-charts/seldon-core-analytics"},"Seldon-Core-Analytics Helm Chart"))))}u.isMDXComponent=!0},1502:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dashboard-click-868bcd267717917295a8f9627d6c522e.png"},4231:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dashboard-ee3d0192807699b2515d184ff00f426d.png"},1030:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/grafana-install-4ca59cc00fad5ee1a50d91f30ab89bb1.png"},8234:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/grafana-login-b91326a2a0082ffb560ad1b30d381091.png"},9803:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/seldon-dashboard-01eccd6a30aac640474edef01050d277.png"}}]); \ No newline at end of file diff --git a/assets/js/6b7916cd.9e733257.js b/assets/js/6b7916cd.9e733257.js deleted file mode 100644 index b438b5ac..00000000 --- a/assets/js/6b7916cd.9e733257.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8457],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var l=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);n&&(l=l.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,l)}return t}function r(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var m=l.createContext({}),s=function(e){var n=l.useContext(m),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},p=function(e){var n=s(e.components);return l.createElement(m.Provider,{value:n},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return l.createElement(l.Fragment,{},n)}},u=l.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,m=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=s(t),u=a,f=c["".concat(m,".").concat(u)]||c[u]||d[u]||o;return t?l.createElement(f,r(r({ref:n},p),{},{components:t})):l.createElement(f,r({ref:n},p))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,r=new Array(o);r[0]=u;var i={};for(var m in n)hasOwnProperty.call(n,m)&&(i[m]=n[m]);i.originalType=e,i[c]="string"==typeof e?e:a,r[1]=i;for(var s=2;s{t.r(n),t.d(n,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var l=t(7462),a=(t(7294),t(3905));const o={title:"5. Model from MLflow",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},r=void 0,i={unversionedId:"api-deployment/seldon-mlflow",id:"version-1.0/api-deployment/seldon-mlflow",title:"5. Model from MLflow",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-mlflow.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-mlflow",permalink:"/docs/1.0/api-deployment/seldon-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-mlflow.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"5. Model from MLflow",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"4. Seldon Fields",permalink:"/docs/1.0/api-deployment/seldon-fields"},next:{title:"6. Multi Models",permalink:"/docs/1.0/api-deployment/seldon-children"}},m={},s=[{value:"Model from MLflow",id:"model-from-mlflow",level:2},{value:"Secret",id:"secret",level:2},{value:"Seldon Core yaml",id:"seldon-core-yaml",level:2},{value:"args",id:"args",level:3},{value:"envFrom",id:"envfrom",level:3},{value:"API \uc0dd\uc131",id:"api-\uc0dd\uc131",level:2}],p={toc:s},c="wrapper";function d(e){let{components:n,...o}=e;return(0,a.kt)(c,(0,l.Z)({},p,o,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"model-from-mlflow"},"Model from MLflow"),(0,a.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-mlflow"},"MLflow Component"),"\uc5d0\uc11c \uc800\uc7a5\ub41c \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 API\ub97c \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"secret"},"Secret"),(0,a.kt)("p",null,"initContainer\uac00 minio\uc5d0 \uc811\uadfc\ud574\uc11c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc73c\ub824\uba74 credentials\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.\nminio\uc5d0 \uc811\uadfc\ud558\uae30 \uc704\ud55c credentials\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\ntype: Opaque\nkind: Secret\nmetadata:\n name: seldon-init-container-secret\n namespace: kubeflow-user-example-com\ndata:\n AWS_ACCESS_KEY_ID: bWluaW8K=\n AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=\n AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLm1ha2luYXJvY2tzLmFp\n USE_SSL: ZmFsc2U=\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AWS_ACCESS_KEY_ID")," \uc758 \uc785\ub825\uac12\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"minio"),"\uc785\ub2c8\ub2e4. \ub2e4\ub9cc secret\uc758 \uc785\ub825\uac12\uc740 \uc778\ucf54\ub529\ub41c \uac12\uc774\uc5ec\uc57c \ub418\uae30 \ub54c\ubb38\uc5d0 \uc2e4\uc81c\ub85c \uc785\ub825\ub418\ub294 \uac12\uc740 \ub2e4\uc74c\uc744 \uc218\ud589\ud6c4 \ub098\uc624\ub294 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"data\uc5d0 \uc785\ub825\ub418\uc5b4\uc57c \ud558\ub294 \uac12\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS_ACCESS_KEY_ID: minio"),(0,a.kt)("li",{parentName:"ul"},"AWS_SECRET_ACCESS_KEY: minio123"),(0,a.kt)("li",{parentName:"ul"},"AWS_ENDPOINT_URL: ",(0,a.kt)("a",{parentName:"li",href:"http://minio-service.kubeflow.svc:9000"},"http://minio-service.kubeflow.svc:9000")),(0,a.kt)("li",{parentName:"ul"},"USE_SSL: false")),(0,a.kt)("p",null,"\uc778\ucf54\ub529\uc740 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"echo -n minio | base64\n")),(0,a.kt)("p",null,"\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uac12\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"bWluaW8=\n")),(0,a.kt)("p",null,"\uc778\ucf54\ub529\uc744 \uc804\uccb4 \uac12\uc5d0 \ub300\ud574\uc11c \uc9c4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS_ACCESS_KEY_ID: bWluaW8="),(0,a.kt)("li",{parentName:"ul"},"AWS_SECRET_ACCESS_KEY: bWluaW8xMjM="),(0,a.kt)("li",{parentName:"ul"},"AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLXNlcnZpY2Uua3ViZWZsb3cuc3ZjOjkwMDA="),(0,a.kt)("li",{parentName:"ul"},"USE_SSL: ZmFsc2U=")),(0,a.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 secret\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\ub294 yaml\ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cat < seldon-init-container-secret.yaml\napiVersion: v1\nkind: Secret\nmetadata:\n name: seldon-init-container-secret\n namespace: kubeflow-user-example-com\ntype: Opaque\ndata:\n AWS_ACCESS_KEY_ID: bWluaW8=\n AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=\n AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLXNlcnZpY2Uua3ViZWZsb3cuc3ZjOjkwMDA=\n USE_SSL: ZmFsc2U=\nEOF\n")),(0,a.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 secret\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f seldon-init-container-secret.yaml\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"secret/seldon-init-container-secret created\n")),(0,a.kt)("h2",{id:"seldon-core-yaml"},"Seldon Core yaml"),(0,a.kt)("p",null,"\uc774\uc81c Seldon Core\ub97c \uc0dd\uc131\ud558\ub294 yaml\ud30c\uc77c\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: model\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n')),(0,a.kt)("p",null,"\uc774 \uc804\uc5d0 \uc791\uc131\ud55c ",(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/api-deployment/seldon-fields"},"Seldon Fields"),"\uc640 \ub2ec\ub77c\uc9c4 \uc810\uc740 \ud06c\uac8c \ub450 \ubd80\ubd84\uc785\ub2c8\ub2e4.\ninitContainer\uc5d0 ",(0,a.kt)("inlineCode",{parentName:"p"},"envFrom")," \ud544\ub4dc\uac00 \ucd94\uac00\ub418\uc5c8\uc73c\uba70 args\uc758 \uc8fc\uc18c\uac00 ",(0,a.kt)("inlineCode",{parentName:"p"},"s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc")," \ub85c \ubc14\ub00c\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"args"},"args"),(0,a.kt)("p",null,"\uc55e\uc11c args\uc758 \uccab\ubc88\uc9f8 array\ub294 \uc6b0\ub9ac\uac00 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ubaa8\ub378\uc758 \uacbd\ub85c\ub77c\uace0 \ud588\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8\ub7fc mlflow\uc5d0 \uc800\uc7a5\ub41c \ubaa8\ub378\uc758 \uacbd\ub85c\ub294 \uc5b4\ub5bb\uac8c \uc54c \uc218 \uc788\uc744\uae4c\uc694?"),(0,a.kt)("p",null,"\ub2e4\uc2dc mlflow\uc5d0 \ub4e4\uc5b4\uac00\uc11c run\uc744 \ud074\ub9ad\ud558\uace0 \ubaa8\ub378\uc744 \ub204\ub974\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"seldon-mlflow-0.png",src:t(8764).Z,width:"3466",height:"2274"})),(0,a.kt)("p",null,"\uc774\ub807\uac8c \ud655\uc778\ub41c \uacbd\ub85c\ub97c \uc785\ub825\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"envfrom"},"envFrom"),(0,a.kt)("p",null,"minio\uc5d0 \uc811\uadfc\ud574\uc11c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \ub370 \ud544\uc694\ud55c \ud658\uacbd\ubcc0\uc218\ub97c \uc785\ub825\ud574\uc8fc\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4.\n\uc55e\uc11c \ub9cc\ub4e0 ",(0,a.kt)("inlineCode",{parentName:"p"},"seldon-init-container-secret"),"\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"api-\uc0dd\uc131"},"API \uc0dd\uc131"),(0,a.kt)("p",null,"\uc6b0\uc120 \uc704\uc5d0\uc11c \uc815\uc758\ud55c \uc2a4\ud399\uc744 yaml \ud30c\uc77c\ub85c \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: model\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: xtype\n type: STRING\n value: "dataframe"\n children: []\nEOF\n')),(0,a.kt)("p",null,"seldon pod\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f seldon-mlflow.yaml\n\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"seldondeployment.machinelearning.seldon.io/seldon-example created\n")),(0,a.kt)("p",null,"\uc774\uc81c pod\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub730 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow-user-example-com | grep seldon\n")),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c API\ub97c \uc0dd\uc131\ud588\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-example-model-0-model-5c949bd894-c5f28 3/3 Running 0 69s\n")),(0,a.kt)("p",null,"CLI\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ub41c API\uc5d0\ub294 \ub2e4\uc74c request\ub97c \ud1b5\ud574 \uc2e4\ud589\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H \'Content-Type: application/json\' \\\n-d \'{\n "data": {\n "ndarray": [\n [\n 143.0,\n 0.0,\n 30.0,\n 30.0\n ]\n ],\n "names": [\n "sepal length (cm)",\n "sepal width (cm)",\n "petal length (cm)",\n "petal width (cm)"\n ]\n }\n}\'\n')),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub420 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'{"data":{"names":[],"ndarray":["Virginica"]},"meta":{"requestPath":{"model":"ghcr.io/mlops-for-all/mlflowserver:e141f57"}}}\n')))}d.isMDXComponent=!0},8764:(e,n,t)=>{t.d(n,{Z:()=>l});const l=t.p+"assets/images/seldon-mlflow-0-1d29992e36aa6ee88621e221794159d1.png"}}]); \ No newline at end of file diff --git a/assets/js/6b7916cd.aa1478dd.js b/assets/js/6b7916cd.aa1478dd.js new file mode 100644 index 00000000..1e5e41e7 --- /dev/null +++ b/assets/js/6b7916cd.aa1478dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8457],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var l=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);n&&(l=l.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,l)}return t}function r(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var m=l.createContext({}),s=function(e){var n=l.useContext(m),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},p=function(e){var n=s(e.components);return l.createElement(m.Provider,{value:n},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return l.createElement(l.Fragment,{},n)}},u=l.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,m=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=s(t),u=a,f=c["".concat(m,".").concat(u)]||c[u]||d[u]||o;return t?l.createElement(f,r(r({ref:n},p),{},{components:t})):l.createElement(f,r({ref:n},p))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,r=new Array(o);r[0]=u;var i={};for(var m in n)hasOwnProperty.call(n,m)&&(i[m]=n[m]);i.originalType=e,i[c]="string"==typeof e?e:a,r[1]=i;for(var s=2;s{t.r(n),t.d(n,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var l=t(7462),a=(t(7294),t(3905));const o={title:"5. Model from MLflow",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},r=void 0,i={unversionedId:"api-deployment/seldon-mlflow",id:"version-1.0/api-deployment/seldon-mlflow",title:"5. Model from MLflow",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-mlflow.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-mlflow",permalink:"/docs/1.0/api-deployment/seldon-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-mlflow.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"5. Model from MLflow",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"4. Seldon Fields",permalink:"/docs/1.0/api-deployment/seldon-fields"},next:{title:"6. Multi Models",permalink:"/docs/1.0/api-deployment/seldon-children"}},m={},s=[{value:"Model from MLflow",id:"model-from-mlflow",level:2},{value:"Secret",id:"secret",level:2},{value:"Seldon Core yaml",id:"seldon-core-yaml",level:2},{value:"args",id:"args",level:3},{value:"envFrom",id:"envfrom",level:3},{value:"API \uc0dd\uc131",id:"api-\uc0dd\uc131",level:2}],p={toc:s},c="wrapper";function d(e){let{components:n,...o}=e;return(0,a.kt)(c,(0,l.Z)({},p,o,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"model-from-mlflow"},"Model from MLflow"),(0,a.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-mlflow"},"MLflow Component"),"\uc5d0\uc11c \uc800\uc7a5\ub41c \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 API\ub97c \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"secret"},"Secret"),(0,a.kt)("p",null,"initContainer\uac00 minio\uc5d0 \uc811\uadfc\ud574\uc11c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc73c\ub824\uba74 credentials\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.\nminio\uc5d0 \uc811\uadfc\ud558\uae30 \uc704\ud55c credentials\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\ntype: Opaque\nkind: Secret\nmetadata:\n name: seldon-init-container-secret\n namespace: kubeflow-user-example-com\ndata:\n AWS_ACCESS_KEY_ID: bWluaW8K=\n AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=\n AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLm1ha2luYXJvY2tzLmFp\n USE_SSL: ZmFsc2U=\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AWS_ACCESS_KEY_ID")," \uc758 \uc785\ub825\uac12\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"minio"),"\uc785\ub2c8\ub2e4. \ub2e4\ub9cc secret\uc758 \uc785\ub825\uac12\uc740 \uc778\ucf54\ub529\ub41c \uac12\uc774\uc5ec\uc57c \ub418\uae30 \ub54c\ubb38\uc5d0 \uc2e4\uc81c\ub85c \uc785\ub825\ub418\ub294 \uac12\uc740 \ub2e4\uc74c\uc744 \uc218\ud589\ud6c4 \ub098\uc624\ub294 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"data\uc5d0 \uc785\ub825\ub418\uc5b4\uc57c \ud558\ub294 \uac12\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS_ACCESS_KEY_ID: minio"),(0,a.kt)("li",{parentName:"ul"},"AWS_SECRET_ACCESS_KEY: minio123"),(0,a.kt)("li",{parentName:"ul"},"AWS_ENDPOINT_URL: ",(0,a.kt)("a",{parentName:"li",href:"http://minio-service.kubeflow.svc:9000"},"http://minio-service.kubeflow.svc:9000")),(0,a.kt)("li",{parentName:"ul"},"USE_SSL: false")),(0,a.kt)("p",null,"\uc778\ucf54\ub529\uc740 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"echo -n minio | base64\n")),(0,a.kt)("p",null,"\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uac12\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"bWluaW8=\n")),(0,a.kt)("p",null,"\uc778\ucf54\ub529\uc744 \uc804\uccb4 \uac12\uc5d0 \ub300\ud574\uc11c \uc9c4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS_ACCESS_KEY_ID: bWluaW8="),(0,a.kt)("li",{parentName:"ul"},"AWS_SECRET_ACCESS_KEY: bWluaW8xMjM="),(0,a.kt)("li",{parentName:"ul"},"AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLXNlcnZpY2Uua3ViZWZsb3cuc3ZjOjkwMDA="),(0,a.kt)("li",{parentName:"ul"},"USE_SSL: ZmFsc2U=")),(0,a.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 secret\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\ub294 yaml\ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cat < seldon-init-container-secret.yaml\napiVersion: v1\nkind: Secret\nmetadata:\n name: seldon-init-container-secret\n namespace: kubeflow-user-example-com\ntype: Opaque\ndata:\n AWS_ACCESS_KEY_ID: bWluaW8=\n AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=\n AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLXNlcnZpY2Uua3ViZWZsb3cuc3ZjOjkwMDA=\n USE_SSL: ZmFsc2U=\nEOF\n")),(0,a.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 secret\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f seldon-init-container-secret.yaml\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"secret/seldon-init-container-secret created\n")),(0,a.kt)("h2",{id:"seldon-core-yaml"},"Seldon Core yaml"),(0,a.kt)("p",null,"\uc774\uc81c Seldon Core\ub97c \uc0dd\uc131\ud558\ub294 yaml\ud30c\uc77c\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: model\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n')),(0,a.kt)("p",null,"\uc774 \uc804\uc5d0 \uc791\uc131\ud55c ",(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/api-deployment/seldon-fields"},"Seldon Fields"),"\uc640 \ub2ec\ub77c\uc9c4 \uc810\uc740 \ud06c\uac8c \ub450 \ubd80\ubd84\uc785\ub2c8\ub2e4.\ninitContainer\uc5d0 ",(0,a.kt)("inlineCode",{parentName:"p"},"envFrom")," \ud544\ub4dc\uac00 \ucd94\uac00\ub418\uc5c8\uc73c\uba70 args\uc758 \uc8fc\uc18c\uac00 ",(0,a.kt)("inlineCode",{parentName:"p"},"s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc")," \ub85c \ubc14\ub00c\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"args"},"args"),(0,a.kt)("p",null,"\uc55e\uc11c args\uc758 \uccab\ubc88\uc9f8 array\ub294 \uc6b0\ub9ac\uac00 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ubaa8\ub378\uc758 \uacbd\ub85c\ub77c\uace0 \ud588\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8\ub7fc mlflow\uc5d0 \uc800\uc7a5\ub41c \ubaa8\ub378\uc758 \uacbd\ub85c\ub294 \uc5b4\ub5bb\uac8c \uc54c \uc218 \uc788\uc744\uae4c\uc694?"),(0,a.kt)("p",null,"\ub2e4\uc2dc mlflow\uc5d0 \ub4e4\uc5b4\uac00\uc11c run\uc744 \ud074\ub9ad\ud558\uace0 \ubaa8\ub378\uc744 \ub204\ub974\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"seldon-mlflow-0.png",src:t(8764).Z,width:"3466",height:"2274"})),(0,a.kt)("p",null,"\uc774\ub807\uac8c \ud655\uc778\ub41c \uacbd\ub85c\ub97c \uc785\ub825\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"envfrom"},"envFrom"),(0,a.kt)("p",null,"minio\uc5d0 \uc811\uadfc\ud574\uc11c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \ub370 \ud544\uc694\ud55c \ud658\uacbd\ubcc0\uc218\ub97c \uc785\ub825\ud574\uc8fc\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4.\n\uc55e\uc11c \ub9cc\ub4e0 ",(0,a.kt)("inlineCode",{parentName:"p"},"seldon-init-container-secret"),"\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"api-\uc0dd\uc131"},"API \uc0dd\uc131"),(0,a.kt)("p",null,"\uc6b0\uc120 \uc704\uc5d0\uc11c \uc815\uc758\ud55c \uc2a4\ud399\uc744 yaml \ud30c\uc77c\ub85c \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: model\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: xtype\n type: STRING\n value: "dataframe"\n children: []\nEOF\n')),(0,a.kt)("p",null,"seldon pod\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f seldon-mlflow.yaml\n\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"seldondeployment.machinelearning.seldon.io/seldon-example created\n")),(0,a.kt)("p",null,"\uc774\uc81c pod\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub730 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow-user-example-com | grep seldon\n")),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c API\ub97c \uc0dd\uc131\ud588\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-example-model-0-model-5c949bd894-c5f28 3/3 Running 0 69s\n")),(0,a.kt)("p",null,"CLI\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ub41c API\uc5d0\ub294 \ub2e4\uc74c request\ub97c \ud1b5\ud574 \uc2e4\ud589\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H \'Content-Type: application/json\' \\\n-d \'{\n "data": {\n "ndarray": [\n [\n 143.0,\n 0.0,\n 30.0,\n 30.0\n ]\n ],\n "names": [\n "sepal length (cm)",\n "sepal width (cm)",\n "petal length (cm)",\n "petal width (cm)"\n ]\n }\n}\'\n')),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub420 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'{"data":{"names":[],"ndarray":["Virginica"]},"meta":{"requestPath":{"model":"ghcr.io/mlops-for-all/mlflowserver:e141f57"}}}\n')))}d.isMDXComponent=!0},8764:(e,n,t)=>{t.d(n,{Z:()=>l});const l=t.p+"assets/images/seldon-mlflow-0-1d29992e36aa6ee88621e221794159d1.png"}}]); \ No newline at end of file diff --git a/assets/js/6d8a40f9.4c3545c6.js b/assets/js/6d8a40f9.4c3545c6.js new file mode 100644 index 00000000..c852b184 --- /dev/null +++ b/assets/js/6d8a40f9.4c3545c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4775],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,k=d["".concat(s,".").concat(m)]||d[m]||c[m]||i;return t?a.createElement(k,o(o({ref:n},u),{},{components:t})):a.createElement(k,o({ref:n},u))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:r,o[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=t(7462),r=(t(7294),t(3905));const i={title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",sidebar_position:6,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,l={unversionedId:"setup-kubernetes/setup-nvidia-gpu",id:"setup-kubernetes/setup-nvidia-gpu",title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",source:"@site/docs/setup-kubernetes/setup-nvidia-gpu.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/setup-nvidia-gpu",permalink:"/docs/setup-kubernetes/setup-nvidia-gpu",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/setup-nvidia-gpu.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",sidebar_position:6,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"5. Install Kubernetes Modules",permalink:"/docs/setup-kubernetes/install-kubernetes-module"},next:{title:"1. Kubeflow",permalink:"/docs/setup-components/install-components-kf"}},s={},p=[{value:"1. Install NVIDIA Driver",id:"1-install-nvidia-driver",level:2},{value:"2. NVIDIA-Docker \uc124\uce58",id:"2-nvidia-docker-\uc124\uce58",level:2},{value:"3. NVIDIA-Docker\ub97c Default Container Runtime\uc73c\ub85c \uc124\uc815",id:"3-nvidia-docker\ub97c-default-container-runtime\uc73c\ub85c-\uc124\uc815",level:2},{value:"4. Nvidia-Device-Plugin",id:"4-nvidia-device-plugin",level:2}],u={toc:p},d="wrapper";function c(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ubc0f Kubeflow \ub4f1\uc5d0\uc11c GP \ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"1-install-nvidia-driver"},"1. Install NVIDIA Driver"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"nvidia-smi")," \uc218\ud589 \uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub41c\ub2e4\uba74 \uc774 \ub2e8\uacc4\ub294 \uc0dd\ub7b5\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ nvidia-smi \n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 470.86 Driver Version: 470.86 CUDA Version: 11.4 |\n|-------------------------------+----------------------+----------------------+\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|===============================+======================+======================|\n| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |\n| 25% 32C P8 4W / 120W | 211MiB / 6078MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |\n| 0% 34C P8 7W / 175W | 5MiB / 7982MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n \n+-----------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=============================================================================|\n| 0 N/A N/A 1644 G /usr/lib/xorg/Xorg 198MiB |\n| 0 N/A N/A 1893 G /usr/bin/gnome-shell 10MiB |\n| 1 N/A N/A 1644 G /usr/lib/xorg/Xorg 4MiB |\n+-----------------------------------------------------------------------------+\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"nvidia-smi"),"\uc758 \ucd9c\ub825 \uacb0\uacfc\uac00 \uc704\uc640 \uac19\uc9c0 \uc54a\ub2e4\uba74 \uc7a5\ucc29\ub41c GPU\uc5d0 \ub9de\ub294 nvidia driver\ub97c \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d nvidia driver\uc758 \uc124\uce58\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\ub2e4\uba74 \uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uc124\uce58\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo add-apt-repository ppa:graphics-drivers/ppa\nsudo apt update && sudo apt install -y ubuntu-drivers-common\nsudo ubuntu-drivers autoinstall\nsudo reboot\n")),(0,r.kt)("h2",{id:"2-nvidia-docker-\uc124\uce58"},"2. NVIDIA-Docker \uc124\uce58"),(0,r.kt)("p",null,"NVIDIA-Docker\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \\\n sudo apt-key add -\ndistribution=$(. /etc/os-release;echo $ID$VERSION_ID)\ncurl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list\nsudo apt-get update\nsudo apt-get install -y nvidia-docker2 &&\nsudo systemctl restart docker\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574, GPU\ub97c \uc0ac\uc6a9\ud558\ub294 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574\ubd05\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi\n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 470.86 Driver Version: 470.86 CUDA Version: 11.4 |\n|-------------------------------+----------------------+----------------------+\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|===============================+======================+======================|\n| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |\n| 25% 32C P8 4W / 120W | 211MiB / 6078MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |\n| 0% 34C P8 6W / 175W | 5MiB / 7982MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n \n+-----------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=============================================================================|\n+-----------------------------------------------------------------------------+\n")),(0,r.kt)("h2",{id:"3-nvidia-docker\ub97c-default-container-runtime\uc73c\ub85c-\uc124\uc815"},"3. NVIDIA-Docker\ub97c Default Container Runtime\uc73c\ub85c \uc124\uc815"),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Docker-CE\ub97c Default Container Runtime\uc73c\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n\ub530\ub77c\uc11c, Docker Container \ub0b4\uc5d0\uc11c NVIDIA GPU\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 NVIDIA-Docker \ub97c Container Runtime \uc73c\ub85c \uc0ac\uc6a9\ud558\uc5ec pod\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub3c4\ub85d Default Runtime\uc744 \uc218\uc815\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"/etc/docker/daemon.json")," \ud30c\uc77c\uc744 \uc5f4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'sudo vi /etc/docker/daemon.json\n\n{\n "default-runtime": "nvidia",\n "runtimes": {\n "nvidia": {\n "path": "nvidia-container-runtime",\n "runtimeArgs": []\n }\n }\n}\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud30c\uc77c\uc774 \ubcc0\uacbd\ub41c \uac83\uc744 \ud655\uc778\ud55c \ud6c4, Docker\ub97c \uc7ac\uc2dc\uc791\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl daemon-reload\nsudo service docker restart\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubcc0\uacbd \uc0ac\ud56d\uc774 \ubc18\uc601\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker info | grep nvidia\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ docker info | grep nvidia\nRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux nvidia runc\nDefault Runtime: nvidia\n")))),(0,r.kt)("h2",{id:"4-nvidia-device-plugin"},"4. Nvidia-Device-Plugin"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"nvidia-device-plugin daemonset\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.10.0/nvidia-device-plugin.yml\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"nvidia-device-plugin pod\uc774 RUNNING \uc0c1\ud0dc\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n kube-system | grep nvidia\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kube-system nvidia-device-plugin-daemonset-nlqh2 1/1 Running 0 1h\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"node \uc815\ubcf4\uc5d0 gpu\uac00 \uc0ac\uc6a9\uac00\ub2a5\ud558\ub3c4\ub85d \uc124\uc815\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\\.com/gpu"\n')),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","(",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud55c \ud074\ub7ec\uc2a4\ud130\ub294 2\uac1c\uc758 GPU\uac00 \uc788\uc5b4\uc11c 2\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4.\n\ubcf8\uc778\uc758 \ud074\ub7ec\uc2a4\ud130\uc758 GPU \uac1c\uc218\uc640 \ub9de\ub294 \uc22b\uc790\uac00 \ucd9c\ub825\ub41c\ub2e4\uba74 \ub429\ub2c8\ub2e4.)"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME GPU\nubuntu 2\n")))),(0,r.kt)("p",null,"\uc124\uc815\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0, GPU\uc758 value\uac00 ",(0,r.kt)("inlineCode",{parentName:"p"},"")," \uc73c\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6d8a40f9.b420a13b.js b/assets/js/6d8a40f9.b420a13b.js deleted file mode 100644 index 4207afca..00000000 --- a/assets/js/6d8a40f9.b420a13b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4775],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,k=d["".concat(s,".").concat(m)]||d[m]||c[m]||i;return t?a.createElement(k,o(o({ref:n},u),{},{components:t})):a.createElement(k,o({ref:n},u))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:r,o[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=t(7462),r=(t(7294),t(3905));const i={title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",sidebar_position:6,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,l={unversionedId:"setup-kubernetes/setup-nvidia-gpu",id:"setup-kubernetes/setup-nvidia-gpu",title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",source:"@site/docs/setup-kubernetes/setup-nvidia-gpu.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/setup-nvidia-gpu",permalink:"/docs/setup-kubernetes/setup-nvidia-gpu",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/setup-nvidia-gpu.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",sidebar_position:6,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"5. Install Kubernetes Modules",permalink:"/docs/setup-kubernetes/install-kubernetes-module"},next:{title:"1. Kubeflow",permalink:"/docs/setup-components/install-components-kf"}},s={},p=[{value:"1. Install NVIDIA Driver",id:"1-install-nvidia-driver",level:2},{value:"2. NVIDIA-Docker \uc124\uce58",id:"2-nvidia-docker-\uc124\uce58",level:2},{value:"3. NVIDIA-Docker\ub97c Default Container Runtime\uc73c\ub85c \uc124\uc815",id:"3-nvidia-docker\ub97c-default-container-runtime\uc73c\ub85c-\uc124\uc815",level:2},{value:"4. Nvidia-Device-Plugin",id:"4-nvidia-device-plugin",level:2}],u={toc:p},d="wrapper";function c(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ubc0f Kubeflow \ub4f1\uc5d0\uc11c GP \ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"1-install-nvidia-driver"},"1. Install NVIDIA Driver"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"nvidia-smi")," \uc218\ud589 \uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub41c\ub2e4\uba74 \uc774 \ub2e8\uacc4\ub294 \uc0dd\ub7b5\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ nvidia-smi \n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 470.86 Driver Version: 470.86 CUDA Version: 11.4 |\n|-------------------------------+----------------------+----------------------+\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|===============================+======================+======================|\n| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |\n| 25% 32C P8 4W / 120W | 211MiB / 6078MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |\n| 0% 34C P8 7W / 175W | 5MiB / 7982MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n \n+-----------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=============================================================================|\n| 0 N/A N/A 1644 G /usr/lib/xorg/Xorg 198MiB |\n| 0 N/A N/A 1893 G /usr/bin/gnome-shell 10MiB |\n| 1 N/A N/A 1644 G /usr/lib/xorg/Xorg 4MiB |\n+-----------------------------------------------------------------------------+\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"nvidia-smi"),"\uc758 \ucd9c\ub825 \uacb0\uacfc\uac00 \uc704\uc640 \uac19\uc9c0 \uc54a\ub2e4\uba74 \uc7a5\ucc29\ub41c GPU\uc5d0 \ub9de\ub294 nvidia driver\ub97c \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d nvidia driver\uc758 \uc124\uce58\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\ub2e4\uba74 \uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uc124\uce58\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo add-apt-repository ppa:graphics-drivers/ppa\nsudo apt update && sudo apt install -y ubuntu-drivers-common\nsudo ubuntu-drivers autoinstall\nsudo reboot\n")),(0,r.kt)("h2",{id:"2-nvidia-docker-\uc124\uce58"},"2. NVIDIA-Docker \uc124\uce58"),(0,r.kt)("p",null,"NVIDIA-Docker\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \\\n sudo apt-key add -\ndistribution=$(. /etc/os-release;echo $ID$VERSION_ID)\ncurl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list\nsudo apt-get update\nsudo apt-get install -y nvidia-docker2 &&\nsudo systemctl restart docker\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574, GPU\ub97c \uc0ac\uc6a9\ud558\ub294 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574\ubd05\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi\n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 470.86 Driver Version: 470.86 CUDA Version: 11.4 |\n|-------------------------------+----------------------+----------------------+\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|===============================+======================+======================|\n| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |\n| 25% 32C P8 4W / 120W | 211MiB / 6078MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |\n| 0% 34C P8 6W / 175W | 5MiB / 7982MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n \n+-----------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=============================================================================|\n+-----------------------------------------------------------------------------+\n")),(0,r.kt)("h2",{id:"3-nvidia-docker\ub97c-default-container-runtime\uc73c\ub85c-\uc124\uc815"},"3. NVIDIA-Docker\ub97c Default Container Runtime\uc73c\ub85c \uc124\uc815"),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Docker-CE\ub97c Default Container Runtime\uc73c\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n\ub530\ub77c\uc11c, Docker Container \ub0b4\uc5d0\uc11c NVIDIA GPU\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 NVIDIA-Docker \ub97c Container Runtime \uc73c\ub85c \uc0ac\uc6a9\ud558\uc5ec pod\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub3c4\ub85d Default Runtime\uc744 \uc218\uc815\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"/etc/docker/daemon.json")," \ud30c\uc77c\uc744 \uc5f4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'sudo vi /etc/docker/daemon.json\n\n{\n "default-runtime": "nvidia",\n "runtimes": {\n "nvidia": {\n "path": "nvidia-container-runtime",\n "runtimeArgs": []\n }\n }\n}\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud30c\uc77c\uc774 \ubcc0\uacbd\ub41c \uac83\uc744 \ud655\uc778\ud55c \ud6c4, Docker\ub97c \uc7ac\uc2dc\uc791\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl daemon-reload\nsudo service docker restart\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubcc0\uacbd \uc0ac\ud56d\uc774 \ubc18\uc601\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker info | grep nvidia\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ docker info | grep nvidia\nRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux nvidia runc\nDefault Runtime: nvidia\n")))),(0,r.kt)("h2",{id:"4-nvidia-device-plugin"},"4. Nvidia-Device-Plugin"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"nvidia-device-plugin daemonset\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.10.0/nvidia-device-plugin.yml\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"nvidia-device-plugin pod\uc774 RUNNING \uc0c1\ud0dc\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n kube-system | grep nvidia\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kube-system nvidia-device-plugin-daemonset-nlqh2 1/1 Running 0 1h\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"node \uc815\ubcf4\uc5d0 gpu\uac00 \uc0ac\uc6a9\uac00\ub2a5\ud558\ub3c4\ub85d \uc124\uc815\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\\.com/gpu"\n')),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","(",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud55c \ud074\ub7ec\uc2a4\ud130\ub294 2\uac1c\uc758 GPU\uac00 \uc788\uc5b4\uc11c 2\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4.\n\ubcf8\uc778\uc758 \ud074\ub7ec\uc2a4\ud130\uc758 GPU \uac1c\uc218\uc640 \ub9de\ub294 \uc22b\uc790\uac00 \ucd9c\ub825\ub41c\ub2e4\uba74 \ub429\ub2c8\ub2e4.)"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME GPU\nubuntu 2\n")))),(0,r.kt)("p",null,"\uc124\uc815\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0, GPU\uc758 value\uac00 ",(0,r.kt)("inlineCode",{parentName:"p"},"")," \uc73c\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6fb0e7c9.3635fcad.js b/assets/js/6fb0e7c9.3635fcad.js deleted file mode 100644 index 59659de9..00000000 --- a/assets/js/6fb0e7c9.3635fcad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5105],{3905:(t,e,n)=>{n.d(e,{Zo:()=>m,kt:()=>c});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var i=r.createContext({}),u=function(t){var e=r.useContext(i),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},m=function(t){var e=u(t.components);return r.createElement(i.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},k=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,i=t.parentName,m=p(t,["components","mdxType","originalType","parentName"]),s=u(n),k=a,c=s["".concat(i,".").concat(k)]||s[k]||d[k]||l;return n?r.createElement(c,o(o({ref:e},m),{},{components:n})):r.createElement(c,o({ref:e},m))}));function c(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,o=new Array(l);o[0]=k;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=t,p[s]="string"==typeof t?t:a,o[1]=p;for(var u=2;u{n.r(e),n.d(e,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const l={title:"1. Introduction",description:"Setup Introduction",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim","Jongsun Shinn","Youngdon Tae","SeungTae Kim"]},o=void 0,p={unversionedId:"setup-kubernetes/intro",id:"version-1.0/setup-kubernetes/intro",title:"1. Introduction",description:"Setup Introduction",source:"@site/versioned_docs/version-1.0/setup-kubernetes/intro.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/intro",permalink:"/docs/1.0/setup-kubernetes/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/intro.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Introduction",description:"Setup Introduction",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim","Jongsun Shinn","Youngdon Tae","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Why Kubernetes?",permalink:"/docs/1.0/introduction/why_kubernetes"},next:{title:"2. Setup Kubernetes",permalink:"/docs/1.0/setup-kubernetes/kubernetes"}},i={},u=[{value:"MLOps \uc2dc\uc2a4\ud15c \uad6c\ucd95\ud574\ubcf4\uae30",id:"mlops-\uc2dc\uc2a4\ud15c-\uad6c\ucd95\ud574\ubcf4\uae30",level:2},{value:"\uad6c\uc131 \uc694\uc18c",id:"\uad6c\uc131-\uc694\uc18c",level:2},{value:"\ud074\ub7ec\uc2a4\ud130",id:"\ud074\ub7ec\uc2a4\ud130",level:3},{value:"1. Software",id:"1-software",level:4},{value:"2. Helm Chart",id:"2-helm-chart",level:4},{value:"\ud074\ub77c\uc774\uc5b8\ud2b8",id:"\ud074\ub77c\uc774\uc5b8\ud2b8",level:3},{value:"Minimum System Requirements",id:"minimum-system-requirements",level:3}],m={toc:u},s="wrapper";function d(t){let{components:e,...n}=t;return(0,a.kt)(s,(0,r.Z)({},m,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"mlops-\uc2dc\uc2a4\ud15c-\uad6c\ucd95\ud574\ubcf4\uae30"},"MLOps \uc2dc\uc2a4\ud15c \uad6c\ucd95\ud574\ubcf4\uae30"),(0,a.kt)("p",null,"MLOps\ub97c \uacf5\ubd80\ud558\ub294 \ub370 \uc788\uc5b4\uc11c \uac00\uc7a5 \ud070 \uc7a5\ubcbd\uc740 MLOps \uc2dc\uc2a4\ud15c\uc744 \uad6c\uc131\ud574\ubcf4\uace0 \uc0ac\uc6a9\ud574\ubcf4\uae30\uac00 \uc5b4\ub835\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4. AWS, GCP \ub4f1\uc758 \ud37c\ube14\ub9ad \ud074\ub77c\uc6b0\ub4dc \ud639\uc740 Weight & Bias, neptune.ai \ub4f1\uc758 \uc0c1\uc6a9 \ud234\uc744 \uc0ac\uc6a9\ud574\ubcf4\uae30\uc5d0\ub294 \uacfc\uae08\uc5d0 \ub300\ud55c \ubd80\ub2f4\uc774 \uc874\uc7ac\ud558\uace0, \ucc98\uc74c\ubd80\ud130 \ubaa8\ub4e0 \ud658\uacbd\uc744 \ud63c\uc790\uc11c \uad6c\uc131\ud558\uae30\uc5d0\ub294 \uc5b4\ub514\uc11c\ubd80\ud130 \uc2dc\uc791\ud574\uc57c \ud560\uc9c0 \ub9c9\ub9c9\ud558\uac8c \ub290\uaef4\uc9c8 \uc218\ubc16\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc774\ub7f0 \uc774\uc720\ub4e4\ub85c MLOps\ub97c \uc120\ub73b \uc2dc\uc791\ud574\ubcf4\uc9c0 \ubabb\ud558\uc2dc\ub294 \ubd84\ub4e4\uc744 \uc704\ud574, ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc6b0\ubd84\ud22c\uac00 \uc124\uce58\ub418\ub294 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub9cc \uc900\ube44\ub418\uc5b4 \uc788\ub2e4\uba74 MLOps \uc2dc\uc2a4\ud15c\uc744 \ubc11\ubc14\ub2e5\ubd80\ud130 \uad6c\ucd95\ud558\uace0 \uc0ac\uc6a9\ud574 \ubcfc \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc6b0\ubd84\ud22c \ub370\uc2a4\ud06c\ud0d1 \ud658\uacbd\uc744 \uc900\ube44\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0, \uac00\uc0c1\uba38\uc2e0\uc744 \ud65c\uc6a9\ud558\uc5ec \ud658\uacbd\uc744 \uad6c\uc131\ud558\uae30"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Windows \ud639\uc740 Intel Mac\uc744 \uc0ac\uc6a9\ud574 ",(0,a.kt)("inlineCode",{parentName:"p"},"\ubaa8\ub450\uc758 MLops")," \uc2e4\uc2b5\uc744 \uc9c4\ud589 \uc911\uc778 \ubd84\ub4e4\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Virtual Box"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"VMware")," \ub4f1\uc758 \uac00\uc0c1\uba38\uc2e0 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec \uc6b0\ubd84\ud22c \ub370\uc2a4\ud06c\ud0d1 \ud658\uacbd\uc744 \uc900\ube44\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub54c, \uad8c\uc7a5 \uc0ac\uc591\uc744 \ub9de\ucdb0 \uac00\uc0c1 \uba38\uc2e0\uc744 \uc0dd\uc131\ud574\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.\n\ub610\ud55c, M1 Mac\uc744 \uc0ac\uc6a9\ud558\uc2dc\ub294 \ubd84\ub4e4\uc740 \uc791\uc131\uc77c(2022\ub144 2\uc6d4) \uae30\uc900\uc73c\ub85c\ub294 Virtual Box, VMware \ub294 \uc774\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. (",(0,a.kt)("a",{parentName:"p",href:"https://isapplesiliconready.com/kr"},"M1 Apple Silicone Mac\uc5d0 \ucd5c\uc801\ud654\ub41c macOS \uc571 \uc9c0\uc6d0 \ud655\uc778\ud558\uae30"),")\n\ub530\ub77c\uc11c, \ud074\ub77c\uc6b0\ub4dc \ud658\uacbd\uc744 \uc774\uc6a9\ud574 \uc2e4\uc2b5\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c\uba74, ",(0,a.kt)("a",{parentName:"p",href:"https://mac.getutm.app/"},"UTM , Virtual machines for Mac"),"\uc744 \uc124\uce58\ud558\uc5ec \uac00\uc0c1 \uba38\uc2e0\uc744 \uc774\uc6a9\ud574\uc8fc\uc138\uc694.\n(\uc571\uc2a4\ud1a0\uc5b4\uc5d0\uc11c \uad6c\ub9e4\ud558\uc5ec \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub294 \uc77c\uc885\uc758 Donation \uac1c\ub150\uc758 \ube44\uc6a9 \uc9c0\ubd88\uc785\ub2c8\ub2e4. \ubb34\ub8cc \ubc84\uc804\uacfc \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8 \uc815\ub3c4\uc758 \ucc28\uc774\uac00 \uc788\uc5b4, \ubb34\ub8cc\ubc84\uc804\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.)\n\ud574\ub2f9 \uac00\uc0c1\uba38\uc2e0 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04.3 LTS")," \uc2e4\uc2b5 \uc6b4\uc601\uccb4\uc81c\ub97c \uc9c0\uc6d0\ud558\uace0 \uc788\uc5b4, M1 Mac\uc5d0\uc11c \uc2e4\uc2b5\uc744 \uc218\ud589\ud558\ub294 \uac83\uc744 \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4.")),(0,a.kt)("p",null,"\ud558\uc9c0\ub9cc ",(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/introduction/component"},"MLOps\uc758 \uad6c\uc131\uc694\uc18c"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \uc694\uc18c\ub4e4\uc744 \ubaa8\ub450 \uc0ac\uc6a9\ud574\ubcfc \uc218\ub294 \uc5c6\uae30\uc5d0, ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \ub300\ud45c\uc801\uc778 \uc624\ud508\uc18c\uc2a4\ub9cc\uc744 \uc124\uce58\ud55c \ub4a4, \uc11c\ub85c \uc5f0\ub3d9\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 \ubd80\ubd84\uc744 \uc8fc\ub85c \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc124\uce58\ud558\ub294 \uc624\ud508\uc18c\uc2a4\uac00 \ud45c\uc900\uc744 \uc758\ubbf8\ud558\ub294 \uac83\uc740 \uc544\ub2c8\uba70, \uc5ec\ub7ec\ubd84\uc758 \uc0c1\ud669\uc5d0 \ub9de\uac8c \uc801\uc808\ud55c \ud234\uc744 \ucde8\uc0ac\uc120\ud0dd\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"\uad6c\uc131-\uc694\uc18c"},"\uad6c\uc131 \uc694\uc18c"),(0,a.kt)("p",null,"\uc774 \uae00\uc5d0\uc11c \ub9cc\ub4e4\uc5b4 \ubcfc MLOps \uc2dc\uc2a4\ud15c\uc758 \uad6c\uc131 \uc694\uc18c\ub4e4\uacfc \uac01 \ubc84\uc804\uc740 \uc544\ub798\uc640 \uac19\uc740 \ud658\uacbd\uc5d0\uc11c \uac80\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc6d0\ud65c\ud55c \ud658\uacbd\uc5d0\uc11c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud574 ",(0,a.kt)("strong",{parentName:"p"},"\uc2f1\uae00 \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130 (\ud639\uc740 \ud074\ub7ec\uc2a4\ud130)")," \uc640 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\ub97c \ubd84\ub9ac\ud558\uc5ec \uc124\uba85\ud574 \ub4dc\ub9b4 \uc608\uc815\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub294 \uc6b0\ubd84\ud22c\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub294 \ub178\ud2b8\ubd81 \ud639\uc740 \ud074\ub7ec\uc2a4\ud130\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud1b1 \uc678\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub2e4\ub978 \ub370\uc2a4\ud06c\ud1b1\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \ub450 \ub300\uc758 \uba38\uc2e0\uc744 \uc900\ube44\ud560 \uc218 \uc5c6\ub2e4\uba74 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub97c \ub3d9\uc2dc\uc5d0 \ud074\ub7ec\uc2a4\ud130\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud558\uc154\ub3c4 \uad1c\ucc2e\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"\ud074\ub7ec\uc2a4\ud130"},"\ud074\ub7ec\uc2a4\ud130"),(0,a.kt)("h4",{id:"1-software"},"1. Software"),(0,a.kt)("p",null,"\uc544\ub798\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc124\uce58\ud574\uc57c \ud560 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ubaa9\ub85d\uc785\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Software"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Ubuntu"),(0,a.kt)("td",{parentName:"tr",align:null},"20.04.3 LTS")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Docker (Server)"),(0,a.kt)("td",{parentName:"tr",align:null},"20.10.11")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"NVIDIA-Driver"),(0,a.kt)("td",{parentName:"tr",align:null},"470.86")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Kubernetes"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.7")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Kubeflow"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.4.0")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"MLFlow"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.0")))),(0,a.kt)("h4",{id:"2-helm-chart"},"2. Helm Chart"),(0,a.kt)("p",null,"\uc544\ub798\ub294 Helm\uc744 \uc774\uc6a9\ud574 \uc124\uce58\ub418\uc5b4\uc57c \ud560 \uc368\ub4dc\ud30c\ud2f0 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ubaa9\ub85d\uc785\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Helm Chart Repo Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"datawire/ambassador"),(0,a.kt)("td",{parentName:"tr",align:null},"6.9.3")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"seldonio/seldon-core-operator"),(0,a.kt)("td",{parentName:"tr",align:null},"1.11.2")))),(0,a.kt)("h3",{id:"\ud074\ub77c\uc774\uc5b8\ud2b8"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),(0,a.kt)("p",null,"\ud074\ub77c\uc774\uc5b8\ud2b8\ub294 MacOS (Intel CPU), Ubuntu 20.04 \uc5d0\uc11c \uac80\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Software"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"kubectl"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.7")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"helm"),(0,a.kt)("td",{parentName:"tr",align:null},"v3.7.1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"kustomize"),(0,a.kt)("td",{parentName:"tr",align:null},"v3.10.0")))),(0,a.kt)("h3",{id:"minimum-system-requirements"},"Minimum System Requirements"),(0,a.kt)("p",null,"\ubaa8\ub450\uc758 MLOps\ub97c \uc124\uce58\ud560 \ud074\ub7ec\uc2a4\ud130\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\uc591\uc744 \ub9cc\uc871\uc2dc\ud0a4\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 Kubernetes \ubc0f Kubeflow \uc758 \uad8c\uc7a5 \uc0ac\uc591\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"CPU : 6 core"),(0,a.kt)("li",{parentName:"ul"},"RAM : 12GB"),(0,a.kt)("li",{parentName:"ul"},"DISK : 50GB"),(0,a.kt)("li",{parentName:"ul"},"GPU : NVIDIA GPU (Optional)")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6fb0e7c9.477f277b.js b/assets/js/6fb0e7c9.477f277b.js new file mode 100644 index 00000000..30b10154 --- /dev/null +++ b/assets/js/6fb0e7c9.477f277b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5105],{3905:(t,e,n)=>{n.d(e,{Zo:()=>m,kt:()=>c});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var i=r.createContext({}),u=function(t){var e=r.useContext(i),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},m=function(t){var e=u(t.components);return r.createElement(i.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},k=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,i=t.parentName,m=p(t,["components","mdxType","originalType","parentName"]),s=u(n),k=a,c=s["".concat(i,".").concat(k)]||s[k]||d[k]||l;return n?r.createElement(c,o(o({ref:e},m),{},{components:n})):r.createElement(c,o({ref:e},m))}));function c(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,o=new Array(l);o[0]=k;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=t,p[s]="string"==typeof t?t:a,o[1]=p;for(var u=2;u{n.r(e),n.d(e,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const l={title:"1. Introduction",description:"Setup Introduction",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim","Jongsun Shinn","Youngdon Tae","SeungTae Kim"]},o=void 0,p={unversionedId:"setup-kubernetes/intro",id:"version-1.0/setup-kubernetes/intro",title:"1. Introduction",description:"Setup Introduction",source:"@site/versioned_docs/version-1.0/setup-kubernetes/intro.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/intro",permalink:"/docs/1.0/setup-kubernetes/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/intro.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Introduction",description:"Setup Introduction",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim","Jongsun Shinn","Youngdon Tae","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Why Kubernetes?",permalink:"/docs/1.0/introduction/why_kubernetes"},next:{title:"2. Setup Kubernetes",permalink:"/docs/1.0/setup-kubernetes/kubernetes"}},i={},u=[{value:"MLOps \uc2dc\uc2a4\ud15c \uad6c\ucd95\ud574\ubcf4\uae30",id:"mlops-\uc2dc\uc2a4\ud15c-\uad6c\ucd95\ud574\ubcf4\uae30",level:2},{value:"\uad6c\uc131 \uc694\uc18c",id:"\uad6c\uc131-\uc694\uc18c",level:2},{value:"\ud074\ub7ec\uc2a4\ud130",id:"\ud074\ub7ec\uc2a4\ud130",level:3},{value:"1. Software",id:"1-software",level:4},{value:"2. Helm Chart",id:"2-helm-chart",level:4},{value:"\ud074\ub77c\uc774\uc5b8\ud2b8",id:"\ud074\ub77c\uc774\uc5b8\ud2b8",level:3},{value:"Minimum System Requirements",id:"minimum-system-requirements",level:3}],m={toc:u},s="wrapper";function d(t){let{components:e,...n}=t;return(0,a.kt)(s,(0,r.Z)({},m,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"mlops-\uc2dc\uc2a4\ud15c-\uad6c\ucd95\ud574\ubcf4\uae30"},"MLOps \uc2dc\uc2a4\ud15c \uad6c\ucd95\ud574\ubcf4\uae30"),(0,a.kt)("p",null,"MLOps\ub97c \uacf5\ubd80\ud558\ub294 \ub370 \uc788\uc5b4\uc11c \uac00\uc7a5 \ud070 \uc7a5\ubcbd\uc740 MLOps \uc2dc\uc2a4\ud15c\uc744 \uad6c\uc131\ud574\ubcf4\uace0 \uc0ac\uc6a9\ud574\ubcf4\uae30\uac00 \uc5b4\ub835\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4. AWS, GCP \ub4f1\uc758 \ud37c\ube14\ub9ad \ud074\ub77c\uc6b0\ub4dc \ud639\uc740 Weight & Bias, neptune.ai \ub4f1\uc758 \uc0c1\uc6a9 \ud234\uc744 \uc0ac\uc6a9\ud574\ubcf4\uae30\uc5d0\ub294 \uacfc\uae08\uc5d0 \ub300\ud55c \ubd80\ub2f4\uc774 \uc874\uc7ac\ud558\uace0, \ucc98\uc74c\ubd80\ud130 \ubaa8\ub4e0 \ud658\uacbd\uc744 \ud63c\uc790\uc11c \uad6c\uc131\ud558\uae30\uc5d0\ub294 \uc5b4\ub514\uc11c\ubd80\ud130 \uc2dc\uc791\ud574\uc57c \ud560\uc9c0 \ub9c9\ub9c9\ud558\uac8c \ub290\uaef4\uc9c8 \uc218\ubc16\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc774\ub7f0 \uc774\uc720\ub4e4\ub85c MLOps\ub97c \uc120\ub73b \uc2dc\uc791\ud574\ubcf4\uc9c0 \ubabb\ud558\uc2dc\ub294 \ubd84\ub4e4\uc744 \uc704\ud574, ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc6b0\ubd84\ud22c\uac00 \uc124\uce58\ub418\ub294 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub9cc \uc900\ube44\ub418\uc5b4 \uc788\ub2e4\uba74 MLOps \uc2dc\uc2a4\ud15c\uc744 \ubc11\ubc14\ub2e5\ubd80\ud130 \uad6c\ucd95\ud558\uace0 \uc0ac\uc6a9\ud574 \ubcfc \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc6b0\ubd84\ud22c \ub370\uc2a4\ud06c\ud0d1 \ud658\uacbd\uc744 \uc900\ube44\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0, \uac00\uc0c1\uba38\uc2e0\uc744 \ud65c\uc6a9\ud558\uc5ec \ud658\uacbd\uc744 \uad6c\uc131\ud558\uae30"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Windows \ud639\uc740 Intel Mac\uc744 \uc0ac\uc6a9\ud574 ",(0,a.kt)("inlineCode",{parentName:"p"},"\ubaa8\ub450\uc758 MLops")," \uc2e4\uc2b5\uc744 \uc9c4\ud589 \uc911\uc778 \ubd84\ub4e4\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Virtual Box"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"VMware")," \ub4f1\uc758 \uac00\uc0c1\uba38\uc2e0 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec \uc6b0\ubd84\ud22c \ub370\uc2a4\ud06c\ud0d1 \ud658\uacbd\uc744 \uc900\ube44\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub54c, \uad8c\uc7a5 \uc0ac\uc591\uc744 \ub9de\ucdb0 \uac00\uc0c1 \uba38\uc2e0\uc744 \uc0dd\uc131\ud574\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.\n\ub610\ud55c, M1 Mac\uc744 \uc0ac\uc6a9\ud558\uc2dc\ub294 \ubd84\ub4e4\uc740 \uc791\uc131\uc77c(2022\ub144 2\uc6d4) \uae30\uc900\uc73c\ub85c\ub294 Virtual Box, VMware \ub294 \uc774\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. (",(0,a.kt)("a",{parentName:"p",href:"https://isapplesiliconready.com/kr"},"M1 Apple Silicone Mac\uc5d0 \ucd5c\uc801\ud654\ub41c macOS \uc571 \uc9c0\uc6d0 \ud655\uc778\ud558\uae30"),")\n\ub530\ub77c\uc11c, \ud074\ub77c\uc6b0\ub4dc \ud658\uacbd\uc744 \uc774\uc6a9\ud574 \uc2e4\uc2b5\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c\uba74, ",(0,a.kt)("a",{parentName:"p",href:"https://mac.getutm.app/"},"UTM , Virtual machines for Mac"),"\uc744 \uc124\uce58\ud558\uc5ec \uac00\uc0c1 \uba38\uc2e0\uc744 \uc774\uc6a9\ud574\uc8fc\uc138\uc694.\n(\uc571\uc2a4\ud1a0\uc5b4\uc5d0\uc11c \uad6c\ub9e4\ud558\uc5ec \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub294 \uc77c\uc885\uc758 Donation \uac1c\ub150\uc758 \ube44\uc6a9 \uc9c0\ubd88\uc785\ub2c8\ub2e4. \ubb34\ub8cc \ubc84\uc804\uacfc \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8 \uc815\ub3c4\uc758 \ucc28\uc774\uac00 \uc788\uc5b4, \ubb34\ub8cc\ubc84\uc804\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.)\n\ud574\ub2f9 \uac00\uc0c1\uba38\uc2e0 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04.3 LTS")," \uc2e4\uc2b5 \uc6b4\uc601\uccb4\uc81c\ub97c \uc9c0\uc6d0\ud558\uace0 \uc788\uc5b4, M1 Mac\uc5d0\uc11c \uc2e4\uc2b5\uc744 \uc218\ud589\ud558\ub294 \uac83\uc744 \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4.")),(0,a.kt)("p",null,"\ud558\uc9c0\ub9cc ",(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/introduction/component"},"MLOps\uc758 \uad6c\uc131\uc694\uc18c"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \uc694\uc18c\ub4e4\uc744 \ubaa8\ub450 \uc0ac\uc6a9\ud574\ubcfc \uc218\ub294 \uc5c6\uae30\uc5d0, ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \ub300\ud45c\uc801\uc778 \uc624\ud508\uc18c\uc2a4\ub9cc\uc744 \uc124\uce58\ud55c \ub4a4, \uc11c\ub85c \uc5f0\ub3d9\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 \ubd80\ubd84\uc744 \uc8fc\ub85c \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc124\uce58\ud558\ub294 \uc624\ud508\uc18c\uc2a4\uac00 \ud45c\uc900\uc744 \uc758\ubbf8\ud558\ub294 \uac83\uc740 \uc544\ub2c8\uba70, \uc5ec\ub7ec\ubd84\uc758 \uc0c1\ud669\uc5d0 \ub9de\uac8c \uc801\uc808\ud55c \ud234\uc744 \ucde8\uc0ac\uc120\ud0dd\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"\uad6c\uc131-\uc694\uc18c"},"\uad6c\uc131 \uc694\uc18c"),(0,a.kt)("p",null,"\uc774 \uae00\uc5d0\uc11c \ub9cc\ub4e4\uc5b4 \ubcfc MLOps \uc2dc\uc2a4\ud15c\uc758 \uad6c\uc131 \uc694\uc18c\ub4e4\uacfc \uac01 \ubc84\uc804\uc740 \uc544\ub798\uc640 \uac19\uc740 \ud658\uacbd\uc5d0\uc11c \uac80\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc6d0\ud65c\ud55c \ud658\uacbd\uc5d0\uc11c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud574 ",(0,a.kt)("strong",{parentName:"p"},"\uc2f1\uae00 \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130 (\ud639\uc740 \ud074\ub7ec\uc2a4\ud130)")," \uc640 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\ub97c \ubd84\ub9ac\ud558\uc5ec \uc124\uba85\ud574 \ub4dc\ub9b4 \uc608\uc815\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub294 \uc6b0\ubd84\ud22c\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub294 \ub178\ud2b8\ubd81 \ud639\uc740 \ud074\ub7ec\uc2a4\ud130\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud1b1 \uc678\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub2e4\ub978 \ub370\uc2a4\ud06c\ud1b1\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \ub450 \ub300\uc758 \uba38\uc2e0\uc744 \uc900\ube44\ud560 \uc218 \uc5c6\ub2e4\uba74 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub97c \ub3d9\uc2dc\uc5d0 \ud074\ub7ec\uc2a4\ud130\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud558\uc154\ub3c4 \uad1c\ucc2e\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"\ud074\ub7ec\uc2a4\ud130"},"\ud074\ub7ec\uc2a4\ud130"),(0,a.kt)("h4",{id:"1-software"},"1. Software"),(0,a.kt)("p",null,"\uc544\ub798\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc124\uce58\ud574\uc57c \ud560 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ubaa9\ub85d\uc785\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Software"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Ubuntu"),(0,a.kt)("td",{parentName:"tr",align:null},"20.04.3 LTS")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Docker (Server)"),(0,a.kt)("td",{parentName:"tr",align:null},"20.10.11")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"NVIDIA-Driver"),(0,a.kt)("td",{parentName:"tr",align:null},"470.86")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Kubernetes"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.7")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Kubeflow"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.4.0")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"MLFlow"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.0")))),(0,a.kt)("h4",{id:"2-helm-chart"},"2. Helm Chart"),(0,a.kt)("p",null,"\uc544\ub798\ub294 Helm\uc744 \uc774\uc6a9\ud574 \uc124\uce58\ub418\uc5b4\uc57c \ud560 \uc368\ub4dc\ud30c\ud2f0 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ubaa9\ub85d\uc785\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Helm Chart Repo Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"datawire/ambassador"),(0,a.kt)("td",{parentName:"tr",align:null},"6.9.3")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"seldonio/seldon-core-operator"),(0,a.kt)("td",{parentName:"tr",align:null},"1.11.2")))),(0,a.kt)("h3",{id:"\ud074\ub77c\uc774\uc5b8\ud2b8"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),(0,a.kt)("p",null,"\ud074\ub77c\uc774\uc5b8\ud2b8\ub294 MacOS (Intel CPU), Ubuntu 20.04 \uc5d0\uc11c \uac80\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Software"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"kubectl"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.7")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"helm"),(0,a.kt)("td",{parentName:"tr",align:null},"v3.7.1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"kustomize"),(0,a.kt)("td",{parentName:"tr",align:null},"v3.10.0")))),(0,a.kt)("h3",{id:"minimum-system-requirements"},"Minimum System Requirements"),(0,a.kt)("p",null,"\ubaa8\ub450\uc758 MLOps\ub97c \uc124\uce58\ud560 \ud074\ub7ec\uc2a4\ud130\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\uc591\uc744 \ub9cc\uc871\uc2dc\ud0a4\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 Kubernetes \ubc0f Kubeflow \uc758 \uad8c\uc7a5 \uc0ac\uc591\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"CPU : 6 core"),(0,a.kt)("li",{parentName:"ul"},"RAM : 12GB"),(0,a.kt)("li",{parentName:"ul"},"DISK : 50GB"),(0,a.kt)("li",{parentName:"ul"},"GPU : NVIDIA GPU (Optional)")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/751a793c.469524a8.js b/assets/js/751a793c.469524a8.js new file mode 100644 index 00000000..bcc8a216 --- /dev/null +++ b/assets/js/751a793c.469524a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8932],{3905:(e,n,a)=>{a.d(n,{Zo:()=>u,kt:()=>m});var t=a(7294);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function o(e){for(var n=1;n=0||(r[a]=e[a]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=t.createContext({}),i=function(e){var n=t.useContext(s),a=n;return e&&(a="function"==typeof e?e(n):o(o({},n),e)),a},u=function(e){var n=i(e.components);return t.createElement(s.Provider,{value:n},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var a=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),c=i(a),d=r,m=c["".concat(s,".").concat(d)]||c[d]||k[d]||l;return a?t.createElement(m,o(o({ref:n},u),{},{components:a})):t.createElement(m,o({ref:n},u))}));function m(e,n){var a=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=d;var p={};for(var s in n)hasOwnProperty.call(n,s)&&(p[s]=n[s]);p.originalType=e,p[c]="string"==typeof e?e:r,o[1]=p;for(var i=2;i{a.r(n),a.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>k,frontMatter:()=>l,metadata:()=>p,toc:()=>i});var t=a(7462),r=(a(7294),a(3905));const l={title:"[Practice] Docker command",description:"Practice to use docker command.",sidebar_position:4,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,p={unversionedId:"prerequisites/docker/command",id:"prerequisites/docker/command",title:"[Practice] Docker command",description:"Practice to use docker command.",source:"@site/docs/prerequisites/docker/command.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/command",permalink:"/docs/prerequisites/docker/command",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/command.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"[Practice] Docker command",description:"Practice to use docker command.",sidebar_position:4,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"What is Docker?",permalink:"/docs/prerequisites/docker/"},next:{title:"[Practice] Docker images",permalink:"/docs/prerequisites/docker/images"}},s={},i=[{value:"1. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"1-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"2. Docker Pull",id:"2-docker-pull",level:2},{value:"3. Docker images",id:"3-docker-images",level:2},{value:"4. Docker ps",id:"4-docker-ps",level:2},{value:"5. Docker run",id:"5-docker-run",level:2},{value:"6. Docker exec",id:"6-docker-exec",level:2},{value:"7. Docker logs",id:"7-docker-logs",level:2},{value:"8. Docker stop",id:"8-docker-stop",level:2},{value:"9. Docker rm",id:"9-docker-rm",level:2},{value:"10. Docker rmi",id:"10-docker-rmi",level:2},{value:"References",id:"references",level:2}],u={toc:i},c="wrapper";function k(e){let{components:n,...a}=e;return(0,r.kt)(c,(0,t.Z)({},u,a,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"1-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"1. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run hello-world\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Hello from Docker!\nThis message shows that your installation appears to be working correctly.\n....\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"(For ubuntu)")," sudo \uc5c6\uc774 \uc0ac\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 \uc544\ub798 \uc0ac\uc774\ud2b8\ub97c \ucc38\uace0\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user"},"https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user"))),(0,r.kt)("h2",{id:"2-docker-pull"},"2. Docker Pull"),(0,r.kt)("p",null,"docker image registry(\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc800\uc7a5\ud558\uace0 \uacf5\uc720\ud560 \uc218 \uc788\ub294 \uc800\uc7a5\uc18c)\ub85c\ubd80\ud130 Docker image \ub97c \ub85c\uceec\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc544\ub798 \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 docker pull\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud55c argument\ub4e4\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker pull --help\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]\n\nPull an image or a repository from a registry\n\nOptions:\n -a, --all-tags Download all tagged images in the repository\n --disable-content-trust Skip image verification (default true)\n --platform string Set platform if server is multi-platform capable\n -q, --quiet Suppress verbose output\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c \uc54c \uc218 \uc788\ub294 \uac83\uc740 \ubc14\ub85c docker pull\uc740 \ub450 \uac1c \ud0c0\uc785\uc758 argument\ub97c \ubc1b\ub294\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[OPTIONS]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"NAME[:TAG|@DIGEST]"))),(0,r.kt)("p",null,"help\uc5d0\uc11c \ub098\uc628 ",(0,r.kt)("inlineCode",{parentName:"p"},"-a"),", -",(0,r.kt)("inlineCode",{parentName:"p"},"q")," \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 NAME \uc55e\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc9c1\uc811 ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu:18.04")," \uc774\ubbf8\uc9c0\ub97c pull \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker pull ubuntu:18.04\n")),(0,r.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub97c \ud574\uc11d\ud558\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu")," \ub77c\ub294 \uc774\ub984\uc744 \uac00\uc9c4 \uc774\ubbf8\uc9c0 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"18.04")," \ud0dc\uadf8\uac00 \ub2ec\ub824\uc788\ub294 \uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc624\ub77c\ub294 \ub73b\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d, \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"18.04: Pulling from library/ubuntu\n20d796c36622: Pull complete \nDigest: sha256:42cd9143b6060261187a72716906187294b8b66653b50d70bc7a90ccade5c984\nStatus: Downloaded newer image for ubuntu:18.04\ndocker.io/library/ubuntu:18.04\n")),(0,r.kt)("p",null,"\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uba74 ",(0,r.kt)("a",{parentName:"p",href:"http://docker.io/library/"},"docker.io/library")," \ub77c\ub294 \uc774\ub984\uc758 registry \uc5d0\uc11c ubuntu:18.04 \ub77c\ub294 image \ub97c \uc5ec\ub7ec\ubd84\uc758 \ub178\ud2b8\ubd81\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uac8c\ub429\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ucc38\uace0\uc0ac\ud56d",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucd94\ud6c4 ",(0,r.kt)("a",{parentName:"li",href:"http://docker.io"},"docker.io")," \ub098 public \ud55c docker hub \uc640 \uac19\uc740 registry \ub300\uc2e0\uc5d0, \ud2b9\uc815 ",(0,r.kt)("strong",{parentName:"li"},"private")," \ud55c registry \uc5d0\uc11c docker image \ub97c \uac00\uc838\uc640\uc57c \ud558\ub294 \uacbd\uc6b0\uc5d0\ub294, ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/login/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker login"))," \uc744 \ud1b5\ud574\uc11c \ud2b9\uc815 registry \ub97c \ubc14\ub77c\ubcf4\ub3c4\ub85d \ud55c \ub4a4, docker pull \uc744 \uc218\ud589\ud558\ub294 \ud615\ud0dc\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ud639\uc740 insecure registry \ub97c \uc124\uc815\ud558\ub294 ",(0,r.kt)("a",{parentName:"li",href:"https://stackoverflow.com/questions/42211380/add-insecure-registry-to-docker"},"\ubc29\uc548"),"\ub3c4 \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"\ud3d0\uc1c4\ub9dd\uc5d0\uc11c docker image \ub97c ",(0,r.kt)("inlineCode",{parentName:"li"},".tar")," \ud30c\uc77c\uacfc \uac19\uc740 \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uace0 \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/save/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker save")),", ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/load/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker load"))," \uc640 \uac19\uc740 \uba85\ub839\uc5b4\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4.")))),(0,r.kt)("h2",{id:"3-docker-images"},"3. Docker images"),(0,r.kt)("p",null,"\ub85c\uceec\uc5d0 \uc874\uc7ac\ud558\ub294 docker image \ub9ac\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images --help\n")),(0,r.kt)("p",null,"docker images\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 argument\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]\n\nList images\n\nOptions:\n -a, --all Show all images (default hides intermediate images)\n --digests Show digests\n -f, --filter filter Filter output based on conditions provided\n --format string Pretty-print images using a Go template\n --no-trunc Don't truncate output\n -q, --quiet Only show image IDs\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc9c1\uc811 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images\n")),(0,r.kt)("p",null,"\ub9cc\uc57d \ub3c4\ucee4\ub97c \ucd5c\ucd08 \uc124\uce58 \ud6c4 \uc774 \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("p",null,"\uc904 \uc218 \uc788\ub294 argument\uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"-q"),"\ub97c \uc0ac\uc6a9\ud558\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"IMAGE ID")," \ub9cc \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images -q\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"29e70752d7b2\n")),(0,r.kt)("h2",{id:"4-docker-ps"},"4. Docker ps"),(0,r.kt)("p",null,"\ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108 \ub9ac\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps --help\n")),(0,r.kt)("p",null,"docker ps\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 argument\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker ps [OPTIONS]\n\nList containers\n\nOptions:\n -a, --all Show all containers (default shows just running)\n -f, --filter filter Filter output based on conditions provided\n --format string Pretty-print containers using a Go template\n -n, --last int Show n last created containers (includes all states) (default -1)\n -l, --latest Show the latest created container (includes all states)\n --no-trunc Don't truncate output\n -q, --quiet Only display container IDs\n -s, --size Display total file sizes\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc9c1\uc811 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps\n")),(0,r.kt)("p",null,"\ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\uac00 \uc5c6\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n")),(0,r.kt)("p",null,"\ub9cc\uc57d \uc2e4\ud589\ub418\ub294 \ucee8\ud14c\uc774\ub108\uac00 \uc788\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nc1e8f5e89d8d ubuntu "sleep 3600" 13 seconds ago Up 12 seconds trusting_newton\n')),(0,r.kt)("h2",{id:"5-docker-run"},"5. Docker run"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run --help\n")),(0,r.kt)("p",null,"docker run\uc744 \uc2e4\ud589\ud558\ub294 \uba85\ub839\uc5b4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]\n\nRun a command in a new container\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c \uc6b0\ub9ac\uac00 \ud655\uc778\ud574\uc57c \ud558\ub294 \uac83\uc740 \ubc14\ub85c docker run\uc740 \uc138 \uac1c \ud0c0\uc785\uc758 argument\ub97c \ubc1b\ub294\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[OPTIONS]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[COMMAND]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[ARG...]"))),(0,r.kt)("p",null,"\uc9c1\uc811 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"## Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]\ndocker run -it --name demo1 ubuntu:18.04 /bin/bash\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-it")," : ",(0,r.kt)("inlineCode",{parentName:"li"},"-i")," \uc635\uc158 + ",(0,r.kt)("inlineCode",{parentName:"li"},"-t")," \uc635\uc158",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"container \ub97c \uc2e4\ud589\uc2dc\ud0b4\uacfc \ub3d9\uc2dc\uc5d0 interactive \ud55c terminal \ub85c \uc811\uc18d\uc2dc\ucf1c\uc8fc\ub294 \uc635\uc158"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--name")," : name",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 id \ub300\uc2e0, \uad6c\ubd84\ud558\uae30 \uc27d\ub3c4\ub85d \uc9c0\uc815\ud574\uc8fc\ub294 \uc774\ub984"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"/bin/bash"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0b4\uacfc \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ud560 \ucee4\ub9e8\ub4dc\ub85c, ",(0,r.kt)("inlineCode",{parentName:"li"},"/bin/bash")," \ub294 bash \uc258\uc744 \uc5ec\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.")))),(0,r.kt)("p",null,"\uc2e4\ud589 \ud6c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"exit")," \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ucee8\ud14c\uc774\ub108\ub97c \uc885\ub8cc\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774 \uc81c \uc55e\uc11c \ubc30\uc6e0\ub358 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps")," \uba85\ub839\uc5b4\ub97c \uce58\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n")),(0,r.kt)("p",null,"\uc2e4\ud589\ub418\uace0 \uc788\ub294 \ucee8\ud14c\uc774\ub108\uac00 \ub098\uc628\ub2e4\uace0 \ud588\uc9c0\ub9cc \uc5b4\uc9f8\uc11c\uc778\uc9c0 \ubc29\uae08 \uc2e4\ud589\ud55c \ucee8\ud14c\uc774\ub108\uac00 \ubcf4\uc774\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uadf8 \uc774\uc720\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub294 \uae30\ubcf8\uac12\uc73c\ub85c \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\ub97c \ubcf4\uc5ec\uc8fc\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \ubcf4\uace0 \uc2f6\ub2e4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"-a")," \uc635\uc158\uc744 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps -a\n")),(0,r.kt)("p",null,"\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108 \ubaa9\ub85d\ub3c4 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago demo1\n')),(0,r.kt)("h2",{id:"6-docker-exec"},"6. Docker exec"),(0,r.kt)("p",null,"Docker \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uba85\ub839\uc744 \ub0b4\ub9ac\uac70\ub098, \ub0b4\ubd80\ub85c \uc811\uc18d\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker exec --help\n")),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d --name demo2 ubuntu:18.04 sleep 3600\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"-d")," \uc635\uc158\uc740 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \uc2e4\ud589\uc2dc\ucf1c\uc11c, \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \uc811\uc18d \uc885\ub8cc\ub97c \ud558\ub354\ub77c\ub3c4, \uacc4\uc18d \uc2e4\ud589 \uc911\uc774 \ub418\ub3c4\ub85d \ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ud1b5\ud574 \ud604\uc7ac \uc2e4\ud589\uc911\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589 \uc911\uc784\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 4 seconds ago Up 3 seconds demo2\n')),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker exec")," \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c \uc2e4\ud589\uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc5d0 \uc811\uc18d\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker exec -it demo2 /bin/bash\n")),(0,r.kt)("p",null,"\uc774 \uc804\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker run"),"\uacfc \ub3d9\uc77c\ud558\uac8c container \ub0b4\ubd80\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"exit"),"\uc744 \ud1b5\ud574 \uc885\ub8cc\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"7-docker-logs"},"7. Docker logs"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc758 log\ub97c \ud655\uc778\ud558\ub294 \ucee4\ub9e8\ub4dc \uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs --help\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'docker run --name demo3 -d busybox sh -c "while true; do $(echo date); sleep 1; done"\n')),(0,r.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c test \ub77c\ub294 \uc774\ub984\uc758 busybox \ucee8\ud14c\uc774\ub108\ub97c \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub85c \uc2e4\ud589\ud558\uc5ec, 1\ucd08\uc5d0 \ud55c \ubc88\uc529 \ud604\uc7ac \uc2dc\uac04\uc744 \ucd9c\ub825\ud558\ub3c4\ub85d \ud588\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 log\ub97c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs demo3\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \ube44\uc2b7\ud558\uac8c \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Sun Mar 6 11:06:49 UTC 2022\nSun Mar 6 11:06:50 UTC 2022\nSun Mar 6 11:06:51 UTC 2022\nSun Mar 6 11:06:52 UTC 2022\nSun Mar 6 11:06:53 UTC 2022\nSun Mar 6 11:06:54 UTC 2022\n")),(0,r.kt)("p",null,"\uadf8\ub7f0\ub370 \uc774\ub807\uac8c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc5ec\ud0dc\uae4c\uc9c0 \ucc0d\ud78c log \ubc16\uc5d0 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \ub54c ",(0,r.kt)("inlineCode",{parentName:"p"},"-f")," \uc635\uc158\uc744 \uc774\uc6a9\ud574 \uacc4\uc18d watch \ud558\uba70 \ucd9c\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs demo3 -f \n")),(0,r.kt)("h2",{id:"8-docker-stop"},"8. Docker stop"),(0,r.kt)("p",null,"\uc2e4\ud589 \uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc911\ub2e8\uc2dc\ud0a4\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop --help\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ud1b5\ud574 \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" About a minute ago Up About a minute demo3\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 4 minutes ago Up 4 minutes demo2\n')),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker stop")," \uc744 \ud1b5\ud574 \ub3c4\ucee4\ub97c \uc815\uc9c0\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop demo2\n")),(0,r.kt)("p",null,"\uc2e4\ud589 \ud6c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ub2e4\uc2dc \uc785\ub825\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" 2 minutes ago Up 2 minutes demo3\n')),(0,r.kt)("p",null,"\uc704\uc758 \uacb0\uacfc\uc640 \ube44\uad50\ud588\uc744 \ub54c demo2 \ucee8\ud14c\uc774\ub108\uac00 \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108 \ubaa9\ub85d\uc5d0\uc11c \uc0ac\ub77c\uc9c4 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub098\uba38\uc9c0 \ucee8\ud14c\uc774\ub108\ub3c4 \uc815\uc9c0\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop demo3\n")),(0,r.kt)("h2",{id:"9-docker-rm"},"9. Docker rm"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc0ad\uc81c\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm --help\n")),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc885\ub8cc\uac00 \ub41c \uc0c1\ud0dc\ub85c \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps -a"),"\ub97c \ud1b5\ud574\uc11c \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub3c4 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7f0\ub370 \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uc65c \uc9c0\uc6cc\uc57c \ud560\uae4c\uc694?",(0,r.kt)("br",{parentName:"p"}),"\n","\uc885\ub8cc\ub418\uc5b4 \uc788\ub294 \ub3c4\ucee4\uc5d0\ub294 \uc774\uc804\uc5d0 \uc0ac\uc6a9\ud55c \ub370\uc774\ud130\uac00 \uc544\uc9c1 \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0 \ub0a8\uc544\uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub798\uc11c restart \ub4f1\uc744 \ud1b5\ud574\uc11c \ucee8\ud14c\uc774\ub108\ub97c \uc7ac\uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7f0\ub370 \uc774 \uacfc\uc815\uc5d0\uc11c disk\ub97c \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uadf8\ub798\uc11c \uc644\uc804\ud788 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ucee8\ud14c\uc774\ub108\ub97c \uc9c0\uc6b0\uae30 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker rm")," \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud604\uc7ac \ucee8\ud14c\uc774\ub108\ub4e4\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps -a\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 3\uac1c\uc758 \ucee8\ud14c\uc774\ub108\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" 4 minutes ago Exited (137) About a minute ago demo3\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 7 minutes ago Exited (137) 2 minutes ago demo2\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 10 minutes ago Exited (0) 10 minutes ago demo1\n')),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"demo3")," \ucee8\ud14c\uc774\ub108\ub97c \uc0ad\uc81c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm demo3\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps -a")," \uba85\ub839\uc5b4\ub97c \uce58\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 2\uac1c\ub85c \uc904\uc5c8\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 13 minutes ago Exited (137) 8 minutes ago demo2\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 16 minutes ago Exited (0) 16 minutes ago demo1\n')),(0,r.kt)("p",null,"\ub098\uba38\uc9c0 \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \uc0ad\uc81c\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm demo2\ndocker rm demo1\n")),(0,r.kt)("h2",{id:"10-docker-rmi"},"10. Docker rmi"),(0,r.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rmi --help\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ud604\uc7ac \uc5b4\ub5a4 \uc774\ubbf8\uc9c0\ub4e4\uc774 \ub85c\uceec\uc5d0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nbusybox latest a8440bba1bc0 32 hours ago 1.41MB\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"busybox")," \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rmi busybox\n")),(0,r.kt)("p",null,"\ub2e4\uc2dc ",(0,r.kt)("inlineCode",{parentName:"p"},"docker images"),"\ub97c \uce60 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"},"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/751a793c.9126a753.js b/assets/js/751a793c.9126a753.js deleted file mode 100644 index a472d7d1..00000000 --- a/assets/js/751a793c.9126a753.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8932],{3905:(e,n,a)=>{a.d(n,{Zo:()=>u,kt:()=>m});var t=a(7294);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function o(e){for(var n=1;n=0||(r[a]=e[a]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=t.createContext({}),s=function(e){var n=t.useContext(i),a=n;return e&&(a="function"==typeof e?e(n):o(o({},n),e)),a},u=function(e){var n=s(e.components);return t.createElement(i.Provider,{value:n},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var a=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),c=s(a),d=r,m=c["".concat(i,".").concat(d)]||c[d]||k[d]||l;return a?t.createElement(m,o(o({ref:n},u),{},{components:a})):t.createElement(m,o({ref:n},u))}));function m(e,n){var a=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=a.length,o=new Array(l);o[0]=d;var p={};for(var i in n)hasOwnProperty.call(n,i)&&(p[i]=n[i]);p.originalType=e,p[c]="string"==typeof e?e:r,o[1]=p;for(var s=2;s{a.r(n),a.d(n,{assets:()=>i,contentTitle:()=>o,default:()=>k,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var t=a(7462),r=(a(7294),a(3905));const l={title:"[Practice] Docker command",description:"Practice to use docker command.",sidebar_position:4,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,p={unversionedId:"prerequisites/docker/command",id:"prerequisites/docker/command",title:"[Practice] Docker command",description:"Practice to use docker command.",source:"@site/docs/prerequisites/docker/command.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/command",permalink:"/docs/prerequisites/docker/command",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/command.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"[Practice] Docker command",description:"Practice to use docker command.",sidebar_position:4,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"What is Docker?",permalink:"/docs/prerequisites/docker/"},next:{title:"[Practice] Docker images",permalink:"/docs/prerequisites/docker/images"}},i={},s=[{value:"1. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"1-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"2. Docker Pull",id:"2-docker-pull",level:2},{value:"3. Docker images",id:"3-docker-images",level:2},{value:"4. Docker ps",id:"4-docker-ps",level:2},{value:"5. Docker run",id:"5-docker-run",level:2},{value:"6. Docker exec",id:"6-docker-exec",level:2},{value:"7. Docker logs",id:"7-docker-logs",level:2},{value:"8. Docker stop",id:"8-docker-stop",level:2},{value:"9. Docker rm",id:"9-docker-rm",level:2},{value:"10. Docker rmi",id:"10-docker-rmi",level:2},{value:"References",id:"references",level:2}],u={toc:s},c="wrapper";function k(e){let{components:n,...a}=e;return(0,r.kt)(c,(0,t.Z)({},u,a,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"1-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"1. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run hello-world\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Hello from Docker!\nThis message shows that your installation appears to be working correctly.\n....\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"(For ubuntu)")," sudo \uc5c6\uc774 \uc0ac\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 \uc544\ub798 \uc0ac\uc774\ud2b8\ub97c \ucc38\uace0\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user"},"https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user"))),(0,r.kt)("h2",{id:"2-docker-pull"},"2. Docker Pull"),(0,r.kt)("p",null,"docker image registry(\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc800\uc7a5\ud558\uace0 \uacf5\uc720\ud560 \uc218 \uc788\ub294 \uc800\uc7a5\uc18c)\ub85c\ubd80\ud130 Docker image \ub97c \ub85c\uceec\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc544\ub798 \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 docker pull\uc5d0\uc11c \uc0ac\uc6a9 \uac00\ub2a5\ud55c argument\ub4e4\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker pull --help\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]\n\nPull an image or a repository from a registry\n\nOptions:\n -a, --all-tags Download all tagged images in the repository\n --disable-content-trust Skip image verification (default true)\n --platform string Set platform if server is multi-platform capable\n -q, --quiet Suppress verbose output\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c \uc54c \uc218 \uc788\ub294 \uac83\uc740 \ubc14\ub85c docker pull\uc740 \ub450 \uac1c \ud0c0\uc785\uc758 argument\ub97c \ubc1b\ub294\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[OPTIONS]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"NAME[:TAG|@DIGEST]"))),(0,r.kt)("p",null,"help\uc5d0\uc11c \ub098\uc628 ",(0,r.kt)("inlineCode",{parentName:"p"},"-a"),", -",(0,r.kt)("inlineCode",{parentName:"p"},"q")," \uc635\uc158\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 NAME \uc55e\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc9c1\uc811 ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu:18.04")," \uc774\ubbf8\uc9c0\ub97c pull \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker pull ubuntu:18.04\n")),(0,r.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub97c \ud574\uc11d\ud558\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu")," \ub77c\ub294 \uc774\ub984\uc744 \uac00\uc9c4 \uc774\ubbf8\uc9c0 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"18.04")," \ud0dc\uadf8\uac00 \ub2ec\ub824\uc788\ub294 \uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc624\ub77c\ub294 \ub73b\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d, \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"18.04: Pulling from library/ubuntu\n20d796c36622: Pull complete \nDigest: sha256:42cd9143b6060261187a72716906187294b8b66653b50d70bc7a90ccade5c984\nStatus: Downloaded newer image for ubuntu:18.04\ndocker.io/library/ubuntu:18.04\n")),(0,r.kt)("p",null,"\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uba74 ",(0,r.kt)("a",{parentName:"p",href:"http://docker.io/library/"},"docker.io/library")," \ub77c\ub294 \uc774\ub984\uc758 registry \uc5d0\uc11c ubuntu:18.04 \ub77c\ub294 image \ub97c \uc5ec\ub7ec\ubd84\uc758 \ub178\ud2b8\ubd81\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uac8c\ub429\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ucc38\uace0\uc0ac\ud56d",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucd94\ud6c4 ",(0,r.kt)("a",{parentName:"li",href:"http://docker.io"},"docker.io")," \ub098 public \ud55c docker hub \uc640 \uac19\uc740 registry \ub300\uc2e0\uc5d0, \ud2b9\uc815 ",(0,r.kt)("strong",{parentName:"li"},"private")," \ud55c registry \uc5d0\uc11c docker image \ub97c \uac00\uc838\uc640\uc57c \ud558\ub294 \uacbd\uc6b0\uc5d0\ub294, ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/login/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker login"))," \uc744 \ud1b5\ud574\uc11c \ud2b9\uc815 registry \ub97c \ubc14\ub77c\ubcf4\ub3c4\ub85d \ud55c \ub4a4, docker pull \uc744 \uc218\ud589\ud558\ub294 \ud615\ud0dc\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ud639\uc740 insecure registry \ub97c \uc124\uc815\ud558\ub294 ",(0,r.kt)("a",{parentName:"li",href:"https://stackoverflow.com/questions/42211380/add-insecure-registry-to-docker"},"\ubc29\uc548"),"\ub3c4 \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"\ud3d0\uc1c4\ub9dd\uc5d0\uc11c docker image \ub97c ",(0,r.kt)("inlineCode",{parentName:"li"},".tar")," \ud30c\uc77c\uacfc \uac19\uc740 \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uace0 \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/save/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker save")),", ",(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/load/"},(0,r.kt)("inlineCode",{parentName:"a"},"docker load"))," \uc640 \uac19\uc740 \uba85\ub839\uc5b4\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4.")))),(0,r.kt)("h2",{id:"3-docker-images"},"3. Docker images"),(0,r.kt)("p",null,"\ub85c\uceec\uc5d0 \uc874\uc7ac\ud558\ub294 docker image \ub9ac\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images --help\n")),(0,r.kt)("p",null,"docker images\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 argument\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]\n\nList images\n\nOptions:\n -a, --all Show all images (default hides intermediate images)\n --digests Show digests\n -f, --filter filter Filter output based on conditions provided\n --format string Pretty-print images using a Go template\n --no-trunc Don't truncate output\n -q, --quiet Only show image IDs\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc9c1\uc811 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images\n")),(0,r.kt)("p",null,"\ub9cc\uc57d \ub3c4\ucee4\ub97c \ucd5c\ucd08 \uc124\uce58 \ud6c4 \uc774 \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud55c\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("p",null,"\uc904 \uc218 \uc788\ub294 argument\uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"-q"),"\ub97c \uc0ac\uc6a9\ud558\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"IMAGE ID")," \ub9cc \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images -q\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"29e70752d7b2\n")),(0,r.kt)("h2",{id:"4-docker-ps"},"4. Docker ps"),(0,r.kt)("p",null,"\ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108 \ub9ac\uc2a4\ud2b8\ub97c \ucd9c\ub825\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps --help\n")),(0,r.kt)("p",null,"docker ps\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 argument\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker ps [OPTIONS]\n\nList containers\n\nOptions:\n -a, --all Show all containers (default shows just running)\n -f, --filter filter Filter output based on conditions provided\n --format string Pretty-print containers using a Go template\n -n, --last int Show n last created containers (includes all states) (default -1)\n -l, --latest Show the latest created container (includes all states)\n --no-trunc Don't truncate output\n -q, --quiet Only display container IDs\n -s, --size Display total file sizes\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc9c1\uc811 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps\n")),(0,r.kt)("p",null,"\ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\uac00 \uc5c6\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n")),(0,r.kt)("p",null,"\ub9cc\uc57d \uc2e4\ud589\ub418\ub294 \ucee8\ud14c\uc774\ub108\uac00 \uc788\ub2e4\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nc1e8f5e89d8d ubuntu "sleep 3600" 13 seconds ago Up 12 seconds trusting_newton\n')),(0,r.kt)("h2",{id:"5-docker-run"},"5. Docker run"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run --help\n")),(0,r.kt)("p",null,"docker run\uc744 \uc2e4\ud589\ud558\ub294 \uba85\ub839\uc5b4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]\n\nRun a command in a new container\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c \uc6b0\ub9ac\uac00 \ud655\uc778\ud574\uc57c \ud558\ub294 \uac83\uc740 \ubc14\ub85c docker run\uc740 \uc138 \uac1c \ud0c0\uc785\uc758 argument\ub97c \ubc1b\ub294\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[OPTIONS]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[COMMAND]")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"[ARG...]"))),(0,r.kt)("p",null,"\uc9c1\uc811 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"## Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]\ndocker run -it --name demo1 ubuntu:18.04 /bin/bash\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-it")," : ",(0,r.kt)("inlineCode",{parentName:"li"},"-i")," \uc635\uc158 + ",(0,r.kt)("inlineCode",{parentName:"li"},"-t")," \uc635\uc158",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"container \ub97c \uc2e4\ud589\uc2dc\ud0b4\uacfc \ub3d9\uc2dc\uc5d0 interactive \ud55c terminal \ub85c \uc811\uc18d\uc2dc\ucf1c\uc8fc\ub294 \uc635\uc158"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--name")," : name",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 id \ub300\uc2e0, \uad6c\ubd84\ud558\uae30 \uc27d\ub3c4\ub85d \uc9c0\uc815\ud574\uc8fc\ub294 \uc774\ub984"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"/bin/bash"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0b4\uacfc \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ud560 \ucee4\ub9e8\ub4dc\ub85c, ",(0,r.kt)("inlineCode",{parentName:"li"},"/bin/bash")," \ub294 bash \uc258\uc744 \uc5ec\ub294 \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.")))),(0,r.kt)("p",null,"\uc2e4\ud589 \ud6c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"exit")," \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ucee8\ud14c\uc774\ub108\ub97c \uc885\ub8cc\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774 \uc81c \uc55e\uc11c \ubc30\uc6e0\ub358 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps")," \uba85\ub839\uc5b4\ub97c \uce58\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n")),(0,r.kt)("p",null,"\uc2e4\ud589\ub418\uace0 \uc788\ub294 \ucee8\ud14c\uc774\ub108\uac00 \ub098\uc628\ub2e4\uace0 \ud588\uc9c0\ub9cc \uc5b4\uc9f8\uc11c\uc778\uc9c0 \ubc29\uae08 \uc2e4\ud589\ud55c \ucee8\ud14c\uc774\ub108\uac00 \ubcf4\uc774\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uadf8 \uc774\uc720\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub294 \uae30\ubcf8\uac12\uc73c\ub85c \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\ub97c \ubcf4\uc5ec\uc8fc\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \ubcf4\uace0 \uc2f6\ub2e4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"-a")," \uc635\uc158\uc744 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps -a\n")),(0,r.kt)("p",null,"\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108 \ubaa9\ub85d\ub3c4 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago demo1\n')),(0,r.kt)("h2",{id:"6-docker-exec"},"6. Docker exec"),(0,r.kt)("p",null,"Docker \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uba85\ub839\uc744 \ub0b4\ub9ac\uac70\ub098, \ub0b4\ubd80\ub85c \uc811\uc18d\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker exec --help\n")),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d --name demo2 ubuntu:18.04 sleep 3600\n")),(0,r.kt)("p",null,"\uc5ec\uae30\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"-d")," \uc635\uc158\uc740 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \uc2e4\ud589\uc2dc\ucf1c\uc11c, \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \uc811\uc18d \uc885\ub8cc\ub97c \ud558\ub354\ub77c\ub3c4, \uacc4\uc18d \uc2e4\ud589 \uc911\uc774 \ub418\ub3c4\ub85d \ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ud1b5\ud574 \ud604\uc7ac \uc2e4\ud589\uc911\uc778\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589 \uc911\uc784\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 4 seconds ago Up 3 seconds demo2\n')),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker exec")," \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c \uc2e4\ud589\uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc5d0 \uc811\uc18d\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker exec -it demo2 /bin/bash\n")),(0,r.kt)("p",null,"\uc774 \uc804\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker run"),"\uacfc \ub3d9\uc77c\ud558\uac8c container \ub0b4\ubd80\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"exit"),"\uc744 \ud1b5\ud574 \uc885\ub8cc\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"7-docker-logs"},"7. Docker logs"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc758 log\ub97c \ud655\uc778\ud558\ub294 \ucee4\ub9e8\ub4dc \uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs --help\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'docker run --name demo3 -d busybox sh -c "while true; do $(echo date); sleep 1; done"\n')),(0,r.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c test \ub77c\ub294 \uc774\ub984\uc758 busybox \ucee8\ud14c\uc774\ub108\ub97c \ubc31\uadf8\ub77c\uc6b4\ub4dc\uc5d0\uc11c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub85c \uc2e4\ud589\ud558\uc5ec, 1\ucd08\uc5d0 \ud55c \ubc88\uc529 \ud604\uc7ac \uc2dc\uac04\uc744 \ucd9c\ub825\ud558\ub3c4\ub85d \ud588\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 log\ub97c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs demo3\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \uc544\ub798\uc640 \ube44\uc2b7\ud558\uac8c \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Sun Mar 6 11:06:49 UTC 2022\nSun Mar 6 11:06:50 UTC 2022\nSun Mar 6 11:06:51 UTC 2022\nSun Mar 6 11:06:52 UTC 2022\nSun Mar 6 11:06:53 UTC 2022\nSun Mar 6 11:06:54 UTC 2022\n")),(0,r.kt)("p",null,"\uadf8\ub7f0\ub370 \uc774\ub807\uac8c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc5ec\ud0dc\uae4c\uc9c0 \ucc0d\ud78c log \ubc16\uc5d0 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \ub54c ",(0,r.kt)("inlineCode",{parentName:"p"},"-f")," \uc635\uc158\uc744 \uc774\uc6a9\ud574 \uacc4\uc18d watch \ud558\uba70 \ucd9c\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker logs demo3 -f \n")),(0,r.kt)("h2",{id:"8-docker-stop"},"8. Docker stop"),(0,r.kt)("p",null,"\uc2e4\ud589 \uc911\uc778 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc911\ub2e8\uc2dc\ud0a4\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop --help\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ud1b5\ud574 \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" About a minute ago Up About a minute demo3\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 4 minutes ago Up 4 minutes demo2\n')),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker stop")," \uc744 \ud1b5\ud574 \ub3c4\ucee4\ub97c \uc815\uc9c0\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop demo2\n")),(0,r.kt)("p",null,"\uc2e4\ud589 \ud6c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps"),"\ub97c \ub2e4\uc2dc \uc785\ub825\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" 2 minutes ago Up 2 minutes demo3\n')),(0,r.kt)("p",null,"\uc704\uc758 \uacb0\uacfc\uc640 \ube44\uad50\ud588\uc744 \ub54c demo2 \ucee8\ud14c\uc774\ub108\uac00 \ud604\uc7ac \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108 \ubaa9\ub85d\uc5d0\uc11c \uc0ac\ub77c\uc9c4 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub098\uba38\uc9c0 \ucee8\ud14c\uc774\ub108\ub3c4 \uc815\uc9c0\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker stop demo3\n")),(0,r.kt)("h2",{id:"9-docker-rm"},"9. Docker rm"),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc0ad\uc81c\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm --help\n")),(0,r.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc885\ub8cc\uac00 \ub41c \uc0c1\ud0dc\ub85c \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub798\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"docker ps -a"),"\ub97c \ud1b5\ud574\uc11c \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub3c4 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7f0\ub370 \uc885\ub8cc\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uc65c \uc9c0\uc6cc\uc57c \ud560\uae4c\uc694?",(0,r.kt)("br",{parentName:"p"}),"\n","\uc885\ub8cc\ub418\uc5b4 \uc788\ub294 \ub3c4\ucee4\uc5d0\ub294 \uc774\uc804\uc5d0 \uc0ac\uc6a9\ud55c \ub370\uc774\ud130\uac00 \uc544\uc9c1 \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0 \ub0a8\uc544\uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub798\uc11c restart \ub4f1\uc744 \ud1b5\ud574\uc11c \ucee8\ud14c\uc774\ub108\ub97c \uc7ac\uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uadf8\ub7f0\ub370 \uc774 \uacfc\uc815\uc5d0\uc11c disk\ub97c \uc0ac\uc6a9\ud558\uac8c \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uadf8\ub798\uc11c \uc644\uc804\ud788 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ucee8\ud14c\uc774\ub108\ub97c \uc9c0\uc6b0\uae30 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"docker rm")," \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud604\uc7ac \ucee8\ud14c\uc774\ub108\ub4e4\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker ps -a\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 3\uac1c\uc758 \ucee8\ud14c\uc774\ub108\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n730391669c39 busybox "sh -c \'while true; \u2026" 4 minutes ago Exited (137) About a minute ago demo3\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 7 minutes ago Exited (137) 2 minutes ago demo2\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 10 minutes ago Exited (0) 10 minutes ago demo1\n')),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"demo3")," \ucee8\ud14c\uc774\ub108\ub97c \uc0ad\uc81c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm demo3\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"docker ps -a")," \uba85\ub839\uc5b4\ub97c \uce58\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 2\uac1c\ub85c \uc904\uc5c8\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nfc88a83e90f0 ubuntu:18.04 "sleep 3600" 13 minutes ago Exited (137) 8 minutes ago demo2\n4c1aa74a382a ubuntu:18.04 "/bin/bash" 16 minutes ago Exited (0) 16 minutes ago demo1\n')),(0,r.kt)("p",null,"\ub098\uba38\uc9c0 \ucee8\ud14c\uc774\ub108\ub4e4\ub3c4 \uc0ad\uc81c\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rm demo2\ndocker rm demo1\n")),(0,r.kt)("h2",{id:"10-docker-rmi"},"10. Docker rmi"),(0,r.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud558\ub294 \ucee4\ub9e8\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rmi --help\n")),(0,r.kt)("p",null,"\uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ud604\uc7ac \uc5b4\ub5a4 \uc774\ubbf8\uc9c0\ub4e4\uc774 \ub85c\uceec\uc5d0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker images\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nbusybox latest a8440bba1bc0 32 hours ago 1.41MB\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"busybox")," \uc774\ubbf8\uc9c0\ub97c \uc0ad\uc81c\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker rmi busybox\n")),(0,r.kt)("p",null,"\ub2e4\uc2dc ",(0,r.kt)("inlineCode",{parentName:"p"},"docker images"),"\ub97c \uce60 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"REPOSITORY TAG IMAGE ID CREATED SIZE\nubuntu 18.04 29e70752d7b2 2 days ago 56.7MB\n")),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"},"https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7bb5633a.946eebbb.js b/assets/js/7bb5633a.946eebbb.js new file mode 100644 index 00000000..a19e1864 --- /dev/null +++ b/assets/js/7bb5633a.946eebbb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2803],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),c=s(n),d=o,y=c["".concat(p,".").concat(d)]||c[d]||u[d]||a;return n?r.createElement(y,l(l({ref:t},m),{},{components:n})):r.createElement(y,l({ref:t},m))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:o,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"1. What is API Deployment?",description:"",sidebar_position:1,date:new Date("2021-12-22T00:00:00.000Z"),lastmod:new Date("2021-12-22T00:00:00.000Z"),contributors:["Youngcheol Jang"]},l=void 0,i={unversionedId:"api-deployment/what-is-api-deployment",id:"version-1.0/api-deployment/what-is-api-deployment",title:"1. What is API Deployment?",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/what-is-api-deployment.md",sourceDirName:"api-deployment",slug:"/api-deployment/what-is-api-deployment",permalink:"/docs/1.0/api-deployment/what-is-api-deployment",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/what-is-api-deployment.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. What is API Deployment?",description:"",sidebar_position:1,date:"2021-12-22T00:00:00.000Z",lastmod:"2021-12-22T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"13. Component - Debugging",permalink:"/docs/1.0/kubeflow/how-to-debug"},next:{title:"2. Deploy SeldonDeployment",permalink:"/docs/1.0/api-deployment/seldon-iris"}},p={},s=[{value:"API Deployment\ub780?",id:"api-deployment\ub780",level:2},{value:"Serving Framework",id:"serving-framework",level:2}],m={toc:s},c="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"api-deployment\ub780"},"API Deployment\ub780?"),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ud559\uc2b5\ud55c \ub4a4\uc5d0\ub294 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud574\uc57c \ud560\uae4c\uc694?",(0,o.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd\uc744 \ud559\uc2b5\ud560 \ub54c\ub294 \ub354 \ub192\uc740 \uc131\ub2a5\uc758 \ubaa8\ub378\uc774 \ub098\uc624\uae30\ub97c \uae30\ub300\ud558\uc9c0\ub9cc, \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucd94\ub860\uc744 \ud560 \ub54c\ub294 \ube60\ub974\uace0 \uc27d\uac8c \ucd94\ub860 \uacb0\uacfc\ub97c \ubc1b\uc544\ubcf4\uace0 \uc2f6\uc744 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ubaa8\ub378\uc758 \ucd94\ub860 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uace0\uc790 \ud560 \ub54c \uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc774\ub098 \ud30c\uc774\uc36c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ud1b5\ud574 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \ub85c\ub4dc\ud55c \ub4a4 \ucd94\ub860\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\uc9c0\ub9cc \uc774\ub7f0 \ubc29\ubc95\uc740 \ubaa8\ub378\uc774 \ud074\uc218\ub85d \ubaa8\ub378\uc744 \ubd88\ub7ec\uc624\ub294 \ub370 \ub9ce\uc740 \uc2dc\uac04\uc744 \uc18c\uc694\ud558\uac8c \ub418\uc5b4\uc11c \ube44\ud6a8\uc728\uc801\uc785\ub2c8\ub2e4. \ub610\ud55c \uc774\ub807\uac8c \uc774\uc6a9\ud558\uba74 \ub9ce\uc740 \uc0ac\ub78c\uc774 \ubaa8\ub378\uc744 \uc774\uc6a9\ud560 \uc218 \uc5c6\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc788\ub294 \ud658\uacbd\uc5d0\uc11c\ubc16\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uadf8\ub798\uc11c \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uc774 \uc0ac\uc6a9\ub420 \ub54c\ub294 API\ub97c \uc774\uc6a9\ud574\uc11c \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ubaa8\ub378\uc740 API \uc11c\ubc84\uac00 \uad6c\ub3d9\ub418\ub294 \ud658\uacbd\uc5d0\uc11c \ud55c \ubc88\ub9cc \ub85c\ub4dc\uac00 \ub418\uba70, DNS\ub97c \ud65c\uc6a9\ud558\uc5ec \uc678\ubd80\uc5d0\uc11c\ub3c4 \uc27d\uac8c \ucd94\ub860 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uace0 \ub2e4\ub978 \uc11c\ube44\uc2a4\uc640 \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ud558\uc9c0\ub9cc \ubaa8\ub378\uc744 API\ub85c \ub9cc\ub4dc\ub294 \uc791\uc5c5\uc5d0\ub294 \uc0dd\uac01\ubcf4\ub2e4 \ub9ce\uc740 \ubd80\uc218\uc801\uc778 \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c API\ub85c \ub9cc\ub4dc\ub294 \uc791\uc5c5\uc744 \ub354 \uc27d\uac8c \ud558\uae30 \uc704\ud574\uc11c Tensorflow\uc640 \uac19\uc740 \uba38\uc2e0\ub7ec\ub2dd \ud504\ub808\uc784\uc6cc\ud06c \uc9c4\uc601\uc5d0\uc11c\ub294 \ucd94\ub860 \uc5d4\uc9c4(Inference engine)\uc744 \uac1c\ubc1c\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \uc774\uc6a9\ud558\uba74 \ud574\ub2f9 \uba38\uc2e0\ub7ec\ub2dd \ud504\ub808\uc784\uc6cc\ud06c\ub85c \uac1c\ubc1c\ub418\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \ubd88\ub7ec\uc640 \ucd94\ub860\uc774 \uac00\ub2a5\ud55c API(REST \ub610\ub294 gRPC)\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ucd94\ub860 \uc5d4\uc9c4\uc744 \ud65c\uc6a9\ud558\uc5ec \uad6c\ucd95\ud55c API \uc11c\ubc84\ub85c \ucd94\ub860\ud558\uace0\uc790 \ud558\ub294 \ub370\uc774\ud130\ub97c \ub2f4\uc544 \uc694\uccad\uc744 \ubcf4\ub0b4\uba74, \ucd94\ub860 \uc5d4\uc9c4\uc774 \ucd94\ub860 \uacb0\uacfc\ub97c \uc751\ub2f5\uc5d0 \ub2f4\uc544 \uc804\uc1a1\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub300\ud45c\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4 \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/tensorflow/serving"},"Tensorflow : Tensorflow Serving")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/pytorch/serve"},"PyTorch : Torchserve")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/microsoft/onnxruntime"},"Onnx : Onnx Runtime"))),(0,o.kt)("p",null,"\uc624\ud504\uc18c\uc2a4\uc5d0\uc11c \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc, \ub9ce\uc774 \uc4f0\uc774\ub294 sklearn, xgboost \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc704\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub3c4 \uac1c\ubc1c\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\ucc98\ub7fc \ubaa8\ub378\uc758 \ucd94\ub860 \uacb0\uacfc\ub97c API\uc758 \ud615\ud0dc\ub85c \ubc1b\uc544\ubcfc \uc218 \uc788\ub3c4\ub85d \ubc30\ud3ec\ud558\ub294 \uac83\uc744 ",(0,o.kt)("strong",{parentName:"p"},"API Deployment"),"\ub77c\uace0 \ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"serving-framework"},"Serving Framework"),(0,o.kt)("p",null,"\uc704\uc5d0\uc11c \ub2e4\uc591\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\ub2e4\ub294 \uc0ac\uc2e4\uc744 \uc18c\uac1c\ud574 \ub4dc\ub838\uc2b5\ub2c8\ub2e4.\n\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd\uc5d0\uc11c \uc774\ub7ec\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \uc0ac\uc6a9\ud558\uc5ec API Deployment\ub97c \ud55c\ub2e4\uba74 \uc5b4\ub5a4 \uc791\uc5c5\uc774 \ud544\uc694\ud560\uae4c\uc694?\n\ucd94\ub860 \uc5d4\uc9c4\uc744 \ubc30\ud3ec\ud558\uae30 \uc704\ud55c Deployment, \ucd94\ub860 \uc694\uccad\uc744 \ubcf4\ub0bc Endpoint\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud55c Service,\n\uc678\ubd80\uc5d0\uc11c\uc758 \ucd94\ub860 \uc694\uccad\uc744 \ucd94\ub860 \uc5d4\uc9c4\uc73c\ub85c \ubcf4\ub0b4\uae30 \uc704\ud55c Ingress \ub4f1 \ub9ce\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ub9ac\uc18c\uc2a4\ub97c \ubc30\ud3ec\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\uc774\uac83 \uc774\uc678\uc5d0\ub3c4, \ub9ce\uc740 \ucd94\ub860 \uc694\uccad\uc774 \ub4e4\uc5b4\uc654\uc744 \uacbd\uc6b0\uc758 \uc2a4\ucf00\uc77c \uc544\uc6c3(scale-out), \ucd94\ub860 \uc5d4\uc9c4 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ubaa8\ub2c8\ud130\ub9c1, \uac1c\uc120\ub41c \ubaa8\ub378\uc774 \ub098\uc654\uc744 \uacbd\uc6b0 \ubc84\uc804 \uc5c5\ub370\uc774\ud2b8 \ub4f1 \ucd94\ub860 \uc5d4\uc9c4\uc744 \uc6b4\uc601\ud560 \ub54c\uc758 \uc694\uad6c\uc0ac\ud56d\uc740 \ud55c\ub450 \uac00\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\ub7ec\ud55c \ub9ce\uc740 \uc694\uad6c\uc0ac\ud56d\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd \uc704\uc5d0\uc11c \ud55c \ubc88 \ub354 \ucd94\uc0c1\ud654\ud55c ",(0,o.kt)("strong",{parentName:"p"},"Serving Framework"),"\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uac1c\ubc1c\ub41c Serving Framework\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core"},"Seldon Core")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/kserve"},"Kserve")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/bentoml/BentoML"},"BentoML"))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 Seldon Core\ub97c \uc0ac\uc6a9\ud558\uc5ec API Deployment\ub97c \ud558\ub294 \uacfc\uc815\uc744 \ub2e4\ub8e8\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7bb5633a.e44e68c8.js b/assets/js/7bb5633a.e44e68c8.js deleted file mode 100644 index 20174bbf..00000000 --- a/assets/js/7bb5633a.e44e68c8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2803],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=s(n),d=o,y=u["".concat(p,".").concat(d)]||u[d]||c[d]||a;return n?r.createElement(y,l(l({ref:t},m),{},{components:n})):r.createElement(y,l({ref:t},m))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:o,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"1. What is API Deployment?",description:"",sidebar_position:1,date:new Date("2021-12-22T00:00:00.000Z"),lastmod:new Date("2021-12-22T00:00:00.000Z"),contributors:["Youngcheol Jang"]},l=void 0,i={unversionedId:"api-deployment/what-is-api-deployment",id:"version-1.0/api-deployment/what-is-api-deployment",title:"1. What is API Deployment?",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/what-is-api-deployment.md",sourceDirName:"api-deployment",slug:"/api-deployment/what-is-api-deployment",permalink:"/docs/1.0/api-deployment/what-is-api-deployment",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/what-is-api-deployment.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. What is API Deployment?",description:"",sidebar_position:1,date:"2021-12-22T00:00:00.000Z",lastmod:"2021-12-22T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"13. Component - Debugging",permalink:"/docs/1.0/kubeflow/how-to-debug"},next:{title:"2. Deploy SeldonDeployment",permalink:"/docs/1.0/api-deployment/seldon-iris"}},p={},s=[{value:"API Deployment\ub780?",id:"api-deployment\ub780",level:2},{value:"Serving Framework",id:"serving-framework",level:2}],m={toc:s},u="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"api-deployment\ub780"},"API Deployment\ub780?"),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ud559\uc2b5\ud55c \ub4a4\uc5d0\ub294 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud574\uc57c \ud560\uae4c\uc694?",(0,o.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd\uc744 \ud559\uc2b5\ud560 \ub54c\ub294 \ub354 \ub192\uc740 \uc131\ub2a5\uc758 \ubaa8\ub378\uc774 \ub098\uc624\uae30\ub97c \uae30\ub300\ud558\uc9c0\ub9cc, \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucd94\ub860\uc744 \ud560 \ub54c\ub294 \ube60\ub974\uace0 \uc27d\uac8c \ucd94\ub860 \uacb0\uacfc\ub97c \ubc1b\uc544\ubcf4\uace0 \uc2f6\uc744 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ubaa8\ub378\uc758 \ucd94\ub860 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uace0\uc790 \ud560 \ub54c \uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc774\ub098 \ud30c\uc774\uc36c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ud1b5\ud574 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \ub85c\ub4dc\ud55c \ub4a4 \ucd94\ub860\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\uc9c0\ub9cc \uc774\ub7f0 \ubc29\ubc95\uc740 \ubaa8\ub378\uc774 \ud074\uc218\ub85d \ubaa8\ub378\uc744 \ubd88\ub7ec\uc624\ub294 \ub370 \ub9ce\uc740 \uc2dc\uac04\uc744 \uc18c\uc694\ud558\uac8c \ub418\uc5b4\uc11c \ube44\ud6a8\uc728\uc801\uc785\ub2c8\ub2e4. \ub610\ud55c \uc774\ub807\uac8c \uc774\uc6a9\ud558\uba74 \ub9ce\uc740 \uc0ac\ub78c\uc774 \ubaa8\ub378\uc744 \uc774\uc6a9\ud560 \uc218 \uc5c6\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc788\ub294 \ud658\uacbd\uc5d0\uc11c\ubc16\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uadf8\ub798\uc11c \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uc774 \uc0ac\uc6a9\ub420 \ub54c\ub294 API\ub97c \uc774\uc6a9\ud574\uc11c \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ubaa8\ub378\uc740 API \uc11c\ubc84\uac00 \uad6c\ub3d9\ub418\ub294 \ud658\uacbd\uc5d0\uc11c \ud55c \ubc88\ub9cc \ub85c\ub4dc\uac00 \ub418\uba70, DNS\ub97c \ud65c\uc6a9\ud558\uc5ec \uc678\ubd80\uc5d0\uc11c\ub3c4 \uc27d\uac8c \ucd94\ub860 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uace0 \ub2e4\ub978 \uc11c\ube44\uc2a4\uc640 \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ud558\uc9c0\ub9cc \ubaa8\ub378\uc744 API\ub85c \ub9cc\ub4dc\ub294 \uc791\uc5c5\uc5d0\ub294 \uc0dd\uac01\ubcf4\ub2e4 \ub9ce\uc740 \ubd80\uc218\uc801\uc778 \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c API\ub85c \ub9cc\ub4dc\ub294 \uc791\uc5c5\uc744 \ub354 \uc27d\uac8c \ud558\uae30 \uc704\ud574\uc11c Tensorflow\uc640 \uac19\uc740 \uba38\uc2e0\ub7ec\ub2dd \ud504\ub808\uc784\uc6cc\ud06c \uc9c4\uc601\uc5d0\uc11c\ub294 \ucd94\ub860 \uc5d4\uc9c4(Inference engine)\uc744 \uac1c\ubc1c\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \uc774\uc6a9\ud558\uba74 \ud574\ub2f9 \uba38\uc2e0\ub7ec\ub2dd \ud504\ub808\uc784\uc6cc\ud06c\ub85c \uac1c\ubc1c\ub418\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \ubd88\ub7ec\uc640 \ucd94\ub860\uc774 \uac00\ub2a5\ud55c API(REST \ub610\ub294 gRPC)\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ucd94\ub860 \uc5d4\uc9c4\uc744 \ud65c\uc6a9\ud558\uc5ec \uad6c\ucd95\ud55c API \uc11c\ubc84\ub85c \ucd94\ub860\ud558\uace0\uc790 \ud558\ub294 \ub370\uc774\ud130\ub97c \ub2f4\uc544 \uc694\uccad\uc744 \ubcf4\ub0b4\uba74, \ucd94\ub860 \uc5d4\uc9c4\uc774 \ucd94\ub860 \uacb0\uacfc\ub97c \uc751\ub2f5\uc5d0 \ub2f4\uc544 \uc804\uc1a1\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub300\ud45c\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4 \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/tensorflow/serving"},"Tensorflow : Tensorflow Serving")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/pytorch/serve"},"PyTorch : Torchserve")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/microsoft/onnxruntime"},"Onnx : Onnx Runtime"))),(0,o.kt)("p",null,"\uc624\ud504\uc18c\uc2a4\uc5d0\uc11c \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc, \ub9ce\uc774 \uc4f0\uc774\ub294 sklearn, xgboost \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc704\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub3c4 \uac1c\ubc1c\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\ucc98\ub7fc \ubaa8\ub378\uc758 \ucd94\ub860 \uacb0\uacfc\ub97c API\uc758 \ud615\ud0dc\ub85c \ubc1b\uc544\ubcfc \uc218 \uc788\ub3c4\ub85d \ubc30\ud3ec\ud558\ub294 \uac83\uc744 ",(0,o.kt)("strong",{parentName:"p"},"API Deployment"),"\ub77c\uace0 \ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"serving-framework"},"Serving Framework"),(0,o.kt)("p",null,"\uc704\uc5d0\uc11c \ub2e4\uc591\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\ub2e4\ub294 \uc0ac\uc2e4\uc744 \uc18c\uac1c\ud574 \ub4dc\ub838\uc2b5\ub2c8\ub2e4.\n\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd\uc5d0\uc11c \uc774\ub7ec\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \uc0ac\uc6a9\ud558\uc5ec API Deployment\ub97c \ud55c\ub2e4\uba74 \uc5b4\ub5a4 \uc791\uc5c5\uc774 \ud544\uc694\ud560\uae4c\uc694?\n\ucd94\ub860 \uc5d4\uc9c4\uc744 \ubc30\ud3ec\ud558\uae30 \uc704\ud55c Deployment, \ucd94\ub860 \uc694\uccad\uc744 \ubcf4\ub0bc Endpoint\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud55c Service,\n\uc678\ubd80\uc5d0\uc11c\uc758 \ucd94\ub860 \uc694\uccad\uc744 \ucd94\ub860 \uc5d4\uc9c4\uc73c\ub85c \ubcf4\ub0b4\uae30 \uc704\ud55c Ingress \ub4f1 \ub9ce\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ub9ac\uc18c\uc2a4\ub97c \ubc30\ud3ec\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\uc774\uac83 \uc774\uc678\uc5d0\ub3c4, \ub9ce\uc740 \ucd94\ub860 \uc694\uccad\uc774 \ub4e4\uc5b4\uc654\uc744 \uacbd\uc6b0\uc758 \uc2a4\ucf00\uc77c \uc544\uc6c3(scale-out), \ucd94\ub860 \uc5d4\uc9c4 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ubaa8\ub2c8\ud130\ub9c1, \uac1c\uc120\ub41c \ubaa8\ub378\uc774 \ub098\uc654\uc744 \uacbd\uc6b0 \ubc84\uc804 \uc5c5\ub370\uc774\ud2b8 \ub4f1 \ucd94\ub860 \uc5d4\uc9c4\uc744 \uc6b4\uc601\ud560 \ub54c\uc758 \uc694\uad6c\uc0ac\ud56d\uc740 \ud55c\ub450 \uac00\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\ub7ec\ud55c \ub9ce\uc740 \uc694\uad6c\uc0ac\ud56d\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd \uc704\uc5d0\uc11c \ud55c \ubc88 \ub354 \ucd94\uc0c1\ud654\ud55c ",(0,o.kt)("strong",{parentName:"p"},"Serving Framework"),"\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uac1c\ubc1c\ub41c Serving Framework\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core"},"Seldon Core")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/kserve"},"Kserve")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/bentoml/BentoML"},"BentoML"))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 Seldon Core\ub97c \uc0ac\uc6a9\ud558\uc5ec API Deployment\ub97c \ud558\ub294 \uacfc\uc815\uc744 \ub2e4\ub8e8\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7ef46b74.43146a8a.js b/assets/js/7ef46b74.43146a8a.js new file mode 100644 index 00000000..ffc3090e --- /dev/null +++ b/assets/js/7ef46b74.43146a8a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2676],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>f});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function p(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var i=a.createContext({}),u=function(t){var e=a.useContext(i),n=e;return t&&(n="function"==typeof t?t(e):p(p({},e),t)),n},d=function(t){var e=u(t.components);return a.createElement(i.Provider,{value:e},t.children)},s="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},c=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,o=t.originalType,i=t.parentName,d=l(t,["components","mdxType","originalType","parentName"]),s=u(n),c=r,f=s["".concat(i,".").concat(c)]||s[c]||m[c]||o;return n?a.createElement(f,p(p({ref:e},d),{},{components:n})):a.createElement(f,p({ref:e},d))}));function f(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=n.length,p=new Array(o);p[0]=c;var l={};for(var i in e)hasOwnProperty.call(e,i)&&(l[i]=e[i]);l.originalType=t,l[s]="string"==typeof t?t:r,p[1]=l;for(var u=2;u{n.r(e),n.d(e,{assets:()=>i,contentTitle:()=>p,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const o={title:"8. Component - InputPath/OutputPath",description:"",sidebar_position:8,contributors:["Jongseob Jeon","SeungTae Kim"]},p=void 0,l={unversionedId:"kubeflow/advanced-component",id:"kubeflow/advanced-component",title:"8. Component - InputPath/OutputPath",description:"",source:"@site/docs/kubeflow/advanced-component.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-component",permalink:"/docs/kubeflow/advanced-component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-component.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:8,frontMatter:{title:"8. Component - InputPath/OutputPath",description:"",sidebar_position:8,contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"7. Pipeline - Run",permalink:"/docs/kubeflow/basic-run"},next:{title:"9. Component - Environment",permalink:"/docs/kubeflow/advanced-environment"}},i={},u=[{value:"Complex Outputs",id:"complex-outputs",level:2},{value:"Component Contents",id:"component-contents",level:2},{value:"Component Wrapper",id:"component-wrapper",level:2},{value:"Define a standalone Python function",id:"define-a-standalone-python-function",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"Rule to use InputPath/OutputPath",id:"rule-to-use-inputpathoutputpath",level:2},{value:"Load Data Component",id:"load-data-component",level:3},{value:"Write Pipeline",id:"write-pipeline",level:3}],d={toc:u},s="wrapper";function m(t){let{components:e,...n}=t;return(0,r.kt)(s,(0,a.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"complex-outputs"},"Complex Outputs"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/kubeflow-concepts#component-contents"},"Kubeflow Concepts")," \uc608\uc2dc\ub85c \ub098\uc654\ub358 \ucf54\ub4dc\ub97c \ucef4\ud3ec\ub10c\ud2b8\ub85c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"component-contents"},"Component Contents"),(0,r.kt)("p",null,"\uc544\ub798 \ucf54\ub4dc\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/kubeflow-concepts#component-contents"},"Kubeflow Concepts"),"\uc5d0\uc11c \uc0ac\uc6a9\ud588\ub358 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import dill\nimport pandas as pd\n\nfrom sklearn.svm import SVC\n\ntrain_data = pd.read_csv(train_data_path)\ntrain_target = pd.read_csv(train_target_path)\n\nclf = SVC(kernel=kernel)\nclf.fit(train_data, train_target)\n\nwith open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("h2",{id:"component-wrapper"},"Component Wrapper"),(0,r.kt)("h3",{id:"define-a-standalone-python-function"},"Define a standalone Python function"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uc5d0 \ud544\uc694\ud55c Config\ub4e4\uacfc \ud568\uaed8 \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'def train_from_csv(\n train_data_path: str,\n train_target_path: str,\n model_path: str,\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"../kubeflow/basic-component"},"Basic Usage Component"),"\uc5d0\uc11c \uc124\uba85\ud560 \ub54c \uc785\ub825\uacfc \ucd9c\ub825\uc5d0 \ub300\ud55c \ud0c0\uc785 \ud78c\ud2b8\ub97c \uc801\uc5b4\uc57c \ud55c\ub2e4\uace0 \uc124\uba85 \ud588\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9cc\uc57d json\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ubcf8 \ud0c0\uc785\uc774 \uc544\ub2cc dataframe, model\uc640 \uac19\uc774 \ubcf5\uc7a1\ud55c \uac1d\uccb4\ub4e4\uc740 \uc5b4\ub5bb\uac8c \ud560\uae4c\uc694?"),(0,r.kt)("p",null,"\ud30c\uc774\uc36c\uc5d0\uc11c \ud568\uc218\uac04\uc5d0 \uac12\uc744 \uc804\ub2ec\ud560 \ub54c, \uac1d\uccb4\ub97c \ubc18\ud658\ud574\ub3c4 \uadf8 \uac12\uc774 \ud638\uc2a4\ud2b8\uc758 \uba54\ubaa8\ub9ac\uc5d0 \uc800\uc7a5\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \ub2e4\uc74c \ud568\uc218\uc5d0\uc11c\ub3c4 \uac19\uc740 \uac1d\uccb4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc kubeflow\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc740 \uac01\uac01 \ucee8\ud14c\uc774\ub108 \uc704\uc5d0\uc11c \uc11c\ub85c \ub3c5\ub9bd\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc989, \uac19\uc740 \uba54\ubaa8\ub9ac\ub97c \uacf5\uc720\ud558\uace0 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ubcf4\ud1b5\uc758 \ud30c\uc774\uc36c \ud568\uc218\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uacfc \uac19\uc774 \uac1d\uccb4\ub97c \uc804\ub2ec\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc5d0 \ub118\uaca8 \uc904 \uc218 \uc788\ub294 \uc815\ubcf4\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"json")," \uc73c\ub85c\ub9cc \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c Model\uc774\ub098 DataFrame\uacfc \uac19\uc774 json \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc5c6\ub294 \ud0c0\uc785\uc758 \uac1d\uccb4\ub294 \ub2e4\ub978 \ubc29\ubc95\uc744 \ud1b5\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"Kubeflow\uc5d0\uc11c\ub294 \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 json-serializable \ud558\uc9c0 \uc54a\uc740 \ud0c0\uc785\uc758 \uac1d\uccb4\ub294 \uba54\ubaa8\ub9ac \ub300\uc2e0 \ud30c\uc77c\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud55c \ub4a4, \uadf8 \ud30c\uc77c\uc744 \uc774\uc6a9\ud574 \uc815\ubcf4\ub97c \uc804\ub2ec\ud569\ub2c8\ub2e4. \uc800\uc7a5\ub41c \ud30c\uc77c\uc758 \uacbd\ub85c\ub294 str\uc774\uae30 \ub54c\ubb38\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc5d0 \uc804\ub2ec\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uadf8\ub7f0\ub370 kubeflow\uc5d0\uc11c\ub294 minio\ub97c \uc774\uc6a9\ud574 \ud30c\uc77c\uc744 \uc800\uc7a5\ud558\ub294\ub370 \uc720\uc800\ub294 \uc2e4\ud589\uc744 \ud558\uae30 \uc804\uc5d0\ub294 \uac01 \ud30c\uc77c\uc758 \uacbd\ub85c\ub97c \uc54c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c kubeflow\uc5d0\uc11c\ub294 \uc785\ub825\uacfc \ucd9c\ub825\uc758 \uacbd\ub85c\uc640 \uad00\ub828\ub41c \ub9e4\uc9c1\uc744 \uc81c\uacf5\ud558\ub294\ub370 \ubc14\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"InputPath"),"\uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"InputPath"),"\ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \uc785\ub825 \uacbd\ub85c\ub97c ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \ucd9c\ub825 \uacbd\ub85c\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\uace0 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"data_path: OutputPath()"),"\ub97c argument\ub85c \ub9cc\ub4ed\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \ub370\uc774\ud130\ub97c \ubc1b\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"data_path: InputPath()"),"\uc744 argument\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ub807\uac8c \ub9cc\ub4e0 \ud6c4 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc11c\ub85c \uc5f0\uacb0\uc744 \ud558\uba74 kubeflow\uc5d0\uc11c \ud544\uc694\ud55c \uacbd\ub85c\ub97c \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud6c4 \uc785\ub825\ud574 \uc8fc\uae30 \ub54c\ubb38\uc5d0 \ub354 \uc774\uc0c1 \uc720\uc800\ub294 \uacbd\ub85c\ub97c \uc2e0\uacbd\uc4f0\uc9c0 \uc54a\uace0 \ucef4\ud3ec\ub10c\ud2b8\uac04\uc758 \uad00\uacc4\ub9cc \uc2e0\uacbd\uc4f0\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc774 \ub0b4\uc6a9\uc744 \ubc14\ud0d5\uc73c\ub85c \ub2e4\uc2dc \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath\n\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,"InputPath\ub098 OutputPath\ub294 string\uc744 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 string\uc740 \uc785\ub825 \ub610\ub294 \ucd9c\ub825\ud558\ub824\uace0 \ud558\ub294 \ud30c\uc77c\uc758 \ud3ec\ub9f7\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\ub2e4\uace0 \uaf2d \uc774 \ud3ec\ub9f7\uc73c\ub85c \ud30c\uc77c \ud615\ud0dc\ub85c \uc800\uc7a5\uc774 \uac15\uc81c\ub418\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\ub9cc \ud30c\uc774\ud504\ub77c\uc778\uc744 \ucef4\ud30c\uc77c\ud560 \ub54c \ucd5c\uc18c\ud55c\uc758 \ud0c0\uc785 \uccb4\ud06c\ub97c \uc704\ud55c \ub3c4\uc6b0\ubbf8 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d \ud30c\uc77c \ud3ec\ub9f7\uc774 \uace0\uc815\ub418\uc9c0 \uc54a\ub294\ub2e4\uba74 \uc785\ub825\ud558\uc9c0 \uc54a\uc73c\uba74 \ub429\ub2c8\ub2e4 (\ud0c0\uc785 \ud78c\ud2b8 \uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"Any")," \uc640 \uac19\uc740 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4)."),(0,r.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,r.kt)("p",null,"\uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("h2",{id:"rule-to-use-inputpathoutputpath"},"Rule to use InputPath/OutputPath"),(0,r.kt)("p",null,"InputPath\ub098 OutputPath argument\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \uc791\uc131\ud560 \ub54c \uc9c0\ucf1c\uc57c\ud558\ub294 \uaddc\uce59\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"load-data-component"},"Load Data Component"),(0,r.kt)("p",null,"\uc704\uc5d0\uc11c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub370\uc774\ud130\uac00 \ud544\uc694\ud558\ubbc0\ub85c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n')),(0,r.kt)("h3",{id:"write-pipeline"},"Write Pipeline"),(0,r.kt)("p",null,"\uc774\uc81c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud574 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="complex_pipeline")\ndef complex_pipeline(kernel: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n')),(0,r.kt)("p",null,"\ud55c \uac00\uc9c0 \uc774\uc0c1\ud55c \uc810\uc744 \ud655\uc778\ud558\uc168\ub098\uc694?",(0,r.kt)("br",{parentName:"p"}),"\n","\ubc14\ub85c \uc785\ub825\uacfc \ucd9c\ub825\uc5d0\uc11c \ubc1b\ub294 argument\uc911 \uacbd\ub85c\uc640 \uad00\ub828\ub41c \uac83\ub4e4\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"_path")," \uc811\ubbf8\uc0ac\uac00 \ubaa8\ub450 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},'iris_data.outputs["data_path"]')," \uac00 \uc544\ub2cc ",(0,r.kt)("inlineCode",{parentName:"p"},'iris_data.outputs["data"]')," \uc73c\ub85c \uc811\uadfc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 kubeflow\uc5d0\uc11c \uc815\ud55c \ubc95\uce59\uc73c\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"InputPath")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \uc73c\ub85c \uc0dd\uc131\ub41c \uacbd\ub85c\ub4e4\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc811\uadfc\ud560 \ub54c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"_path")," \uc811\ubbf8\uc0ac\ub97c \uc0dd\ub7b5\ud558\uc5ec \uc811\uadfc\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\ub9cc \ubc29\uae08 \uc791\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud560 \uacbd\uc6b0 \uc2e4\ud589\uc774 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uc774\uc720\ub294 \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7ef46b74.6437a7f5.js b/assets/js/7ef46b74.6437a7f5.js deleted file mode 100644 index 0dbd4316..00000000 --- a/assets/js/7ef46b74.6437a7f5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2676],{3905:(t,e,n)=>{n.d(e,{Zo:()=>d,kt:()=>f});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function p(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var l=a.createContext({}),u=function(t){var e=a.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):p(p({},e),t)),n},d=function(t){var e=u(t.components);return a.createElement(l.Provider,{value:e},t.children)},s="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},c=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,d=i(t,["components","mdxType","originalType","parentName"]),s=u(n),c=r,f=s["".concat(l,".").concat(c)]||s[c]||m[c]||o;return n?a.createElement(f,p(p({ref:e},d),{},{components:n})):a.createElement(f,p({ref:e},d))}));function f(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=n.length,p=new Array(o);p[0]=c;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[s]="string"==typeof t?t:r,p[1]=i;for(var u=2;u{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const o={title:"8. Component - InputPath/OutputPath",description:"",sidebar_position:8,contributors:["Jongseob Jeon","SeungTae Kim"]},p=void 0,i={unversionedId:"kubeflow/advanced-component",id:"kubeflow/advanced-component",title:"8. Component - InputPath/OutputPath",description:"",source:"@site/docs/kubeflow/advanced-component.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-component",permalink:"/docs/kubeflow/advanced-component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-component.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:8,frontMatter:{title:"8. Component - InputPath/OutputPath",description:"",sidebar_position:8,contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"7. Pipeline - Run",permalink:"/docs/kubeflow/basic-run"},next:{title:"9. Component - Environment",permalink:"/docs/kubeflow/advanced-environment"}},l={},u=[{value:"Complex Outputs",id:"complex-outputs",level:2},{value:"Component Contents",id:"component-contents",level:2},{value:"Component Wrapper",id:"component-wrapper",level:2},{value:"Define a standalone Python function",id:"define-a-standalone-python-function",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"Rule to use InputPath/OutputPath",id:"rule-to-use-inputpathoutputpath",level:2},{value:"Load Data Component",id:"load-data-component",level:3},{value:"Write Pipeline",id:"write-pipeline",level:3}],d={toc:u},s="wrapper";function m(t){let{components:e,...n}=t;return(0,r.kt)(s,(0,a.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"complex-outputs"},"Complex Outputs"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/kubeflow-concepts#component-contents"},"Kubeflow Concepts")," \uc608\uc2dc\ub85c \ub098\uc654\ub358 \ucf54\ub4dc\ub97c \ucef4\ud3ec\ub10c\ud2b8\ub85c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"component-contents"},"Component Contents"),(0,r.kt)("p",null,"\uc544\ub798 \ucf54\ub4dc\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/kubeflow-concepts#component-contents"},"Kubeflow Concepts"),"\uc5d0\uc11c \uc0ac\uc6a9\ud588\ub358 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import dill\nimport pandas as pd\n\nfrom sklearn.svm import SVC\n\ntrain_data = pd.read_csv(train_data_path)\ntrain_target = pd.read_csv(train_target_path)\n\nclf = SVC(kernel=kernel)\nclf.fit(train_data, train_target)\n\nwith open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("h2",{id:"component-wrapper"},"Component Wrapper"),(0,r.kt)("h3",{id:"define-a-standalone-python-function"},"Define a standalone Python function"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uc5d0 \ud544\uc694\ud55c Config\ub4e4\uacfc \ud568\uaed8 \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'def train_from_csv(\n train_data_path: str,\n train_target_path: str,\n model_path: str,\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"../kubeflow/basic-component"},"Basic Usage Component"),"\uc5d0\uc11c \uc124\uba85\ud560 \ub54c \uc785\ub825\uacfc \ucd9c\ub825\uc5d0 \ub300\ud55c \ud0c0\uc785 \ud78c\ud2b8\ub97c \uc801\uc5b4\uc57c \ud55c\ub2e4\uace0 \uc124\uba85 \ud588\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub7f0\ub370 \ub9cc\uc57d json\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ubcf8 \ud0c0\uc785\uc774 \uc544\ub2cc dataframe, model\uc640 \uac19\uc774 \ubcf5\uc7a1\ud55c \uac1d\uccb4\ub4e4\uc740 \uc5b4\ub5bb\uac8c \ud560\uae4c\uc694?"),(0,r.kt)("p",null,"\ud30c\uc774\uc36c\uc5d0\uc11c \ud568\uc218\uac04\uc5d0 \uac12\uc744 \uc804\ub2ec\ud560 \ub54c, \uac1d\uccb4\ub97c \ubc18\ud658\ud574\ub3c4 \uadf8 \uac12\uc774 \ud638\uc2a4\ud2b8\uc758 \uba54\ubaa8\ub9ac\uc5d0 \uc800\uc7a5\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \ub2e4\uc74c \ud568\uc218\uc5d0\uc11c\ub3c4 \uac19\uc740 \uac1d\uccb4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc kubeflow\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc740 \uac01\uac01 \ucee8\ud14c\uc774\ub108 \uc704\uc5d0\uc11c \uc11c\ub85c \ub3c5\ub9bd\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc989, \uac19\uc740 \uba54\ubaa8\ub9ac\ub97c \uacf5\uc720\ud558\uace0 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ubcf4\ud1b5\uc758 \ud30c\uc774\uc36c \ud568\uc218\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd\uacfc \uac19\uc774 \uac1d\uccb4\ub97c \uc804\ub2ec\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc5d0 \ub118\uaca8 \uc904 \uc218 \uc788\ub294 \uc815\ubcf4\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"json")," \uc73c\ub85c\ub9cc \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c Model\uc774\ub098 DataFrame\uacfc \uac19\uc774 json \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc5c6\ub294 \ud0c0\uc785\uc758 \uac1d\uccb4\ub294 \ub2e4\ub978 \ubc29\ubc95\uc744 \ud1b5\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"Kubeflow\uc5d0\uc11c\ub294 \uc774\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 json-serializable \ud558\uc9c0 \uc54a\uc740 \ud0c0\uc785\uc758 \uac1d\uccb4\ub294 \uba54\ubaa8\ub9ac \ub300\uc2e0 \ud30c\uc77c\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud55c \ub4a4, \uadf8 \ud30c\uc77c\uc744 \uc774\uc6a9\ud574 \uc815\ubcf4\ub97c \uc804\ub2ec\ud569\ub2c8\ub2e4. \uc800\uc7a5\ub41c \ud30c\uc77c\uc758 \uacbd\ub85c\ub294 str\uc774\uae30 \ub54c\ubb38\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc5d0 \uc804\ub2ec\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uadf8\ub7f0\ub370 kubeflow\uc5d0\uc11c\ub294 minio\ub97c \uc774\uc6a9\ud574 \ud30c\uc77c\uc744 \uc800\uc7a5\ud558\ub294\ub370 \uc720\uc800\ub294 \uc2e4\ud589\uc744 \ud558\uae30 \uc804\uc5d0\ub294 \uac01 \ud30c\uc77c\uc758 \uacbd\ub85c\ub97c \uc54c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c kubeflow\uc5d0\uc11c\ub294 \uc785\ub825\uacfc \ucd9c\ub825\uc758 \uacbd\ub85c\uc640 \uad00\ub828\ub41c \ub9e4\uc9c1\uc744 \uc81c\uacf5\ud558\ub294\ub370 \ubc14\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"InputPath"),"\uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"InputPath"),"\ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \uc785\ub825 \uacbd\ub85c\ub97c ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \ub294 \ub2e8\uc5b4 \uadf8\ub300\ub85c \ucd9c\ub825 \uacbd\ub85c\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\uace0 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"data_path: OutputPath()"),"\ub97c argument\ub85c \ub9cc\ub4ed\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \ub370\uc774\ud130\ub97c \ubc1b\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"data_path: InputPath()"),"\uc744 argument\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ub807\uac8c \ub9cc\ub4e0 \ud6c4 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc11c\ub85c \uc5f0\uacb0\uc744 \ud558\uba74 kubeflow\uc5d0\uc11c \ud544\uc694\ud55c \uacbd\ub85c\ub97c \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud6c4 \uc785\ub825\ud574 \uc8fc\uae30 \ub54c\ubb38\uc5d0 \ub354 \uc774\uc0c1 \uc720\uc800\ub294 \uacbd\ub85c\ub97c \uc2e0\uacbd\uc4f0\uc9c0 \uc54a\uace0 \ucef4\ud3ec\ub10c\ud2b8\uac04\uc758 \uad00\uacc4\ub9cc \uc2e0\uacbd\uc4f0\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc774 \ub0b4\uc6a9\uc744 \ubc14\ud0d5\uc73c\ub85c \ub2e4\uc2dc \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath\n\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,"InputPath\ub098 OutputPath\ub294 string\uc744 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 string\uc740 \uc785\ub825 \ub610\ub294 \ucd9c\ub825\ud558\ub824\uace0 \ud558\ub294 \ud30c\uc77c\uc758 \ud3ec\ub9f7\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\ub2e4\uace0 \uaf2d \uc774 \ud3ec\ub9f7\uc73c\ub85c \ud30c\uc77c \ud615\ud0dc\ub85c \uc800\uc7a5\uc774 \uac15\uc81c\ub418\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\ub9cc \ud30c\uc774\ud504\ub77c\uc778\uc744 \ucef4\ud30c\uc77c\ud560 \ub54c \ucd5c\uc18c\ud55c\uc758 \ud0c0\uc785 \uccb4\ud06c\ub97c \uc704\ud55c \ub3c4\uc6b0\ubbf8 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d \ud30c\uc77c \ud3ec\ub9f7\uc774 \uace0\uc815\ub418\uc9c0 \uc54a\ub294\ub2e4\uba74 \uc785\ub825\ud558\uc9c0 \uc54a\uc73c\uba74 \ub429\ub2c8\ub2e4 (\ud0c0\uc785 \ud78c\ud2b8 \uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"Any")," \uc640 \uac19\uc740 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4)."),(0,r.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,r.kt)("p",null,"\uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("h2",{id:"rule-to-use-inputpathoutputpath"},"Rule to use InputPath/OutputPath"),(0,r.kt)("p",null,"InputPath\ub098 OutputPath argument\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \uc791\uc131\ud560 \ub54c \uc9c0\ucf1c\uc57c\ud558\ub294 \uaddc\uce59\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"load-data-component"},"Load Data Component"),(0,r.kt)("p",null,"\uc704\uc5d0\uc11c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub370\uc774\ud130\uac00 \ud544\uc694\ud558\ubbc0\ub85c \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n')),(0,r.kt)("h3",{id:"write-pipeline"},"Write Pipeline"),(0,r.kt)("p",null,"\uc774\uc81c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud574 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="complex_pipeline")\ndef complex_pipeline(kernel: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n')),(0,r.kt)("p",null,"\ud55c \uac00\uc9c0 \uc774\uc0c1\ud55c \uc810\uc744 \ud655\uc778\ud558\uc168\ub098\uc694?",(0,r.kt)("br",{parentName:"p"}),"\n","\ubc14\ub85c \uc785\ub825\uacfc \ucd9c\ub825\uc5d0\uc11c \ubc1b\ub294 argument\uc911 \uacbd\ub85c\uc640 \uad00\ub828\ub41c \uac83\ub4e4\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"_path")," \uc811\ubbf8\uc0ac\uac00 \ubaa8\ub450 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},'iris_data.outputs["data_path"]')," \uac00 \uc544\ub2cc ",(0,r.kt)("inlineCode",{parentName:"p"},'iris_data.outputs["data"]')," \uc73c\ub85c \uc811\uadfc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 kubeflow\uc5d0\uc11c \uc815\ud55c \ubc95\uce59\uc73c\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"InputPath")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"OutputPath")," \uc73c\ub85c \uc0dd\uc131\ub41c \uacbd\ub85c\ub4e4\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc811\uadfc\ud560 \ub54c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"_path")," \uc811\ubbf8\uc0ac\ub97c \uc0dd\ub7b5\ud558\uc5ec \uc811\uadfc\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\ub9cc \ubc29\uae08 \uc791\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud560 \uacbd\uc6b0 \uc2e4\ud589\uc774 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n\uc774\uc720\ub294 \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8061fab4.2728d014.js b/assets/js/8061fab4.2728d014.js deleted file mode 100644 index 4a520b53..00000000 --- a/assets/js/8061fab4.2728d014.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1044],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>b});var r=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=r.createContext({}),c=function(e){var a=r.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},p=function(e){var a=c(e.components);return r.createElement(l.Provider,{value:a},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},k=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(t),k=n,b=u["".concat(l,".").concat(k)]||u[k]||d[k]||o;return t?r.createElement(b,i(i({ref:a},p),{},{components:t})):r.createElement(b,i({ref:a},p))}));function b(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var o=t.length,i=new Array(o);i[0]=k;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=t(7462),n=(t(7294),t(3905));const o={title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim","SeungTae Kim"]},i=void 0,s={unversionedId:"setup-components/install-components-kf",id:"version-1.0/setup-components/install-components-kf",title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",source:"@site/versioned_docs/version-1.0/setup-components/install-components-kf.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-kf",permalink:"/docs/1.0/setup-components/install-components-kf",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-components/install-components-kf.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"6. (Optional) Setup GPU",permalink:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu"},next:{title:"2. MLflow Tracking Server",permalink:"/docs/1.0/setup-components/install-components-mlflow"}},l={},c=[{value:"\uc124\uce58 \ud30c\uc77c \uc900\ube44",id:"\uc124\uce58-\ud30c\uc77c-\uc900\ube44",level:2},{value:"\uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58",id:"\uac01-\uad6c\uc131-\uc694\uc18c\ubcc4-\uc124\uce58",level:2},{value:"Cert-manager",id:"cert-manager",level:3},{value:"Istio",id:"istio",level:3},{value:"Dex",id:"dex",level:3},{value:"OIDC AuthService",id:"oidc-authservice",level:3},{value:"Kubeflow Namespace",id:"kubeflow-namespace",level:3},{value:"Kubeflow Roles",id:"kubeflow-roles",level:3},{value:"Kubeflow Istio Resources",id:"kubeflow-istio-resources",level:3},{value:"Kubeflow Pipelines",id:"kubeflow-pipelines",level:3},{value:"Katib",id:"katib",level:3},{value:"Central Dashboard",id:"central-dashboard",level:3},{value:"Admission Webhook",id:"admission-webhook",level:3},{value:"Notebooks & Jupyter Web App",id:"notebooks--jupyter-web-app",level:3},{value:"Profiles + KFAM",id:"profiles--kfam",level:3},{value:"Volumes Web App",id:"volumes-web-app",level:3},{value:"Tensorboard & Tensorboard Web App",id:"tensorboard--tensorboard-web-app",level:3},{value:"Training Operator",id:"training-operator",level:3},{value:"User Namespace",id:"user-namespace",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2}],p={toc:c},u="wrapper";function d(e){let{components:a,...o}=e;return(0,n.kt)(u,(0,r.Z)({},p,o,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"\uc124\uce58-\ud30c\uc77c-\uc900\ube44"},"\uc124\uce58 \ud30c\uc77c \uc900\ube44"),(0,n.kt)("p",null,"Kubeflow ",(0,n.kt)("strong",{parentName:"p"},"v1.4.0")," \ubc84\uc804\uc744 \uc124\uce58\ud558\uae30 \uc704\ud574\uc11c, \uc124\uce58\uc5d0 \ud544\uc694\ud55c manifests \ud30c\uc77c\ub4e4\uc744 \uc900\ube44\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/kubeflow/manifests"},"kubeflow/manifests Repository")," \ub97c ",(0,n.kt)("strong",{parentName:"p"},"v1.4.0")," \ud0dc\uadf8\ub85c \uae43 \ud074\ub860\ud55c \ub4a4, \ud574\ub2f9 \ud3f4\ub354\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"git clone -b v1.4.0 https://github.com/kubeflow/manifests.git\ncd manifests\n")),(0,n.kt)("h2",{id:"\uac01-\uad6c\uc131-\uc694\uc18c\ubcc4-\uc124\uce58"},"\uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58"),(0,n.kt)("p",null,"kubeflow/manifests Repository \uc5d0 \uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58 \ucee4\ub9e8\ub4dc\uac00 \uc801\ud600\uc838 \uc788\uc9c0\ub9cc, \uc124\uce58\ud558\uba70 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \uc774\uc288 \ud639\uc740 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc774 \uc801\ud600\uc838 \uc788\uc9c0 \uc54a\uc544 \ucc98\uc74c \uc124\uce58\ud558\ub294 \uacbd\uc6b0 \uc5b4\ub824\uc6c0\uc744 \uacaa\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c, \uac01 \uad6c\uc131 \uc694\uc18c\ubcc4\ub85c \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc744 \ud568\uaed8 \uc791\uc131\ud569\ub2c8\ub2e4. "),(0,n.kt)("p",null,"\ub610\ud55c, \ubcf8 \ubb38\uc11c\uc5d0\uc11c\ub294 ",(0,n.kt)("strong",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \ub2e4\ub8e8\uc9c0 \uc54a\ub294 \uad6c\uc131\uc694\uc18c\uc778 Knative, KFServing, MPI Operator \uc758 \uc124\uce58\ub294 \ub9ac\uc18c\uc2a4\uc758 \ud6a8\uc728\uc801 \uc0ac\uc6a9\uc744 \uc704\ud574 \ub530\ub85c \uc124\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),(0,n.kt)("h3",{id:"cert-manager"},"Cert-manager"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"cert-manager \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/cert-manager/cert-manager/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/cert-manager created\ncustomresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created\nserviceaccount/cert-manager created\nserviceaccount/cert-manager-cainjector created\nserviceaccount/cert-manager-webhook created\nrole.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created\nrole.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created\nrole.rbac.authorization.k8s.io/cert-manager:leaderelection created\nclusterrole.rbac.authorization.k8s.io/cert-manager-cainjector created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificates created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-challenges created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-issuers created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-orders created\nclusterrole.rbac.authorization.k8s.io/cert-manager-edit created\nclusterrole.rbac.authorization.k8s.io/cert-manager-view created\nclusterrole.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created\nrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created\nrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created\nrolebinding.rbac.authorization.k8s.io/cert-manager:leaderelection created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificates created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-challenges created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-issuers created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-orders created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created\nservice/cert-manager created\nservice/cert-manager-webhook created\ndeployment.apps/cert-manager created\ndeployment.apps/cert-manager-cainjector created\ndeployment.apps/cert-manager-webhook created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created\n")),(0,n.kt)("p",{parentName:"li"},"cert-manager namespace \uc758 3 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n cert-manager\n")),(0,n.kt)("p",{parentName:"li"},"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncert-manager-7dd5854bb4-7nmpd 1/1 Running 0 2m10s\ncert-manager-cainjector-64c949654c-2scxr 1/1 Running 0 2m10s\ncert-manager-webhook-6b57b9b886-7q6g2 1/1 Running 0 2m10s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"kubeflow-issuer \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/cert-manager/kubeflow-issuer/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterissuer.cert-manager.io/kubeflow-self-signing-issuer created\n")))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"cert-manager-webhook \uc774\uc288"),(0,n.kt)("p",{parentName:"li"},"cert-manager-webhook deployment \uac00 Running \uc774 \uc544\ub2cc \uacbd\uc6b0, \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud558\uba70 kubeflow-issuer\uac00 \uc124\uce58\ub418\uc9c0 \uc54a\uc744 \uc218 \uc788\uc74c\uc5d0 \uc8fc\uc758\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ud574\ub2f9 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c \uacbd\uc6b0, cert-manager \uc758 3\uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub418\ub294 \uac83\uc744 \ud655\uc778\ud55c \uc774\ud6c4 \ub2e4\uc2dc \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'Error from server: error when retrieving current configuration of:\nResource: "cert-manager.io/v1alpha2, Resource=clusterissuers", GroupVersionKind: "cert-manager.io/v1alpha2, Kind=ClusterIssuer"\nName: "kubeflow-self-signing-issuer", Namespace: ""\nfrom server for: "STDIN": conversion webhook for cert-manager.io/v1, Kind=ClusterIssuer failed: Post "https://cert-manager-webhook.cert-manager.svc:443/convert?timeout=30s": dial tcp 10.101.177.157:443: connect: connection refused\n')))),(0,n.kt)("h3",{id:"istio"},"Istio"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio \uad00\ub828 Custom Resource Definition(CRD) \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-crds/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/authorizationpolicies.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/destinationrules.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/envoyfilters.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/gateways.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/istiooperators.install.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/peerauthentications.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/requestauthentications.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/serviceentries.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/sidecars.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/virtualservices.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/workloadentries.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/workloadgroups.networking.istio.io created\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio namespace \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/istio-system created\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-install/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/istio-ingressgateway-service-account created\nserviceaccount/istio-reader-service-account created\nserviceaccount/istiod-service-account created\nrole.rbac.authorization.k8s.io/istio-ingressgateway-sds created\nrole.rbac.authorization.k8s.io/istiod-istio-system created\nclusterrole.rbac.authorization.k8s.io/istio-reader-istio-system created\nclusterrole.rbac.authorization.k8s.io/istiod-istio-system created\nrolebinding.rbac.authorization.k8s.io/istio-ingressgateway-sds created\nrolebinding.rbac.authorization.k8s.io/istiod-istio-system created\nclusterrolebinding.rbac.authorization.k8s.io/istio-reader-istio-system created\nclusterrolebinding.rbac.authorization.k8s.io/istiod-istio-system created\nconfigmap/istio created\nconfigmap/istio-sidecar-injector created\nservice/istio-ingressgateway created\nservice/istiod created\ndeployment.apps/istio-ingressgateway created\ndeployment.apps/istiod created\nenvoyfilter.networking.istio.io/metadata-exchange-1.8 created\nenvoyfilter.networking.istio.io/metadata-exchange-1.9 created\nenvoyfilter.networking.istio.io/stats-filter-1.8 created\nenvoyfilter.networking.istio.io/stats-filter-1.9 created\nenvoyfilter.networking.istio.io/tcp-metadata-exchange-1.8 created\nenvoyfilter.networking.istio.io/tcp-metadata-exchange-1.9 created\nenvoyfilter.networking.istio.io/tcp-stats-filter-1.8 created\nenvoyfilter.networking.istio.io/tcp-stats-filter-1.9 created\nenvoyfilter.networking.istio.io/x-forwarded-host created\ngateway.networking.istio.io/istio-ingressgateway created\nauthorizationpolicy.security.istio.io/global-deny-all created\nauthorizationpolicy.security.istio.io/istio-ingressgateway created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/istio-sidecar-injector created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/istiod-istio-system created\n")),(0,n.kt)("p",{parentName:"li"},"istio-system namespace \uc758 2 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n istio-system\n")),(0,n.kt)("p",{parentName:"li"},"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nistio-ingressgateway-79b665c95-xm22l 1/1 Running 0 16s\nistiod-86457659bb-5h58w 1/1 Running 0 16s\n")))),(0,n.kt)("h3",{id:"dex"},"Dex"),(0,n.kt)("p",null,"dex \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/dex/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/auth created\ncustomresourcedefinition.apiextensions.k8s.io/authcodes.dex.coreos.com created\nserviceaccount/dex created\nclusterrole.rbac.authorization.k8s.io/dex created\nclusterrolebinding.rbac.authorization.k8s.io/dex created\nconfigmap/dex created\nsecret/dex-oidc-client created\nservice/dex created\ndeployment.apps/dex created\nvirtualservice.networking.istio.io/dex created\n")),(0,n.kt)("p",null,"auth namespace \uc758 1 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n auth\n")),(0,n.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ndex-5ddf47d88d-458cs 1/1 Running 1 12s\n")),(0,n.kt)("h3",{id:"oidc-authservice"},"OIDC AuthService"),(0,n.kt)("p",null,"OIDC AuthService \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/oidc-authservice/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"configmap/oidc-authservice-parameters created\nsecret/oidc-authservice-client created\nservice/authservice created\npersistentvolumeclaim/authservice-pvc created\nstatefulset.apps/authservice created\nenvoyfilter.networking.istio.io/authn-filter created\n")),(0,n.kt)("p",null,"istio-system namespace \uc5d0 authservice-0 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n istio-system -w\n")),(0,n.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nauthservice-0 1/1 Running 0 14s\nistio-ingressgateway-79b665c95-xm22l 1/1 Running 0 2m37s\nistiod-86457659bb-5h58w 1/1 Running 0 2m37s\n")),(0,n.kt)("h3",{id:"kubeflow-namespace"},"Kubeflow Namespace"),(0,n.kt)("p",null,"kubeflow namespace \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/kubeflow-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/kubeflow created\n")),(0,n.kt)("p",null,"kubeflow namespace \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get ns kubeflow\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS AGE\nkubeflow Active 8s\n")),(0,n.kt)("h3",{id:"kubeflow-roles"},"Kubeflow Roles"),(0,n.kt)("p",null,"kubeflow-roles \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/kubeflow-roles/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterrole.rbac.authorization.k8s.io/kubeflow-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-view created\nclusterrole.rbac.authorization.k8s.io/kubeflow-view created\n")),(0,n.kt)("p",null,"\ubc29\uae08 \uc0dd\uc131\ud55c kubeflow roles \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get clusterrole | grep kubeflow\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 6\uac1c\uc758 clusterrole \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-admin 2021-12-03T08:51:36Z\nkubeflow-edit 2021-12-03T08:51:36Z\nkubeflow-kubernetes-admin 2021-12-03T08:51:36Z\nkubeflow-kubernetes-edit 2021-12-03T08:51:36Z\nkubeflow-kubernetes-view 2021-12-03T08:51:36Z\nkubeflow-view 2021-12-03T08:51:36Z\n")),(0,n.kt)("h3",{id:"kubeflow-istio-resources"},"Kubeflow Istio Resources"),(0,n.kt)("p",null,"kubeflow-istio-resources \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterrole.rbac.authorization.k8s.io/kubeflow-istio-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-istio-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-istio-view created\ngateway.networking.istio.io/kubeflow-gateway created\n")),(0,n.kt)("p",null,"\ubc29\uae08 \uc0dd\uc131\ud55c kubeflow roles \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get clusterrole | grep kubeflow-istio\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 3\uac1c\uc758 clusterrole \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-istio-admin 2021-12-03T08:53:17Z\nkubeflow-istio-edit 2021-12-03T08:53:17Z\nkubeflow-istio-view 2021-12-03T08:53:17Z\n")),(0,n.kt)("p",null,"Kubeflow namespace \uc5d0 gateway \uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get gateway -n kubeflow\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME AGE\nkubeflow-gateway 31s\n")),(0,n.kt)("h3",{id:"kubeflow-pipelines"},"Kubeflow Pipelines"),(0,n.kt)("p",null,"kubeflow pipelines \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/clusterworkflowtemplates.argoproj.io created\ncustomresourcedefinition.apiextensions.k8s.io/cronworkflows.argoproj.io created\ncustomresourcedefinition.apiextensions.k8s.io/workfloweventbindings.argoproj.io created\n...(\uc0dd\ub7b5)\nauthorizationpolicy.security.istio.io/ml-pipeline-visualizationserver created\nauthorizationpolicy.security.istio.io/mysql created\nauthorizationpolicy.security.istio.io/service-cache-server created\n")),(0,n.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub294 \uc5ec\ub7ec resources \ub97c \ud55c \ubc88\uc5d0 \uc124\uce58\ud558\uace0 \uc788\uc9c0\ub9cc, \uc124\uce58 \uc21c\uc11c\uc758 \uc758\uc874\uc131\uc774 \uc788\ub294 \ub9ac\uc18c\uc2a4\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \ub54c\uc5d0 \ub530\ub77c \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'"error: unable to recognize "STDIN": no matches for kind "CompositeController" in version "metacontroller.k8s.io/v1alpha1"" \n')),(0,n.kt)("p",null,"\uc704\uc640 \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c\ub2e4\uba74, 10 \ucd08 \uc815\ub3c4 \uae30\ub2e4\ub9b0 \ub4a4 \ub2e4\uc2dc \uc704\uc758 \uba85\ub839\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 16\uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncache-deployer-deployment-79fdf9c5c9-bjnbg 2/2 Running 1 5m3s\ncache-server-5bdf4f4457-48gbp 2/2 Running 0 5m3s\nkubeflow-pipelines-profile-controller-7b947f4748-8d26b 1/1 Running 0 5m3s\nmetacontroller-0 1/1 Running 0 5m3s\nmetadata-envoy-deployment-5b4856dd5-xtlkd 1/1 Running 0 5m3s\nmetadata-grpc-deployment-6b5685488-kwvv7 2/2 Running 3 5m3s\nmetadata-writer-548bd879bb-zjkcn 2/2 Running 1 5m3s\nminio-5b65df66c9-k5gzg 2/2 Running 0 5m3s\nml-pipeline-8c4b99589-85jw6 2/2 Running 1 5m3s\nml-pipeline-persistenceagent-d6bdc77bd-ssxrv 2/2 Running 0 5m3s\nml-pipeline-scheduledworkflow-5db54d75c5-zk2cw 2/2 Running 0 5m2s\nml-pipeline-ui-5bd8d6dc84-j7wqr 2/2 Running 0 5m2s\nml-pipeline-viewer-crd-68fb5f4d58-mbcbg 2/2 Running 1 5m2s\nml-pipeline-visualizationserver-8476b5c645-wljfm 2/2 Running 0 5m2s\nmysql-f7b9b7dd4-xfnw4 2/2 Running 0 5m2s\nworkflow-controller-5cbbb49bd8-5zrwx 2/2 Running 1 5m2s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c ml-pipeline UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/ml-pipeline-ui -n kubeflow 8888:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8888/#/pipelines/"},"http://localhost:8888/#/pipelines/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pipeline-ui",src:t(8730).Z,width:"2868",height:"970"})),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"localhost \uc5f0\uacb0 \uac70\ubd80 \uc774\uc288")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"localhost-reject",src:t(5688).Z,width:"626",height:"406"})),(0,n.kt)("p",null,"\ub9cc\uc57d \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,n.kt)("inlineCode",{parentName:"p"},"localhost\uc5d0\uc11c \uc5f0\uacb0\uc744 \uac70\ubd80\ud588\uc2b5\ub2c8\ub2e4")," \ub77c\ub294 \uc5d0\ub7ec\uac00 \ucd9c\ub825\ub420 \uacbd\uc6b0, \ucee4\ub9e8\ub4dc\ub85c address \uc124\uc815\uc744 \ud1b5\ud574 \uc811\uadfc\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\ubcf4\uc548\uc0c1\uc758 \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4\uba74,")," \uc544\ub798\uc640 \uac19\uc774 ",(0,n.kt)("inlineCode",{parentName:"p"},"0.0.0.0")," \ub85c \ubaa8\ub4e0 \uc8fc\uc18c\uc758 bind\ub97c \uc5f4\uc5b4\uc8fc\ub294 \ubc29\ud5a5\uc73c\ub85c ml-pipeline UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward --address 0.0.0.0 svc/ml-pipeline-ui -n kubeflow 8888:80\n")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\uc704\uc758 \uc635\uc158\uc73c\ub85c \uc2e4\ud589\ud588\uc74c\uc5d0\ub3c4 \uc5ec\uc804\ud788 \uc5f0\uacb0 \uac70\ubd80 \uc774\uc288\uac00 \ubc1c\uc0dd\ud560 \uacbd\uc6b0")),(0,n.kt)("p",null,"\ubc29\ud654\ubcbd \uc124\uc815\uc73c\ub85c \uc811\uc18d\ud574 \ubaa8\ub4e0 tcp \ud504\ub85c\ud1a0\ucf5c\uc758 \ud3ec\ud2b8\uc5d0 \ub300\ud55c \uc811\uc18d\uc744 \ud5c8\uac00 \ub610\ub294 8888\ubc88 \ud3ec\ud2b8\uc758 \uc811\uc18d \ud5c8\uac00\ub97c \ucd94\uac00\ud574 \uc811\uadfc \uad8c\ud55c\uc744 \ud5c8\uac00\ud574\uc90d\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("inlineCode",{parentName:"p"},"http://<\ub2f9\uc2e0\uc758 \uac00\uc0c1 \uc778\uc2a4\ud134\uc2a4 \uacf5\uc778 ip \uc8fc\uc18c>:8888/#/pipelines/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud558\uba74, ml-pipeline UI \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ud558\ub2e8\uc5d0\uc11c \uc9c4\ud589\ub418\ub294 \ub2e4\ub978 \ud3ec\ud2b8\uc758 \uacbd\ub85c\uc5d0 \uc811\uc18d\ud560 \ub54c\ub3c4 \uc704\uc758 \uc808\ucc28\uc640 \ub3d9\uc77c\ud558\uac8c \ucee4\ub9e8\ub4dc\ub97c \uc2e4\ud589\ud558\uace0, \ubc29\ud654\ubcbd\uc5d0 \ud3ec\ud2b8 \ubc88\ud638\ub97c \ucd94\uac00\ud574\uc8fc\uba74 \uc2e4\ud589\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4."),(0,n.kt)("h3",{id:"katib"},"Katib"),(0,n.kt)("p",null,"Katib \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/experiments.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/suggestions.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/trials.kubeflow.org created\nserviceaccount/katib-controller created\nserviceaccount/katib-ui created\nclusterrole.rbac.authorization.k8s.io/katib-controller created\nclusterrole.rbac.authorization.k8s.io/katib-ui created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-view created\nclusterrolebinding.rbac.authorization.k8s.io/katib-controller created\nclusterrolebinding.rbac.authorization.k8s.io/katib-ui created\nconfigmap/katib-config created\nconfigmap/trial-templates created\nsecret/katib-mysql-secrets created\nservice/katib-controller created\nservice/katib-db-manager created\nservice/katib-mysql created\nservice/katib-ui created\npersistentvolumeclaim/katib-mysql created\ndeployment.apps/katib-controller created\ndeployment.apps/katib-db-manager created\ndeployment.apps/katib-mysql created\ndeployment.apps/katib-ui created\ncertificate.cert-manager.io/katib-webhook-cert created\nissuer.cert-manager.io/katib-selfsigned-issuer created\nvirtualservice.networking.istio.io/katib-ui created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/katib.kubeflow.org created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/katib.kubeflow.org created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep katib\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 4 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"katib-controller-68c47fbf8b-b985z 1/1 Running 0 82s\nkatib-db-manager-6c948b6b76-2d9gr 1/1 Running 0 82s\nkatib-mysql-7894994f88-scs62 1/1 Running 0 82s\nkatib-ui-64bb96d5bf-d89kp 1/1 Running 0 82s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c katib UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/katib-ui -n kubeflow 8081:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8081/katib/"},"http://localhost:8081/katib/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"katib-ui",src:t(5606).Z,width:"2146",height:"620"})),(0,n.kt)("h3",{id:"central-dashboard"},"Central Dashboard"),(0,n.kt)("p",null,"Dashboard \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/centraldashboard created\nrole.rbac.authorization.k8s.io/centraldashboard created\nclusterrole.rbac.authorization.k8s.io/centraldashboard created\nrolebinding.rbac.authorization.k8s.io/centraldashboard created\nclusterrolebinding.rbac.authorization.k8s.io/centraldashboard created\nconfigmap/centraldashboard-config created\nconfigmap/centraldashboard-parameters created\nservice/centraldashboard created\ndeployment.apps/centraldashboard created\nvirtualservice.networking.istio.io/centraldashboard created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep centraldashboard\n")),(0,n.kt)("p",null,"kubeflow namespace \uc5d0 centraldashboard \uad00\ub828 1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"centraldashboard-8fc7d8cc-xl7ts 1/1 Running 0 52s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c Central Dashboard UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/centraldashboard -n kubeflow 8082:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8082/"},"http://localhost:8082/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"central-dashboard",src:t(9536).Z,width:"4982",height:"1548"})),(0,n.kt)("h3",{id:"admission-webhook"},"Admission Webhook"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/poddefaults.kubeflow.org created\nserviceaccount/admission-webhook-service-account created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-cluster-role created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-admin created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-edit created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-view created\nclusterrolebinding.rbac.authorization.k8s.io/admission-webhook-cluster-role-binding created\nservice/admission-webhook-service created\ndeployment.apps/admission-webhook-deployment created\ncertificate.cert-manager.io/admission-webhook-cert created\nissuer.cert-manager.io/admission-webhook-selfsigned-issuer created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/admission-webhook-mutating-webhook-configuration created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep admission-webhook\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"admission-webhook-deployment-667bd68d94-2hhrx 1/1 Running 0 11s\n")),(0,n.kt)("h3",{id:"notebooks--jupyter-web-app"},"Notebooks & Jupyter Web App"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Notebook controller \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/notebooks.kubeflow.org created\nserviceaccount/notebook-controller-service-account created\nrole.rbac.authorization.k8s.io/notebook-controller-leader-election-role created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-admin created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-edit created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-view created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-role created\nrolebinding.rbac.authorization.k8s.io/notebook-controller-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/notebook-controller-role-binding created\nconfigmap/notebook-controller-config-m44cmb547t created\nservice/notebook-controller-service created\ndeployment.apps/notebook-controller-deployment created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep notebook-controller\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"notebook-controller-deployment-75b4f7b578-w4d4l 1/1 Running 0 105s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Jupyter Web App \uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/jupyter-web-app-service-account created\nrole.rbac.authorization.k8s.io/jupyter-web-app-jupyter-notebook-role created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-admin created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-edit created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-view created\nrolebinding.rbac.authorization.k8s.io/jupyter-web-app-jupyter-notebook-role-binding created\nclusterrolebinding.rbac.authorization.k8s.io/jupyter-web-app-cluster-role-binding created\nconfigmap/jupyter-web-app-config-76844k4cd7 created\nconfigmap/jupyter-web-app-logos created\nconfigmap/jupyter-web-app-parameters-chmg88cm48 created\nservice/jupyter-web-app-service created\ndeployment.apps/jupyter-web-app-deployment created\nvirtualservice.networking.istio.io/jupyter-web-app-jupyter-web-app created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep jupyter-web-app\n")),(0,n.kt)("p",{parentName:"li"},"1\uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"jupyter-web-app-deployment-6f744fbc54-p27ts 1/1 Running 0 2m\n")))),(0,n.kt)("h3",{id:"profiles--kfam"},"Profiles + KFAM"),(0,n.kt)("p",null,"Profile Controller\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/profiles.kubeflow.org created\nserviceaccount/profiles-controller-service-account created\nrole.rbac.authorization.k8s.io/profiles-leader-election-role created\nrolebinding.rbac.authorization.k8s.io/profiles-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/profiles-cluster-role-binding created\nconfigmap/namespace-labels-data-48h7kd55mc created\nconfigmap/profiles-config-46c7tgh6fd created\nservice/profiles-kfam created\ndeployment.apps/profiles-deployment created\nvirtualservice.networking.istio.io/profiles-kfam created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep profiles-deployment\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"profiles-deployment-89f7d88b-qsnrd 2/2 Running 0 42s\n")),(0,n.kt)("h3",{id:"volumes-web-app"},"Volumes Web App"),(0,n.kt)("p",null,"Volumes Web App \uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/volumes-web-app-service-account created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-admin created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-edit created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-view created\nclusterrolebinding.rbac.authorization.k8s.io/volumes-web-app-cluster-role-binding created\nconfigmap/volumes-web-app-parameters-4gg8cm2gmk created\nservice/volumes-web-app-service created\ndeployment.apps/volumes-web-app-deployment created\nvirtualservice.networking.istio.io/volumes-web-app-volumes-web-app created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep volumes-web-app\n")),(0,n.kt)("p",null,"1\uac1c\uc758 pod\uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"volumes-web-app-deployment-8589d664cc-62svl 1/1 Running 0 27s\n")),(0,n.kt)("h3",{id:"tensorboard--tensorboard-web-app"},"Tensorboard & Tensorboard Web App"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Tensorboard Web App \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/tensorboards-web-app-service-account created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-admin created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-edit created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-view created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboards-web-app-cluster-role-binding created\nconfigmap/tensorboards-web-app-parameters-g28fbd6cch created\nservice/tensorboards-web-app-service created\ndeployment.apps/tensorboards-web-app-deployment created\nvirtualservice.networking.istio.io/tensorboards-web-app-tensorboards-web-app created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep tensorboards-web-app\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tensorboards-web-app-deployment-6ff79b7f44-qbzmw 1/1 Running 0 22s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Tensorboard Controller \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/tensorboards.tensorboard.kubeflow.org created\nserviceaccount/tensorboard-controller created\nrole.rbac.authorization.k8s.io/tensorboard-controller-leader-election-role created\nclusterrole.rbac.authorization.k8s.io/tensorboard-controller-manager-role created\nclusterrole.rbac.authorization.k8s.io/tensorboard-controller-proxy-role created\nrolebinding.rbac.authorization.k8s.io/tensorboard-controller-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboard-controller-manager-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboard-controller-proxy-rolebinding created\nconfigmap/tensorboard-controller-config-bf88mm96c8 created\nservice/tensorboard-controller-controller-manager-metrics-service created\ndeployment.apps/tensorboard-controller-controller-manager created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep tensorboard-controller\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tensorboard-controller-controller-manager-954b7c544-vjpzj 3/3 Running 1 73s\n")))),(0,n.kt)("h3",{id:"training-operator"},"Training Operator"),(0,n.kt)("p",null,"Training Operator \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/mxjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/pytorchjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/tfjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/xgboostjobs.kubeflow.org created\nserviceaccount/training-operator created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-view created\nclusterrole.rbac.authorization.k8s.io/training-operator created\nclusterrolebinding.rbac.authorization.k8s.io/training-operator created\nservice/training-operator created\ndeployment.apps/training-operator created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep training-operator\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"training-operator-7d98f9dd88-6887f 1/1 Running 0 28s\n")),(0,n.kt)("h3",{id:"user-namespace"},"User Namespace"),(0,n.kt)("p",null,"Kubeflow \uc0ac\uc6a9\uc744 \uc704\ud574, \uc0ac\uc6a9\ud560 User\uc758 Kubeflow Profile \uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/user-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"configmap/default-install-config-9h2h2b6hbk created\nprofile.kubeflow.org/kubeflow-user-example-com created\n")),(0,n.kt)("p",null,"kubeflow-user-example-com profile \uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get profile\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-user-example-com 37s\n")),(0,n.kt)("h2",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,n.kt)("p",null,"Kubeflow central dashboard\uc5d0 web browser\ub85c \uc811\uc18d\ud558\uae30 \uc704\ud574 \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,n.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8080"},"http://localhost:8080")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"login-ui",src:t(1417).Z,width:"2554",height:"1202"})),(0,n.kt)("p",null,"\ub2e4\uc74c \uc811\uc18d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Email Address: ",(0,n.kt)("inlineCode",{parentName:"li"},"user@example.com")),(0,n.kt)("li",{parentName:"ul"},"Password: ",(0,n.kt)("inlineCode",{parentName:"li"},"12341234"))),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"central-dashboard",src:t(3733).Z,width:"4008",height:"1266"})))}d.isMDXComponent=!0},3733:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/after-login-4b41daca6d9a97824552770b832d59b0.png"},9536:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/central-dashboard-ddf80e24ff9066a7e3fdbfd0d58b5721.png"},5606:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/katib-ui-f10efe0ffd3bb57b1de7bdc2ff2aa880.png"},5688:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/localhost-reject-8d0b59ff30048e97d5721f786f25c857.png"},1417:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/login-after-install-a3e252f02dc4f4988686d6ae97ddd41f.png"},8730:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/pipeline-ui-796868a1ebeabfd6d1b6eb9b54c389aa.png"}}]); \ No newline at end of file diff --git a/assets/js/8061fab4.48e9ffca.js b/assets/js/8061fab4.48e9ffca.js new file mode 100644 index 00000000..9440b5d4 --- /dev/null +++ b/assets/js/8061fab4.48e9ffca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1044],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>b});var r=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=r.createContext({}),c=function(e){var a=r.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},p=function(e){var a=c(e.components);return r.createElement(l.Provider,{value:a},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},k=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(t),k=n,b=u["".concat(l,".").concat(k)]||u[k]||d[k]||o;return t?r.createElement(b,i(i({ref:a},p),{},{components:t})):r.createElement(b,i({ref:a},p))}));function b(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var o=t.length,i=new Array(o);i[0]=k;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=t(7462),n=(t(7294),t(3905));const o={title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim","SeungTae Kim"]},i=void 0,s={unversionedId:"setup-components/install-components-kf",id:"version-1.0/setup-components/install-components-kf",title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",source:"@site/versioned_docs/version-1.0/setup-components/install-components-kf.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-kf",permalink:"/docs/1.0/setup-components/install-components-kf",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-components/install-components-kf.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"6. (Optional) Setup GPU",permalink:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu"},next:{title:"2. MLflow Tracking Server",permalink:"/docs/1.0/setup-components/install-components-mlflow"}},l={},c=[{value:"\uc124\uce58 \ud30c\uc77c \uc900\ube44",id:"\uc124\uce58-\ud30c\uc77c-\uc900\ube44",level:2},{value:"\uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58",id:"\uac01-\uad6c\uc131-\uc694\uc18c\ubcc4-\uc124\uce58",level:2},{value:"Cert-manager",id:"cert-manager",level:3},{value:"Istio",id:"istio",level:3},{value:"Dex",id:"dex",level:3},{value:"OIDC AuthService",id:"oidc-authservice",level:3},{value:"Kubeflow Namespace",id:"kubeflow-namespace",level:3},{value:"Kubeflow Roles",id:"kubeflow-roles",level:3},{value:"Kubeflow Istio Resources",id:"kubeflow-istio-resources",level:3},{value:"Kubeflow Pipelines",id:"kubeflow-pipelines",level:3},{value:"Katib",id:"katib",level:3},{value:"Central Dashboard",id:"central-dashboard",level:3},{value:"Admission Webhook",id:"admission-webhook",level:3},{value:"Notebooks & Jupyter Web App",id:"notebooks--jupyter-web-app",level:3},{value:"Profiles + KFAM",id:"profiles--kfam",level:3},{value:"Volumes Web App",id:"volumes-web-app",level:3},{value:"Tensorboard & Tensorboard Web App",id:"tensorboard--tensorboard-web-app",level:3},{value:"Training Operator",id:"training-operator",level:3},{value:"User Namespace",id:"user-namespace",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2}],p={toc:c},u="wrapper";function d(e){let{components:a,...o}=e;return(0,n.kt)(u,(0,r.Z)({},p,o,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"\uc124\uce58-\ud30c\uc77c-\uc900\ube44"},"\uc124\uce58 \ud30c\uc77c \uc900\ube44"),(0,n.kt)("p",null,"Kubeflow ",(0,n.kt)("strong",{parentName:"p"},"v1.4.0")," \ubc84\uc804\uc744 \uc124\uce58\ud558\uae30 \uc704\ud574\uc11c, \uc124\uce58\uc5d0 \ud544\uc694\ud55c manifests \ud30c\uc77c\ub4e4\uc744 \uc900\ube44\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/kubeflow/manifests"},"kubeflow/manifests Repository")," \ub97c ",(0,n.kt)("strong",{parentName:"p"},"v1.4.0")," \ud0dc\uadf8\ub85c \uae43 \ud074\ub860\ud55c \ub4a4, \ud574\ub2f9 \ud3f4\ub354\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"git clone -b v1.4.0 https://github.com/kubeflow/manifests.git\ncd manifests\n")),(0,n.kt)("h2",{id:"\uac01-\uad6c\uc131-\uc694\uc18c\ubcc4-\uc124\uce58"},"\uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58"),(0,n.kt)("p",null,"kubeflow/manifests Repository \uc5d0 \uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58 \ucee4\ub9e8\ub4dc\uac00 \uc801\ud600\uc838 \uc788\uc9c0\ub9cc, \uc124\uce58\ud558\uba70 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \uc774\uc288 \ud639\uc740 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc774 \uc801\ud600\uc838 \uc788\uc9c0 \uc54a\uc544 \ucc98\uc74c \uc124\uce58\ud558\ub294 \uacbd\uc6b0 \uc5b4\ub824\uc6c0\uc744 \uacaa\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c, \uac01 \uad6c\uc131 \uc694\uc18c\ubcc4\ub85c \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc744 \ud568\uaed8 \uc791\uc131\ud569\ub2c8\ub2e4. "),(0,n.kt)("p",null,"\ub610\ud55c, \ubcf8 \ubb38\uc11c\uc5d0\uc11c\ub294 ",(0,n.kt)("strong",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \ub2e4\ub8e8\uc9c0 \uc54a\ub294 \uad6c\uc131\uc694\uc18c\uc778 Knative, KFServing, MPI Operator \uc758 \uc124\uce58\ub294 \ub9ac\uc18c\uc2a4\uc758 \ud6a8\uc728\uc801 \uc0ac\uc6a9\uc744 \uc704\ud574 \ub530\ub85c \uc124\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),(0,n.kt)("h3",{id:"cert-manager"},"Cert-manager"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"cert-manager \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/cert-manager/cert-manager/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/cert-manager created\ncustomresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created\nserviceaccount/cert-manager created\nserviceaccount/cert-manager-cainjector created\nserviceaccount/cert-manager-webhook created\nrole.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created\nrole.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created\nrole.rbac.authorization.k8s.io/cert-manager:leaderelection created\nclusterrole.rbac.authorization.k8s.io/cert-manager-cainjector created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificates created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-challenges created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-issuers created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-orders created\nclusterrole.rbac.authorization.k8s.io/cert-manager-edit created\nclusterrole.rbac.authorization.k8s.io/cert-manager-view created\nclusterrole.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created\nrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created\nrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created\nrolebinding.rbac.authorization.k8s.io/cert-manager:leaderelection created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificates created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-challenges created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-issuers created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-orders created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created\nservice/cert-manager created\nservice/cert-manager-webhook created\ndeployment.apps/cert-manager created\ndeployment.apps/cert-manager-cainjector created\ndeployment.apps/cert-manager-webhook created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created\n")),(0,n.kt)("p",{parentName:"li"},"cert-manager namespace \uc758 3 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n cert-manager\n")),(0,n.kt)("p",{parentName:"li"},"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncert-manager-7dd5854bb4-7nmpd 1/1 Running 0 2m10s\ncert-manager-cainjector-64c949654c-2scxr 1/1 Running 0 2m10s\ncert-manager-webhook-6b57b9b886-7q6g2 1/1 Running 0 2m10s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"kubeflow-issuer \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/cert-manager/kubeflow-issuer/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterissuer.cert-manager.io/kubeflow-self-signing-issuer created\n")))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"cert-manager-webhook \uc774\uc288"),(0,n.kt)("p",{parentName:"li"},"cert-manager-webhook deployment \uac00 Running \uc774 \uc544\ub2cc \uacbd\uc6b0, \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud558\uba70 kubeflow-issuer\uac00 \uc124\uce58\ub418\uc9c0 \uc54a\uc744 \uc218 \uc788\uc74c\uc5d0 \uc8fc\uc758\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ud574\ub2f9 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c \uacbd\uc6b0, cert-manager \uc758 3\uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub418\ub294 \uac83\uc744 \ud655\uc778\ud55c \uc774\ud6c4 \ub2e4\uc2dc \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'Error from server: error when retrieving current configuration of:\nResource: "cert-manager.io/v1alpha2, Resource=clusterissuers", GroupVersionKind: "cert-manager.io/v1alpha2, Kind=ClusterIssuer"\nName: "kubeflow-self-signing-issuer", Namespace: ""\nfrom server for: "STDIN": conversion webhook for cert-manager.io/v1, Kind=ClusterIssuer failed: Post "https://cert-manager-webhook.cert-manager.svc:443/convert?timeout=30s": dial tcp 10.101.177.157:443: connect: connection refused\n')))),(0,n.kt)("h3",{id:"istio"},"Istio"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio \uad00\ub828 Custom Resource Definition(CRD) \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-crds/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/authorizationpolicies.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/destinationrules.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/envoyfilters.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/gateways.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/istiooperators.install.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/peerauthentications.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/requestauthentications.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/serviceentries.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/sidecars.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/virtualservices.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/workloadentries.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/workloadgroups.networking.istio.io created\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio namespace \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/istio-system created\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-install/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/istio-ingressgateway-service-account created\nserviceaccount/istio-reader-service-account created\nserviceaccount/istiod-service-account created\nrole.rbac.authorization.k8s.io/istio-ingressgateway-sds created\nrole.rbac.authorization.k8s.io/istiod-istio-system created\nclusterrole.rbac.authorization.k8s.io/istio-reader-istio-system created\nclusterrole.rbac.authorization.k8s.io/istiod-istio-system created\nrolebinding.rbac.authorization.k8s.io/istio-ingressgateway-sds created\nrolebinding.rbac.authorization.k8s.io/istiod-istio-system created\nclusterrolebinding.rbac.authorization.k8s.io/istio-reader-istio-system created\nclusterrolebinding.rbac.authorization.k8s.io/istiod-istio-system created\nconfigmap/istio created\nconfigmap/istio-sidecar-injector created\nservice/istio-ingressgateway created\nservice/istiod created\ndeployment.apps/istio-ingressgateway created\ndeployment.apps/istiod created\nenvoyfilter.networking.istio.io/metadata-exchange-1.8 created\nenvoyfilter.networking.istio.io/metadata-exchange-1.9 created\nenvoyfilter.networking.istio.io/stats-filter-1.8 created\nenvoyfilter.networking.istio.io/stats-filter-1.9 created\nenvoyfilter.networking.istio.io/tcp-metadata-exchange-1.8 created\nenvoyfilter.networking.istio.io/tcp-metadata-exchange-1.9 created\nenvoyfilter.networking.istio.io/tcp-stats-filter-1.8 created\nenvoyfilter.networking.istio.io/tcp-stats-filter-1.9 created\nenvoyfilter.networking.istio.io/x-forwarded-host created\ngateway.networking.istio.io/istio-ingressgateway created\nauthorizationpolicy.security.istio.io/global-deny-all created\nauthorizationpolicy.security.istio.io/istio-ingressgateway created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/istio-sidecar-injector created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/istiod-istio-system created\n")),(0,n.kt)("p",{parentName:"li"},"istio-system namespace \uc758 2 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n istio-system\n")),(0,n.kt)("p",{parentName:"li"},"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nistio-ingressgateway-79b665c95-xm22l 1/1 Running 0 16s\nistiod-86457659bb-5h58w 1/1 Running 0 16s\n")))),(0,n.kt)("h3",{id:"dex"},"Dex"),(0,n.kt)("p",null,"dex \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/dex/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/auth created\ncustomresourcedefinition.apiextensions.k8s.io/authcodes.dex.coreos.com created\nserviceaccount/dex created\nclusterrole.rbac.authorization.k8s.io/dex created\nclusterrolebinding.rbac.authorization.k8s.io/dex created\nconfigmap/dex created\nsecret/dex-oidc-client created\nservice/dex created\ndeployment.apps/dex created\nvirtualservice.networking.istio.io/dex created\n")),(0,n.kt)("p",null,"auth namespace \uc758 1 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n auth\n")),(0,n.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ndex-5ddf47d88d-458cs 1/1 Running 1 12s\n")),(0,n.kt)("h3",{id:"oidc-authservice"},"OIDC AuthService"),(0,n.kt)("p",null,"OIDC AuthService \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/oidc-authservice/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"configmap/oidc-authservice-parameters created\nsecret/oidc-authservice-client created\nservice/authservice created\npersistentvolumeclaim/authservice-pvc created\nstatefulset.apps/authservice created\nenvoyfilter.networking.istio.io/authn-filter created\n")),(0,n.kt)("p",null,"istio-system namespace \uc5d0 authservice-0 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n istio-system -w\n")),(0,n.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nauthservice-0 1/1 Running 0 14s\nistio-ingressgateway-79b665c95-xm22l 1/1 Running 0 2m37s\nistiod-86457659bb-5h58w 1/1 Running 0 2m37s\n")),(0,n.kt)("h3",{id:"kubeflow-namespace"},"Kubeflow Namespace"),(0,n.kt)("p",null,"kubeflow namespace \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/kubeflow-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/kubeflow created\n")),(0,n.kt)("p",null,"kubeflow namespace \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get ns kubeflow\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS AGE\nkubeflow Active 8s\n")),(0,n.kt)("h3",{id:"kubeflow-roles"},"Kubeflow Roles"),(0,n.kt)("p",null,"kubeflow-roles \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/kubeflow-roles/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterrole.rbac.authorization.k8s.io/kubeflow-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-view created\nclusterrole.rbac.authorization.k8s.io/kubeflow-view created\n")),(0,n.kt)("p",null,"\ubc29\uae08 \uc0dd\uc131\ud55c kubeflow roles \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get clusterrole | grep kubeflow\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 6\uac1c\uc758 clusterrole \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-admin 2021-12-03T08:51:36Z\nkubeflow-edit 2021-12-03T08:51:36Z\nkubeflow-kubernetes-admin 2021-12-03T08:51:36Z\nkubeflow-kubernetes-edit 2021-12-03T08:51:36Z\nkubeflow-kubernetes-view 2021-12-03T08:51:36Z\nkubeflow-view 2021-12-03T08:51:36Z\n")),(0,n.kt)("h3",{id:"kubeflow-istio-resources"},"Kubeflow Istio Resources"),(0,n.kt)("p",null,"kubeflow-istio-resources \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterrole.rbac.authorization.k8s.io/kubeflow-istio-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-istio-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-istio-view created\ngateway.networking.istio.io/kubeflow-gateway created\n")),(0,n.kt)("p",null,"\ubc29\uae08 \uc0dd\uc131\ud55c kubeflow roles \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get clusterrole | grep kubeflow-istio\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 3\uac1c\uc758 clusterrole \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-istio-admin 2021-12-03T08:53:17Z\nkubeflow-istio-edit 2021-12-03T08:53:17Z\nkubeflow-istio-view 2021-12-03T08:53:17Z\n")),(0,n.kt)("p",null,"Kubeflow namespace \uc5d0 gateway \uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get gateway -n kubeflow\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME AGE\nkubeflow-gateway 31s\n")),(0,n.kt)("h3",{id:"kubeflow-pipelines"},"Kubeflow Pipelines"),(0,n.kt)("p",null,"kubeflow pipelines \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/clusterworkflowtemplates.argoproj.io created\ncustomresourcedefinition.apiextensions.k8s.io/cronworkflows.argoproj.io created\ncustomresourcedefinition.apiextensions.k8s.io/workfloweventbindings.argoproj.io created\n...(\uc0dd\ub7b5)\nauthorizationpolicy.security.istio.io/ml-pipeline-visualizationserver created\nauthorizationpolicy.security.istio.io/mysql created\nauthorizationpolicy.security.istio.io/service-cache-server created\n")),(0,n.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub294 \uc5ec\ub7ec resources \ub97c \ud55c \ubc88\uc5d0 \uc124\uce58\ud558\uace0 \uc788\uc9c0\ub9cc, \uc124\uce58 \uc21c\uc11c\uc758 \uc758\uc874\uc131\uc774 \uc788\ub294 \ub9ac\uc18c\uc2a4\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \ub54c\uc5d0 \ub530\ub77c \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'"error: unable to recognize "STDIN": no matches for kind "CompositeController" in version "metacontroller.k8s.io/v1alpha1"" \n')),(0,n.kt)("p",null,"\uc704\uc640 \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c\ub2e4\uba74, 10 \ucd08 \uc815\ub3c4 \uae30\ub2e4\ub9b0 \ub4a4 \ub2e4\uc2dc \uc704\uc758 \uba85\ub839\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 16\uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncache-deployer-deployment-79fdf9c5c9-bjnbg 2/2 Running 1 5m3s\ncache-server-5bdf4f4457-48gbp 2/2 Running 0 5m3s\nkubeflow-pipelines-profile-controller-7b947f4748-8d26b 1/1 Running 0 5m3s\nmetacontroller-0 1/1 Running 0 5m3s\nmetadata-envoy-deployment-5b4856dd5-xtlkd 1/1 Running 0 5m3s\nmetadata-grpc-deployment-6b5685488-kwvv7 2/2 Running 3 5m3s\nmetadata-writer-548bd879bb-zjkcn 2/2 Running 1 5m3s\nminio-5b65df66c9-k5gzg 2/2 Running 0 5m3s\nml-pipeline-8c4b99589-85jw6 2/2 Running 1 5m3s\nml-pipeline-persistenceagent-d6bdc77bd-ssxrv 2/2 Running 0 5m3s\nml-pipeline-scheduledworkflow-5db54d75c5-zk2cw 2/2 Running 0 5m2s\nml-pipeline-ui-5bd8d6dc84-j7wqr 2/2 Running 0 5m2s\nml-pipeline-viewer-crd-68fb5f4d58-mbcbg 2/2 Running 1 5m2s\nml-pipeline-visualizationserver-8476b5c645-wljfm 2/2 Running 0 5m2s\nmysql-f7b9b7dd4-xfnw4 2/2 Running 0 5m2s\nworkflow-controller-5cbbb49bd8-5zrwx 2/2 Running 1 5m2s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c ml-pipeline UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/ml-pipeline-ui -n kubeflow 8888:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8888/#/pipelines/"},"http://localhost:8888/#/pipelines/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pipeline-ui",src:t(8730).Z,width:"2868",height:"970"})),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"localhost \uc5f0\uacb0 \uac70\ubd80 \uc774\uc288")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"localhost-reject",src:t(5688).Z,width:"626",height:"406"})),(0,n.kt)("p",null,"\ub9cc\uc57d \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,n.kt)("inlineCode",{parentName:"p"},"localhost\uc5d0\uc11c \uc5f0\uacb0\uc744 \uac70\ubd80\ud588\uc2b5\ub2c8\ub2e4")," \ub77c\ub294 \uc5d0\ub7ec\uac00 \ucd9c\ub825\ub420 \uacbd\uc6b0, \ucee4\ub9e8\ub4dc\ub85c address \uc124\uc815\uc744 \ud1b5\ud574 \uc811\uadfc\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\ubcf4\uc548\uc0c1\uc758 \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4\uba74,")," \uc544\ub798\uc640 \uac19\uc774 ",(0,n.kt)("inlineCode",{parentName:"p"},"0.0.0.0")," \ub85c \ubaa8\ub4e0 \uc8fc\uc18c\uc758 bind\ub97c \uc5f4\uc5b4\uc8fc\ub294 \ubc29\ud5a5\uc73c\ub85c ml-pipeline UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward --address 0.0.0.0 svc/ml-pipeline-ui -n kubeflow 8888:80\n")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\uc704\uc758 \uc635\uc158\uc73c\ub85c \uc2e4\ud589\ud588\uc74c\uc5d0\ub3c4 \uc5ec\uc804\ud788 \uc5f0\uacb0 \uac70\ubd80 \uc774\uc288\uac00 \ubc1c\uc0dd\ud560 \uacbd\uc6b0")),(0,n.kt)("p",null,"\ubc29\ud654\ubcbd \uc124\uc815\uc73c\ub85c \uc811\uc18d\ud574 \ubaa8\ub4e0 tcp \ud504\ub85c\ud1a0\ucf5c\uc758 \ud3ec\ud2b8\uc5d0 \ub300\ud55c \uc811\uc18d\uc744 \ud5c8\uac00 \ub610\ub294 8888\ubc88 \ud3ec\ud2b8\uc758 \uc811\uc18d \ud5c8\uac00\ub97c \ucd94\uac00\ud574 \uc811\uadfc \uad8c\ud55c\uc744 \ud5c8\uac00\ud574\uc90d\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("inlineCode",{parentName:"p"},"http://<\ub2f9\uc2e0\uc758 \uac00\uc0c1 \uc778\uc2a4\ud134\uc2a4 \uacf5\uc778 ip \uc8fc\uc18c>:8888/#/pipelines/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud558\uba74, ml-pipeline UI \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ud558\ub2e8\uc5d0\uc11c \uc9c4\ud589\ub418\ub294 \ub2e4\ub978 \ud3ec\ud2b8\uc758 \uacbd\ub85c\uc5d0 \uc811\uc18d\ud560 \ub54c\ub3c4 \uc704\uc758 \uc808\ucc28\uc640 \ub3d9\uc77c\ud558\uac8c \ucee4\ub9e8\ub4dc\ub97c \uc2e4\ud589\ud558\uace0, \ubc29\ud654\ubcbd\uc5d0 \ud3ec\ud2b8 \ubc88\ud638\ub97c \ucd94\uac00\ud574\uc8fc\uba74 \uc2e4\ud589\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4."),(0,n.kt)("h3",{id:"katib"},"Katib"),(0,n.kt)("p",null,"Katib \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/experiments.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/suggestions.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/trials.kubeflow.org created\nserviceaccount/katib-controller created\nserviceaccount/katib-ui created\nclusterrole.rbac.authorization.k8s.io/katib-controller created\nclusterrole.rbac.authorization.k8s.io/katib-ui created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-view created\nclusterrolebinding.rbac.authorization.k8s.io/katib-controller created\nclusterrolebinding.rbac.authorization.k8s.io/katib-ui created\nconfigmap/katib-config created\nconfigmap/trial-templates created\nsecret/katib-mysql-secrets created\nservice/katib-controller created\nservice/katib-db-manager created\nservice/katib-mysql created\nservice/katib-ui created\npersistentvolumeclaim/katib-mysql created\ndeployment.apps/katib-controller created\ndeployment.apps/katib-db-manager created\ndeployment.apps/katib-mysql created\ndeployment.apps/katib-ui created\ncertificate.cert-manager.io/katib-webhook-cert created\nissuer.cert-manager.io/katib-selfsigned-issuer created\nvirtualservice.networking.istio.io/katib-ui created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/katib.kubeflow.org created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/katib.kubeflow.org created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep katib\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 4 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"katib-controller-68c47fbf8b-b985z 1/1 Running 0 82s\nkatib-db-manager-6c948b6b76-2d9gr 1/1 Running 0 82s\nkatib-mysql-7894994f88-scs62 1/1 Running 0 82s\nkatib-ui-64bb96d5bf-d89kp 1/1 Running 0 82s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c katib UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/katib-ui -n kubeflow 8081:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8081/katib/"},"http://localhost:8081/katib/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"katib-ui",src:t(5606).Z,width:"2146",height:"620"})),(0,n.kt)("h3",{id:"central-dashboard"},"Central Dashboard"),(0,n.kt)("p",null,"Dashboard \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/centraldashboard created\nrole.rbac.authorization.k8s.io/centraldashboard created\nclusterrole.rbac.authorization.k8s.io/centraldashboard created\nrolebinding.rbac.authorization.k8s.io/centraldashboard created\nclusterrolebinding.rbac.authorization.k8s.io/centraldashboard created\nconfigmap/centraldashboard-config created\nconfigmap/centraldashboard-parameters created\nservice/centraldashboard created\ndeployment.apps/centraldashboard created\nvirtualservice.networking.istio.io/centraldashboard created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep centraldashboard\n")),(0,n.kt)("p",null,"kubeflow namespace \uc5d0 centraldashboard \uad00\ub828 1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"centraldashboard-8fc7d8cc-xl7ts 1/1 Running 0 52s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c Central Dashboard UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/centraldashboard -n kubeflow 8082:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8082/"},"http://localhost:8082/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"central-dashboard",src:t(9536).Z,width:"4982",height:"1548"})),(0,n.kt)("h3",{id:"admission-webhook"},"Admission Webhook"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/poddefaults.kubeflow.org created\nserviceaccount/admission-webhook-service-account created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-cluster-role created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-admin created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-edit created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-view created\nclusterrolebinding.rbac.authorization.k8s.io/admission-webhook-cluster-role-binding created\nservice/admission-webhook-service created\ndeployment.apps/admission-webhook-deployment created\ncertificate.cert-manager.io/admission-webhook-cert created\nissuer.cert-manager.io/admission-webhook-selfsigned-issuer created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/admission-webhook-mutating-webhook-configuration created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep admission-webhook\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"admission-webhook-deployment-667bd68d94-2hhrx 1/1 Running 0 11s\n")),(0,n.kt)("h3",{id:"notebooks--jupyter-web-app"},"Notebooks & Jupyter Web App"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Notebook controller \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/notebooks.kubeflow.org created\nserviceaccount/notebook-controller-service-account created\nrole.rbac.authorization.k8s.io/notebook-controller-leader-election-role created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-admin created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-edit created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-view created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-role created\nrolebinding.rbac.authorization.k8s.io/notebook-controller-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/notebook-controller-role-binding created\nconfigmap/notebook-controller-config-m44cmb547t created\nservice/notebook-controller-service created\ndeployment.apps/notebook-controller-deployment created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep notebook-controller\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"notebook-controller-deployment-75b4f7b578-w4d4l 1/1 Running 0 105s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Jupyter Web App \uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/jupyter-web-app-service-account created\nrole.rbac.authorization.k8s.io/jupyter-web-app-jupyter-notebook-role created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-admin created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-edit created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-view created\nrolebinding.rbac.authorization.k8s.io/jupyter-web-app-jupyter-notebook-role-binding created\nclusterrolebinding.rbac.authorization.k8s.io/jupyter-web-app-cluster-role-binding created\nconfigmap/jupyter-web-app-config-76844k4cd7 created\nconfigmap/jupyter-web-app-logos created\nconfigmap/jupyter-web-app-parameters-chmg88cm48 created\nservice/jupyter-web-app-service created\ndeployment.apps/jupyter-web-app-deployment created\nvirtualservice.networking.istio.io/jupyter-web-app-jupyter-web-app created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep jupyter-web-app\n")),(0,n.kt)("p",{parentName:"li"},"1\uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"jupyter-web-app-deployment-6f744fbc54-p27ts 1/1 Running 0 2m\n")))),(0,n.kt)("h3",{id:"profiles--kfam"},"Profiles + KFAM"),(0,n.kt)("p",null,"Profile Controller\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/profiles.kubeflow.org created\nserviceaccount/profiles-controller-service-account created\nrole.rbac.authorization.k8s.io/profiles-leader-election-role created\nrolebinding.rbac.authorization.k8s.io/profiles-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/profiles-cluster-role-binding created\nconfigmap/namespace-labels-data-48h7kd55mc created\nconfigmap/profiles-config-46c7tgh6fd created\nservice/profiles-kfam created\ndeployment.apps/profiles-deployment created\nvirtualservice.networking.istio.io/profiles-kfam created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep profiles-deployment\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"profiles-deployment-89f7d88b-qsnrd 2/2 Running 0 42s\n")),(0,n.kt)("h3",{id:"volumes-web-app"},"Volumes Web App"),(0,n.kt)("p",null,"Volumes Web App \uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/volumes-web-app-service-account created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-admin created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-edit created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-view created\nclusterrolebinding.rbac.authorization.k8s.io/volumes-web-app-cluster-role-binding created\nconfigmap/volumes-web-app-parameters-4gg8cm2gmk created\nservice/volumes-web-app-service created\ndeployment.apps/volumes-web-app-deployment created\nvirtualservice.networking.istio.io/volumes-web-app-volumes-web-app created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep volumes-web-app\n")),(0,n.kt)("p",null,"1\uac1c\uc758 pod\uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"volumes-web-app-deployment-8589d664cc-62svl 1/1 Running 0 27s\n")),(0,n.kt)("h3",{id:"tensorboard--tensorboard-web-app"},"Tensorboard & Tensorboard Web App"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Tensorboard Web App \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/tensorboards-web-app-service-account created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-admin created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-edit created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-view created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboards-web-app-cluster-role-binding created\nconfigmap/tensorboards-web-app-parameters-g28fbd6cch created\nservice/tensorboards-web-app-service created\ndeployment.apps/tensorboards-web-app-deployment created\nvirtualservice.networking.istio.io/tensorboards-web-app-tensorboards-web-app created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep tensorboards-web-app\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tensorboards-web-app-deployment-6ff79b7f44-qbzmw 1/1 Running 0 22s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Tensorboard Controller \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/tensorboards.tensorboard.kubeflow.org created\nserviceaccount/tensorboard-controller created\nrole.rbac.authorization.k8s.io/tensorboard-controller-leader-election-role created\nclusterrole.rbac.authorization.k8s.io/tensorboard-controller-manager-role created\nclusterrole.rbac.authorization.k8s.io/tensorboard-controller-proxy-role created\nrolebinding.rbac.authorization.k8s.io/tensorboard-controller-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboard-controller-manager-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboard-controller-proxy-rolebinding created\nconfigmap/tensorboard-controller-config-bf88mm96c8 created\nservice/tensorboard-controller-controller-manager-metrics-service created\ndeployment.apps/tensorboard-controller-controller-manager created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep tensorboard-controller\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tensorboard-controller-controller-manager-954b7c544-vjpzj 3/3 Running 1 73s\n")))),(0,n.kt)("h3",{id:"training-operator"},"Training Operator"),(0,n.kt)("p",null,"Training Operator \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/mxjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/pytorchjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/tfjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/xgboostjobs.kubeflow.org created\nserviceaccount/training-operator created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-view created\nclusterrole.rbac.authorization.k8s.io/training-operator created\nclusterrolebinding.rbac.authorization.k8s.io/training-operator created\nservice/training-operator created\ndeployment.apps/training-operator created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep training-operator\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"training-operator-7d98f9dd88-6887f 1/1 Running 0 28s\n")),(0,n.kt)("h3",{id:"user-namespace"},"User Namespace"),(0,n.kt)("p",null,"Kubeflow \uc0ac\uc6a9\uc744 \uc704\ud574, \uc0ac\uc6a9\ud560 User\uc758 Kubeflow Profile \uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/user-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"configmap/default-install-config-9h2h2b6hbk created\nprofile.kubeflow.org/kubeflow-user-example-com created\n")),(0,n.kt)("p",null,"kubeflow-user-example-com profile \uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get profile\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-user-example-com 37s\n")),(0,n.kt)("h2",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,n.kt)("p",null,"Kubeflow central dashboard\uc5d0 web browser\ub85c \uc811\uc18d\ud558\uae30 \uc704\ud574 \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,n.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8080"},"http://localhost:8080")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"login-ui",src:t(1417).Z,width:"2554",height:"1202"})),(0,n.kt)("p",null,"\ub2e4\uc74c \uc811\uc18d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Email Address: ",(0,n.kt)("inlineCode",{parentName:"li"},"user@example.com")),(0,n.kt)("li",{parentName:"ul"},"Password: ",(0,n.kt)("inlineCode",{parentName:"li"},"12341234"))),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"central-dashboard",src:t(3733).Z,width:"4008",height:"1266"})))}d.isMDXComponent=!0},3733:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/after-login-4b41daca6d9a97824552770b832d59b0.png"},9536:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/central-dashboard-ddf80e24ff9066a7e3fdbfd0d58b5721.png"},5606:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/katib-ui-f10efe0ffd3bb57b1de7bdc2ff2aa880.png"},5688:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/localhost-reject-8d0b59ff30048e97d5721f786f25c857.png"},1417:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/login-after-install-a3e252f02dc4f4988686d6ae97ddd41f.png"},8730:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/pipeline-ui-796868a1ebeabfd6d1b6eb9b54c389aa.png"}}]); \ No newline at end of file diff --git a/assets/js/838277dc.cefd9250.js b/assets/js/838277dc.cefd9250.js new file mode 100644 index 00000000..24577307 --- /dev/null +++ b/assets/js/838277dc.cefd9250.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9683],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),c=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return o.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),u=c(n),f=r,m=u["".concat(p,".").concat(f)]||u[f]||d[f]||l;return n?o.createElement(m,i(i({ref:t},s),{},{components:n})):o.createElement(m,i({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=f;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[u]="string"==typeof e?e:r,i[1]=a;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>a,toc:()=>c});var o=n(7462),r=(n(7294),n(3905));const l={title:"2. Kubeflow Concepts",description:"",sidebar_position:2,contributors:["Jongseob Jeon"]},i=void 0,a={unversionedId:"kubeflow/kubeflow-concepts",id:"version-1.0/kubeflow/kubeflow-concepts",title:"2. Kubeflow Concepts",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/kubeflow-concepts.md",sourceDirName:"kubeflow",slug:"/kubeflow/kubeflow-concepts",permalink:"/docs/1.0/kubeflow/kubeflow-concepts",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/kubeflow-concepts.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Kubeflow Concepts",description:"",sidebar_position:2,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"1. Kubeflow Introduction",permalink:"/docs/1.0/kubeflow/kubeflow-intro"},next:{title:"3. Install Requirements",permalink:"/docs/1.0/kubeflow/basic-requirements"}},p={},c=[{value:"Component",id:"component",level:2},{value:"Component Contents",id:"component-contents",level:3},{value:"Component Wrapper",id:"component-wrapper",level:3},{value:"Artifacts",id:"artifacts",level:3},{value:"Model",id:"model",level:4},{value:"Data",id:"data",level:4},{value:"Metric",id:"metric",level:4},{value:"Pipeline",id:"pipeline",level:2},{value:"Pipeline Config",id:"pipeline-config",level:3},{value:"Run",id:"run",level:2}],s={toc:c},u="wrapper";function d(e){let{components:t,...l}=e;return(0,r.kt)(u,(0,o.Z)({},s,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"component"},"Component"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8(Component)\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20(Component contents)\uc640 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c(Component wrapper)\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.\n\ud558\ub098\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \ud1b5\ud574 kubeflow\uc5d0 \uc804\ub2ec\ub418\uba70 \uc804\ub2ec\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc815\uc758\ub41c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589(execute)\ud558\uace0 \uc544\ud2f0\ud329\ud2b8(artifacts)\ub4e4\uc744 \uc0dd\uc0b0\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-0.png",src:n(5235).Z,width:"1392",height:"704"})),(0,r.kt)("h3",{id:"component-contents"},"Component Contents"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uad6c\uc131\ud558\ub294 \uac83\uc740 \ucd1d 3\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-1.png",src:n(8694).Z,width:"574",height:"436"})),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Environemnt"),(0,r.kt)("li",{parentName:"ol"},"Python code w\\ Config"),(0,r.kt)("li",{parentName:"ol"},"Generates Artifacts")),(0,r.kt)("p",null,"\uc608\uc2dc\uc640 \ud568\uaed8 \uac01 \uad6c\uc131 \uc694\uc18c\uac00 \uc5b4\ub5a4 \uac83\uc778\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\ub2e4\uc74c\uacfc \uac19\uc774 \ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc640 SVC(Support Vector Classifier)\ub97c \ud559\uc2b5\ud55c \ud6c4 SVC \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc744 \uc801\uc740 \ud30c\uc774\uc36c \ucf54\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import dill\nimport pandas as pd\n\nfrom sklearn.svm import SVC\n\ntrain_data = pd.read_csv(train_data_path)\ntrain_target= pd.read_csv(train_target_path)\n\nclf= SVC(\n kernel=kernel\n)\nclf.fit(train_data)\n\nwith open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,"\uc704\uc758 \ud30c\uc774\uc36c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub85c \ub098\ub20c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-2.png",src:n(2029).Z,width:"832",height:"410"})),(0,r.kt)("p",null,"Environment\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\ub4e4\uc744 import\ud558\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c\uc73c\ub85c Python Code w\\ Config \uc5d0\uc11c\ub294 \uc8fc\uc5b4\uc9c4 Config\ub97c \uc774\uc6a9\ud574 \uc2e4\uc81c\ub85c \ud559\uc2b5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc544\ud2f0\ud329\ud2b8\ub97c \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"component-wrapper"},"Component Wrapper"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc5d0 \ud544\uc694\ud55c Config\ub97c \uc804\ub2ec\ud558\uace0 \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc791\uc5c5\uc744 \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-3.png",src:n(2335).Z,width:"1066",height:"766"})),(0,r.kt)("p",null,"Kubeflow\uc5d0\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc704\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_svc_from_csv"),"\uc640 \uac19\uc774 \ud568\uc218\uc758 \ud615\ud0dc\ub85c \uc815\uc758\ud569\ub2c8\ub2e4.\n\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \ucf58\ud150\uce20\ub97c \uac10\uc2f8\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-4.png",src:n(6425).Z,width:"464",height:"826"})),(0,r.kt)("h3",{id:"artifacts"},"Artifacts"),(0,r.kt)("p",null,"\uc704\uc758 \uc124\uba85\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc544\ud2f0\ud329\ud2b8(Artifacts)\ub97c \uc0dd\uc131\ud55c\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \uc544\ud2f0\ud329\ud2b8\ub780 evaluation result, log \ub4f1 \uc5b4\ub5a4 \ud615\ud0dc\ub85c\ub4e0 \ud30c\uc77c\ub85c \uc0dd\uc131\ub418\ub294 \uac83\uc744 \ud1b5\ud2c0\uc5b4\uc11c \uce6d\ud558\ub294 \uc6a9\uc5b4\uc785\ub2c8\ub2e4.\n\uadf8\uc911 \uc6b0\ub9ac\uac00 \uad00\uc2ec\uc744 \ub450\ub294 \uc720\uc758\ubbf8\ud55c \uac83\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-5.png",src:n(4454).Z,width:"1700",height:"454"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Model"),(0,r.kt)("li",{parentName:"ul"},"Data"),(0,r.kt)("li",{parentName:"ul"},"Metric"),(0,r.kt)("li",{parentName:"ul"},"etc")),(0,r.kt)("h4",{id:"model"},"Model"),(0,r.kt)("p",null,"\uc800\ud76c\ub294 \ubaa8\ub378\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758 \ud588\uc2b5\ub2c8\ub2e4."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\ubaa8\ub378\uc774\ub780 \ud30c\uc774\uc36c \ucf54\ub4dc\uc640 \ud559\uc2b5\ub41c Weights\uc640 Network \uad6c\uc870 \uadf8\ub9ac\uace0 \uc774\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud55c \ud658\uacbd\uc774 \ubaa8\ub450 \ud3ec\ud568\ub41c \ud615\ud0dc")),(0,r.kt)("h4",{id:"data"},"Data"),(0,r.kt)("p",null,"\ub370\uc774\ud130\ub294 \uc804 \ucc98\ub9ac\ub41c \ud53c\ucc98, \ubaa8\ub378\uc758 \uc608\uce21 \uac12 \ub4f1\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"metric"},"Metric"),(0,r.kt)("p",null,"Metric\uc740 \ub3d9\uc801 \uc9c0\ud45c\uc640 \uc815\uc801 \uc9c0\ud45c \ub450 \uac00\uc9c0\ub85c \ub098\ub204\uc5c8\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ub3d9\uc801 \uc9c0\ud45c\ub780 train loss\uc640 \uac19\uc774 \ud559\uc2b5\uc774 \uc9c4\ud589\ub418\ub294 \uc911 \uc5d0\ud3ed(Epoch)\ub9c8\ub2e4 \uacc4\uc18d\ud574\uc11c \ubcc0\ud654\ud558\ub294 \uac12\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"\uc815\uc801 \uc9c0\ud45c\ub780 \ud559\uc2b5\uc774 \ub05d\ub09c \ud6c4 \ucd5c\uc885\uc801\uc73c\ub85c \ubaa8\ub378\uc744 \ud3c9\uac00\ud558\ub294 \uc815\ud655\ub3c4 \ub4f1\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.")),(0,r.kt)("h2",{id:"pipeline"},"Pipeline"),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc740 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uacfc \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc21c\uc11c\ub3c4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub54c, \uc21c\uc11c\ub3c4\ub294 \ubc29\ud5a5 \uc21c\ud658\uc774 \uc5c6\ub294 \uadf8\ub798\ud504\ub85c \uc774\ub8e8\uc5b4\uc838 \uc788\uc73c\uba70, \uac04\ub2e8\ud55c \uc870\uac74\ubb38\uc744 \ud3ec\ud568\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-6.png",src:n(8050).Z,width:"1696",height:"746"})),(0,r.kt)("h3",{id:"pipeline-config"},"Pipeline Config"),(0,r.kt)("p",null,"\uc55e\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574\uc11c\ub294 Config\uac00 \ud544\uc694\ud558\ub2e4\uace0 \uc124\uba85\ud588\uc2b5\ub2c8\ub2e4. \ud30c\uc774\ud504\ub77c\uc778\uc744 \uad6c\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc758 Config \ub4e4\uc744 \ubaa8\uc544 \ub454 \uac83\uc774 \ud30c\uc774\ud504\ub77c\uc778 Config\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-7.png",src:n(1333).Z,width:"1810",height:"432"})),(0,r.kt)("h2",{id:"run"},"Run"),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc774 \ud544\uc694\ub85c \ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778 Config\uac00 \uc8fc\uc5b4\uc838\uc57c\uc9c0\ub9cc \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","Kubeflow\uc5d0\uc11c\ub294 \uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\uc744 Run \uc774\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-8.png",src:n(5460).Z,width:"1810",height:"576"})),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc774 \uc2e4\ud589\ub418\uba74 \uac01 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc544\ud2f0\ud329\ud2b8\ub4e4\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\nKubeflow pipeline\uc5d0\uc11c\ub294 Run \ud558\ub098\ub2f9 \uace0\uc720\ud55c ID \ub97c \uc0dd\uc131\ud558\uace0, Run\uc5d0\uc11c \uc0dd\uc131\ub418\ub294 \ubaa8\ub4e0 \uc544\ud2f0\ud329\ud2b8\ub4e4\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-9.png",src:n(9069).Z,width:"1810",height:"592"})),(0,r.kt)("p",null,"\uadf8\ub7ec\uba74 \uc774\uc81c \uc9c1\uc811 \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},5235:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-0-c3636a3fe20bb4a74d64d8565b4a51d9.png"},8694:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-1-887ac07d1b11b84ee3fc5d7b882ad4bc.png"},2029:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-2-00e4917a1ec11cff7fc7a3b00c75a9e9.png"},2335:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-3-0916d8982b42a638e986fd955f4b5fd0.png"},6425:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-4-3e6a8ee159e889b5e1bffc58dbb24b85.png"},4454:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-5-31eb60d97518af020d18d30e3b5c5d16.png"},8050:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-6-db0ab4d56f11dcad062bb89374f7ff5b.png"},1333:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-7-277a9b30da3a2fc3519d3453964c5d52.png"},5460:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-8-2350dff71d7f031b8cce3b73f8fd4381.png"},9069:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-9-f366186846ec1d019b742bf478928f80.png"}}]); \ No newline at end of file diff --git a/assets/js/838277dc.ec9eb684.js b/assets/js/838277dc.ec9eb684.js deleted file mode 100644 index 49f7a920..00000000 --- a/assets/js/838277dc.ec9eb684.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9683],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),c=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return o.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),u=c(n),f=r,m=u["".concat(p,".").concat(f)]||u[f]||d[f]||l;return n?o.createElement(m,i(i({ref:t},s),{},{components:n})):o.createElement(m,i({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=f;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[u]="string"==typeof e?e:r,i[1]=a;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>l,metadata:()=>a,toc:()=>c});var o=n(7462),r=(n(7294),n(3905));const l={title:"2. Kubeflow Concepts",description:"",sidebar_position:2,contributors:["Jongseob Jeon"]},i=void 0,a={unversionedId:"kubeflow/kubeflow-concepts",id:"version-1.0/kubeflow/kubeflow-concepts",title:"2. Kubeflow Concepts",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/kubeflow-concepts.md",sourceDirName:"kubeflow",slug:"/kubeflow/kubeflow-concepts",permalink:"/docs/1.0/kubeflow/kubeflow-concepts",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/kubeflow-concepts.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Kubeflow Concepts",description:"",sidebar_position:2,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"1. Kubeflow Introduction",permalink:"/docs/1.0/kubeflow/kubeflow-intro"},next:{title:"3. Install Requirements",permalink:"/docs/1.0/kubeflow/basic-requirements"}},p={},c=[{value:"Component",id:"component",level:2},{value:"Component Contents",id:"component-contents",level:3},{value:"Component Wrapper",id:"component-wrapper",level:3},{value:"Artifacts",id:"artifacts",level:3},{value:"Model",id:"model",level:4},{value:"Data",id:"data",level:4},{value:"Metric",id:"metric",level:4},{value:"Pipeline",id:"pipeline",level:2},{value:"Pipeline Config",id:"pipeline-config",level:3},{value:"Run",id:"run",level:2}],s={toc:c},u="wrapper";function d(e){let{components:t,...l}=e;return(0,r.kt)(u,(0,o.Z)({},s,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"component"},"Component"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8(Component)\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20(Component contents)\uc640 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c(Component wrapper)\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.\n\ud558\ub098\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \ud1b5\ud574 kubeflow\uc5d0 \uc804\ub2ec\ub418\uba70 \uc804\ub2ec\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc815\uc758\ub41c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589(execute)\ud558\uace0 \uc544\ud2f0\ud329\ud2b8(artifacts)\ub4e4\uc744 \uc0dd\uc0b0\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-0.png",src:n(5235).Z,width:"1392",height:"704"})),(0,r.kt)("h3",{id:"component-contents"},"Component Contents"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uad6c\uc131\ud558\ub294 \uac83\uc740 \ucd1d 3\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-1.png",src:n(8694).Z,width:"574",height:"436"})),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Environemnt"),(0,r.kt)("li",{parentName:"ol"},"Python code w\\ Config"),(0,r.kt)("li",{parentName:"ol"},"Generates Artifacts")),(0,r.kt)("p",null,"\uc608\uc2dc\uc640 \ud568\uaed8 \uac01 \uad6c\uc131 \uc694\uc18c\uac00 \uc5b4\ub5a4 \uac83\uc778\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\ub2e4\uc74c\uacfc \uac19\uc774 \ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc640 SVC(Support Vector Classifier)\ub97c \ud559\uc2b5\ud55c \ud6c4 SVC \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc744 \uc801\uc740 \ud30c\uc774\uc36c \ucf54\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import dill\nimport pandas as pd\n\nfrom sklearn.svm import SVC\n\ntrain_data = pd.read_csv(train_data_path)\ntrain_target= pd.read_csv(train_target_path)\n\nclf= SVC(\n kernel=kernel\n)\nclf.fit(train_data)\n\nwith open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,r.kt)("p",null,"\uc704\uc758 \ud30c\uc774\uc36c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub85c \ub098\ub20c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-2.png",src:n(2029).Z,width:"832",height:"410"})),(0,r.kt)("p",null,"Environment\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\ub4e4\uc744 import\ud558\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c\uc73c\ub85c Python Code w\\ Config \uc5d0\uc11c\ub294 \uc8fc\uc5b4\uc9c4 Config\ub97c \uc774\uc6a9\ud574 \uc2e4\uc81c\ub85c \ud559\uc2b5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc544\ud2f0\ud329\ud2b8\ub97c \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"component-wrapper"},"Component Wrapper"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc5d0 \ud544\uc694\ud55c Config\ub97c \uc804\ub2ec\ud558\uace0 \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc791\uc5c5\uc744 \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-3.png",src:n(2335).Z,width:"1066",height:"766"})),(0,r.kt)("p",null,"Kubeflow\uc5d0\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc704\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_svc_from_csv"),"\uc640 \uac19\uc774 \ud568\uc218\uc758 \ud615\ud0dc\ub85c \uc815\uc758\ud569\ub2c8\ub2e4.\n\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \ucf58\ud150\uce20\ub97c \uac10\uc2f8\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-4.png",src:n(6425).Z,width:"464",height:"826"})),(0,r.kt)("h3",{id:"artifacts"},"Artifacts"),(0,r.kt)("p",null,"\uc704\uc758 \uc124\uba85\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc544\ud2f0\ud329\ud2b8(Artifacts)\ub97c \uc0dd\uc131\ud55c\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \uc544\ud2f0\ud329\ud2b8\ub780 evaluation result, log \ub4f1 \uc5b4\ub5a4 \ud615\ud0dc\ub85c\ub4e0 \ud30c\uc77c\ub85c \uc0dd\uc131\ub418\ub294 \uac83\uc744 \ud1b5\ud2c0\uc5b4\uc11c \uce6d\ud558\ub294 \uc6a9\uc5b4\uc785\ub2c8\ub2e4.\n\uadf8\uc911 \uc6b0\ub9ac\uac00 \uad00\uc2ec\uc744 \ub450\ub294 \uc720\uc758\ubbf8\ud55c \uac83\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-5.png",src:n(4454).Z,width:"1700",height:"454"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Model"),(0,r.kt)("li",{parentName:"ul"},"Data"),(0,r.kt)("li",{parentName:"ul"},"Metric"),(0,r.kt)("li",{parentName:"ul"},"etc")),(0,r.kt)("h4",{id:"model"},"Model"),(0,r.kt)("p",null,"\uc800\ud76c\ub294 \ubaa8\ub378\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758 \ud588\uc2b5\ub2c8\ub2e4."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\ubaa8\ub378\uc774\ub780 \ud30c\uc774\uc36c \ucf54\ub4dc\uc640 \ud559\uc2b5\ub41c Weights\uc640 Network \uad6c\uc870 \uadf8\ub9ac\uace0 \uc774\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud55c \ud658\uacbd\uc774 \ubaa8\ub450 \ud3ec\ud568\ub41c \ud615\ud0dc")),(0,r.kt)("h4",{id:"data"},"Data"),(0,r.kt)("p",null,"\ub370\uc774\ud130\ub294 \uc804 \ucc98\ub9ac\ub41c \ud53c\ucc98, \ubaa8\ub378\uc758 \uc608\uce21 \uac12 \ub4f1\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"metric"},"Metric"),(0,r.kt)("p",null,"Metric\uc740 \ub3d9\uc801 \uc9c0\ud45c\uc640 \uc815\uc801 \uc9c0\ud45c \ub450 \uac00\uc9c0\ub85c \ub098\ub204\uc5c8\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ub3d9\uc801 \uc9c0\ud45c\ub780 train loss\uc640 \uac19\uc774 \ud559\uc2b5\uc774 \uc9c4\ud589\ub418\ub294 \uc911 \uc5d0\ud3ed(Epoch)\ub9c8\ub2e4 \uacc4\uc18d\ud574\uc11c \ubcc0\ud654\ud558\ub294 \uac12\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"\uc815\uc801 \uc9c0\ud45c\ub780 \ud559\uc2b5\uc774 \ub05d\ub09c \ud6c4 \ucd5c\uc885\uc801\uc73c\ub85c \ubaa8\ub378\uc744 \ud3c9\uac00\ud558\ub294 \uc815\ud655\ub3c4 \ub4f1\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.")),(0,r.kt)("h2",{id:"pipeline"},"Pipeline"),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc740 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uacfc \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc21c\uc11c\ub3c4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub54c, \uc21c\uc11c\ub3c4\ub294 \ubc29\ud5a5 \uc21c\ud658\uc774 \uc5c6\ub294 \uadf8\ub798\ud504\ub85c \uc774\ub8e8\uc5b4\uc838 \uc788\uc73c\uba70, \uac04\ub2e8\ud55c \uc870\uac74\ubb38\uc744 \ud3ec\ud568\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-6.png",src:n(8050).Z,width:"1696",height:"746"})),(0,r.kt)("h3",{id:"pipeline-config"},"Pipeline Config"),(0,r.kt)("p",null,"\uc55e\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574\uc11c\ub294 Config\uac00 \ud544\uc694\ud558\ub2e4\uace0 \uc124\uba85\ud588\uc2b5\ub2c8\ub2e4. \ud30c\uc774\ud504\ub77c\uc778\uc744 \uad6c\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc758 Config \ub4e4\uc744 \ubaa8\uc544 \ub454 \uac83\uc774 \ud30c\uc774\ud504\ub77c\uc778 Config\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-7.png",src:n(1333).Z,width:"1810",height:"432"})),(0,r.kt)("h2",{id:"run"},"Run"),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc774 \ud544\uc694\ub85c \ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778 Config\uac00 \uc8fc\uc5b4\uc838\uc57c\uc9c0\ub9cc \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","Kubeflow\uc5d0\uc11c\ub294 \uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\uc744 Run \uc774\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-8.png",src:n(5460).Z,width:"1810",height:"576"})),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc774 \uc2e4\ud589\ub418\uba74 \uac01 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc544\ud2f0\ud329\ud2b8\ub4e4\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\nKubeflow pipeline\uc5d0\uc11c\ub294 Run \ud558\ub098\ub2f9 \uace0\uc720\ud55c ID \ub97c \uc0dd\uc131\ud558\uace0, Run\uc5d0\uc11c \uc0dd\uc131\ub418\ub294 \ubaa8\ub4e0 \uc544\ud2f0\ud329\ud2b8\ub4e4\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"concept-9.png",src:n(9069).Z,width:"1810",height:"592"})),(0,r.kt)("p",null,"\uadf8\ub7ec\uba74 \uc774\uc81c \uc9c1\uc811 \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},5235:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-0-c3636a3fe20bb4a74d64d8565b4a51d9.png"},8694:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-1-887ac07d1b11b84ee3fc5d7b882ad4bc.png"},2029:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-2-00e4917a1ec11cff7fc7a3b00c75a9e9.png"},2335:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-3-0916d8982b42a638e986fd955f4b5fd0.png"},6425:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-4-3e6a8ee159e889b5e1bffc58dbb24b85.png"},4454:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-5-31eb60d97518af020d18d30e3b5c5d16.png"},8050:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-6-db0ab4d56f11dcad062bb89374f7ff5b.png"},1333:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-7-277a9b30da3a2fc3519d3453964c5d52.png"},5460:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-8-2350dff71d7f031b8cce3b73f8fd4381.png"},9069:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-9-f366186846ec1d019b742bf478928f80.png"}}]); \ No newline at end of file diff --git a/assets/js/84c20269.21b7dfca.js b/assets/js/84c20269.21b7dfca.js new file mode 100644 index 00000000..f49f11d1 --- /dev/null +++ b/assets/js/84c20269.21b7dfca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1017],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),s=p(r),k=o,m=s["".concat(c,".").concat(k)]||s[k]||d[k]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=k;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[s]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"What is Docker?",description:"Introduction to Docker.",sidebar_position:3,contributors:["Jongseob Jeon","Jaeyeon Kim"]},i=void 0,l={unversionedId:"prerequisites/docker/docker",id:"prerequisites/docker/docker",title:"What is Docker?",description:"Introduction to Docker.",source:"@site/docs/prerequisites/docker/docker.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/",permalink:"/docs/prerequisites/docker/",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/docker.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"What is Docker?",description:"Introduction to Docker.",sidebar_position:3,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"Why Docker & Kubernetes ?",permalink:"/docs/prerequisites/docker/introduction"},next:{title:"[Practice] Docker command",permalink:"/docs/prerequisites/docker/command"}},c={},p=[{value:"\ucee8\ud14c\uc774\ub108",id:"\ucee8\ud14c\uc774\ub108",level:2},{value:"\ub3c4\ucee4",id:"\ub3c4\ucee4",level:2},{value:"Layer \ud574\uc11d",id:"layer-\ud574\uc11d",level:2},{value:"For ML Engineer",id:"for-ml-engineer",level:2}],u={toc:p},s="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(s,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\ucee8\ud14c\uc774\ub108"},"\ucee8\ud14c\uc774\ub108"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc5b4\ub514\uc5d0\uc11c\ub098 \ub3d9\uc77c\ud558\uac8c \uc2e4\ud589\ud558\ub294 \uae30\uc220"))),(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\ub4e0 \ud30c\uc77c\ub4e4\uc758 \uc9d1\ud569"),(0,o.kt)("li",{parentName:"ul"},"\u2192 \ubd95\uc5b4\ube75 \ud2c0"))),(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108\ub780?",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uae30\ubc18\uc73c\ub85c \uc2e4\ud589\ub41c \ud55c \uac1c\uc758 \ud504\ub85c\uc138\uc2a4"),(0,o.kt)("li",{parentName:"ul"},"\u2192 \ubd95\uc5b4\ube75 \ud2c0\ub85c \ucc0d\uc5b4\ub0b8 \ubd95\uc5b4\ube75")))),(0,o.kt)("h2",{id:"\ub3c4\ucee4"},"\ub3c4\ucee4"),(0,o.kt)("p",null,"\ub3c4\ucee4\ub294 ",(0,o.kt)("strong",{parentName:"p"},"\ucee8\ud14c\uc774\ub108\ub97c \uad00\ub9ac"),"\ud558\uace0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574\uc8fc\ub294 \ud50c\ub7ab\ud3fc\uc785\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ub3c4\ucee4\uc758 \uc2ac\ub85c\uac74\uc740 \ubc14\ub85c ",(0,o.kt)("strong",{parentName:"p"},"Build Once, Run Anywhere")," \ub85c \uc5b4\ub514\uc5d0\uc11c\ub098 \ub3d9\uc77c\ud55c \uc2e4\ud589 \uacb0\uacfc\ub97c \ubcf4\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub3c4\ucee4 \ub0b4\ubd80\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \uacfc\uc815\uc744 \ubcf4\uc790\uba74 \uc2e4\uc81c\ub85c container \ub97c \uc704\ud55c \ub9ac\uc18c\uc2a4\ub97c \ubd84\ub9ac\ud558\uace0, lifecycle \uc744 \uc81c\uc5b4\ud558\ub294 \uae30\ub2a5\uc740 linux kernel \uc758 cgroup \ub4f1\uc774 \uc218\ud589\ud569\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc \uc774\ub7ec\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ubc14\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 ",(0,o.kt)("strong",{parentName:"p"},"\ub108\ubb34 \uc5b4\ub835\uae30 \ub54c\ubb38\uc5d0")," \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\uc0c1\ud654 layer\ub97c \ub9cc\ub4e4\uac8c \ub429\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"docker-layer.png",src:r(866).Z,width:"574",height:"455"})),(0,o.kt)("p",null,"\uc774\ub97c \ud1b5\ud574 \uc0ac\uc6a9\uc790\ub294 \uc0ac\uc6a9\uc790 \uce5c\ud654\uc801\uc778 API \uc778 ",(0,o.kt)("strong",{parentName:"p"},"Docker CLI")," \ub9cc\uc73c\ub85c \uc27d\uac8c \ucee8\ud14c\uc774\ub108\ub97c \uc81c\uc5b4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"layer-\ud574\uc11d"},"Layer \ud574\uc11d"),(0,o.kt)("p",null,"\uc704\uc5d0\uc11c \ub098\uc628 layer\ub4e4\uc758 \uc5ed\ud560\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"runC: linux kernel \uc758 \uae30\ub2a5\uc744 \uc9c1\uc811 \uc0ac\uc6a9\ud574\uc11c, container \ub77c\ub294 \ud558\ub098\uc758 \ud504\ub85c\uc138\uc2a4\uac00 \uc0ac\uc6a9\ud560 \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc640 cpu, memory, filesystem \ub4f1\uc744 \uaca9\ub9ac\uc2dc\ucf1c\uc8fc\ub294 \uae30\ub2a5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"containerd: runC(OCI layer) \uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\uae30 \uc704\ud55c \ucd94\uc0c1\ud654 \ub2e8\uacc4\uc774\uba70, \ud45c\uc900\ud654\ub41c \uc778\ud130\ud398\uc774\uc2a4(OCI)\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"dockerd: containerd \uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\ub294 \uc5ed\ud560\ub9cc \ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"docker cli: \uc0ac\uc6a9\uc790\ub294 docker cli \ub85c dockerd (Docker daemon)\uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc774 \ud1b5\uc2e0 \uacfc\uc815\uc5d0\uc11c unix socket \uc744 \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \uac00\ub054 \ub3c4\ucee4 \uad00\ub828 \uc5d0\ub7ec\uac00 \ub098\uba74 ",(0,o.kt)("inlineCode",{parentName:"li"},"/var/run/docker.sock")," \uac00 \uc0ac\uc6a9 \uc911\uc774\ub2e4, \uad8c\ud55c\uc774 \uc5c6\ub2e4 \ub4f1\ub4f1\uc758 \uc5d0\ub7ec \uba54\uc2dc\uc9c0\uac00 \ub098\uc624\ub294 \uac83\uc785\ub2c8\ub2e4.")))),(0,o.kt)("p",null,"\uc774\ucc98\ub7fc \ub3c4\ucee4\ub294 \ub9ce\uc740 \ub2e8\uacc4\ub97c \uac10\uc2f8\uace0 \uc788\uc9c0\ub9cc, \ud754\ud788 \ub3c4\ucee4\ub77c\ub294 \uc6a9\uc5b4\ub97c \uc0ac\uc6a9\ud560 \ub54c\ub294 Docker CLI \ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uace0, Dockerd \ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uace0 Docker Container \ud558\ub098\ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uc5b4\uc11c \ud63c\ub780\uc774 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc55e\uc73c\ub85c \ub098\uc624\ub294 \uae00\uc5d0\uc11c\ub3c4 \ub3c4\ucee4\uac00 \uc5ec\ub7ec\uac00\uc9c0 \uc758\ubbf8\ub85c \uc4f0\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"for-ml-engineer"},"For ML Engineer"),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ub3c4\ucee4\ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\uc720\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\ub098\uc758 ML \ud559\uc2b5/\ucd94\ub860 \ucf54\ub4dc\ub97c OS, python version, python \ud658\uacbd, \ud2b9\uc815 python package \ubc84\uc804\uc5d0 independent \ud558\ub3c4\ub85d \ud574\uc57c \ud55c\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"\uadf8\ub798\uc11c \ucf54\ub4dc \ubfd0\ub9cc\uc774 \uc544\ub2cc ",(0,o.kt)("strong",{parentName:"li"},"\ud574\ub2f9 \ucf54\ub4dc\uac00 \uc2e4\ud589\ub418\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\ub4e0 \uc885\uc18d\uc801\uc778 \ud328\ud0a4\uc9c0, \ud658\uacbd \ubcc0\uc218, \ud3f4\ub354\uba85 \ub4f1\ub4f1\uc744 \ud558\ub098\uc758 \ud328\ud0a4\uc9c0\ub85c")," \ubb36\uc744 \uc218 \uc788\ub294 \uae30\uc220\uc774 \ucee8\ud14c\uc774\ub108\ud654 \uae30\uc220\uc774\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"\uc774 \uae30\uc220\uc744 \uc27d\uac8c \uc0ac\uc6a9\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc911 \ud558\ub098\uac00 \ub3c4\ucee4\uc774\uba70, \ud328\ud0a4\uc9c0\ub97c \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub77c\uace0 \ubd80\ub978\ub2e4.")))}d.isMDXComponent=!0},866:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docker-layer-223ebf4a5bacfe912f92117606e17ac2.png"}}]); \ No newline at end of file diff --git a/assets/js/84c20269.e3f3a6bf.js b/assets/js/84c20269.e3f3a6bf.js deleted file mode 100644 index ad326684..00000000 --- a/assets/js/84c20269.e3f3a6bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1017],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),s=p(r),k=o,m=s["".concat(c,".").concat(k)]||s[k]||d[k]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=k;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[s]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"What is Docker?",description:"Introduction to Docker.",sidebar_position:3,contributors:["Jongseob Jeon","Jaeyeon Kim"]},i=void 0,l={unversionedId:"prerequisites/docker/docker",id:"prerequisites/docker/docker",title:"What is Docker?",description:"Introduction to Docker.",source:"@site/docs/prerequisites/docker/docker.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/",permalink:"/docs/prerequisites/docker/",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/docker.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"What is Docker?",description:"Introduction to Docker.",sidebar_position:3,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"Why Docker & Kubernetes ?",permalink:"/docs/prerequisites/docker/introduction"},next:{title:"[Practice] Docker command",permalink:"/docs/prerequisites/docker/command"}},c={},p=[{value:"\ucee8\ud14c\uc774\ub108",id:"\ucee8\ud14c\uc774\ub108",level:2},{value:"\ub3c4\ucee4",id:"\ub3c4\ucee4",level:2},{value:"Layer \ud574\uc11d",id:"layer-\ud574\uc11d",level:2},{value:"For ML Engineer",id:"for-ml-engineer",level:2}],u={toc:p},s="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(s,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"\ucee8\ud14c\uc774\ub108"},"\ucee8\ud14c\uc774\ub108"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc5b4\ub514\uc5d0\uc11c\ub098 \ub3d9\uc77c\ud558\uac8c \uc2e4\ud589\ud558\ub294 \uae30\uc220"))),(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\ub4e0 \ud30c\uc77c\ub4e4\uc758 \uc9d1\ud569"),(0,o.kt)("li",{parentName:"ul"},"\u2192 \ubd95\uc5b4\ube75 \ud2c0"))),(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108\ub780?",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uae30\ubc18\uc73c\ub85c \uc2e4\ud589\ub41c \ud55c \uac1c\uc758 \ud504\ub85c\uc138\uc2a4"),(0,o.kt)("li",{parentName:"ul"},"\u2192 \ubd95\uc5b4\ube75 \ud2c0\ub85c \ucc0d\uc5b4\ub0b8 \ubd95\uc5b4\ube75")))),(0,o.kt)("h2",{id:"\ub3c4\ucee4"},"\ub3c4\ucee4"),(0,o.kt)("p",null,"\ub3c4\ucee4\ub294 ",(0,o.kt)("strong",{parentName:"p"},"\ucee8\ud14c\uc774\ub108\ub97c \uad00\ub9ac"),"\ud558\uace0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574\uc8fc\ub294 \ud50c\ub7ab\ud3fc\uc785\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ub3c4\ucee4\uc758 \uc2ac\ub85c\uac74\uc740 \ubc14\ub85c ",(0,o.kt)("strong",{parentName:"p"},"Build Once, Run Anywhere")," \ub85c \uc5b4\ub514\uc5d0\uc11c\ub098 \ub3d9\uc77c\ud55c \uc2e4\ud589 \uacb0\uacfc\ub97c \ubcf4\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub3c4\ucee4 \ub0b4\ubd80\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \uacfc\uc815\uc744 \ubcf4\uc790\uba74 \uc2e4\uc81c\ub85c container \ub97c \uc704\ud55c \ub9ac\uc18c\uc2a4\ub97c \ubd84\ub9ac\ud558\uace0, lifecycle \uc744 \uc81c\uc5b4\ud558\ub294 \uae30\ub2a5\uc740 linux kernel \uc758 cgroup \ub4f1\uc774 \uc218\ud589\ud569\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc \uc774\ub7ec\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ubc14\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 ",(0,o.kt)("strong",{parentName:"p"},"\ub108\ubb34 \uc5b4\ub835\uae30 \ub54c\ubb38\uc5d0")," \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\uc0c1\ud654 layer\ub97c \ub9cc\ub4e4\uac8c \ub429\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"docker-layer.png",src:r(866).Z,width:"574",height:"455"})),(0,o.kt)("p",null,"\uc774\ub97c \ud1b5\ud574 \uc0ac\uc6a9\uc790\ub294 \uc0ac\uc6a9\uc790 \uce5c\ud654\uc801\uc778 API \uc778 ",(0,o.kt)("strong",{parentName:"p"},"Docker CLI")," \ub9cc\uc73c\ub85c \uc27d\uac8c \ucee8\ud14c\uc774\ub108\ub97c \uc81c\uc5b4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"layer-\ud574\uc11d"},"Layer \ud574\uc11d"),(0,o.kt)("p",null,"\uc704\uc5d0\uc11c \ub098\uc628 layer\ub4e4\uc758 \uc5ed\ud560\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"runC: linux kernel \uc758 \uae30\ub2a5\uc744 \uc9c1\uc811 \uc0ac\uc6a9\ud574\uc11c, container \ub77c\ub294 \ud558\ub098\uc758 \ud504\ub85c\uc138\uc2a4\uac00 \uc0ac\uc6a9\ud560 \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc640 cpu, memory, filesystem \ub4f1\uc744 \uaca9\ub9ac\uc2dc\ucf1c\uc8fc\ub294 \uae30\ub2a5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"containerd: runC(OCI layer) \uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\uae30 \uc704\ud55c \ucd94\uc0c1\ud654 \ub2e8\uacc4\uc774\uba70, \ud45c\uc900\ud654\ub41c \uc778\ud130\ud398\uc774\uc2a4(OCI)\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"dockerd: containerd \uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\ub294 \uc5ed\ud560\ub9cc \ud569\ub2c8\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"docker cli: \uc0ac\uc6a9\uc790\ub294 docker cli \ub85c dockerd (Docker daemon)\uc5d0\uac8c \uba85\ub839\uc744 \ub0b4\ub9ac\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"\uc774 \ud1b5\uc2e0 \uacfc\uc815\uc5d0\uc11c unix socket \uc744 \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \uac00\ub054 \ub3c4\ucee4 \uad00\ub828 \uc5d0\ub7ec\uac00 \ub098\uba74 ",(0,o.kt)("inlineCode",{parentName:"li"},"/var/run/docker.sock")," \uac00 \uc0ac\uc6a9 \uc911\uc774\ub2e4, \uad8c\ud55c\uc774 \uc5c6\ub2e4 \ub4f1\ub4f1\uc758 \uc5d0\ub7ec \uba54\uc2dc\uc9c0\uac00 \ub098\uc624\ub294 \uac83\uc785\ub2c8\ub2e4.")))),(0,o.kt)("p",null,"\uc774\ucc98\ub7fc \ub3c4\ucee4\ub294 \ub9ce\uc740 \ub2e8\uacc4\ub97c \uac10\uc2f8\uace0 \uc788\uc9c0\ub9cc, \ud754\ud788 \ub3c4\ucee4\ub77c\ub294 \uc6a9\uc5b4\ub97c \uc0ac\uc6a9\ud560 \ub54c\ub294 Docker CLI \ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uace0, Dockerd \ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uace0 Docker Container \ud558\ub098\ub97c \ub9d0\ud560 \ub54c\ub3c4 \uc788\uc5b4\uc11c \ud63c\ub780\uc774 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc55e\uc73c\ub85c \ub098\uc624\ub294 \uae00\uc5d0\uc11c\ub3c4 \ub3c4\ucee4\uac00 \uc5ec\ub7ec\uac00\uc9c0 \uc758\ubbf8\ub85c \uc4f0\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"for-ml-engineer"},"For ML Engineer"),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ub3c4\ucee4\ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\uc720\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\ub098\uc758 ML \ud559\uc2b5/\ucd94\ub860 \ucf54\ub4dc\ub97c OS, python version, python \ud658\uacbd, \ud2b9\uc815 python package \ubc84\uc804\uc5d0 independent \ud558\ub3c4\ub85d \ud574\uc57c \ud55c\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"\uadf8\ub798\uc11c \ucf54\ub4dc \ubfd0\ub9cc\uc774 \uc544\ub2cc ",(0,o.kt)("strong",{parentName:"li"},"\ud574\ub2f9 \ucf54\ub4dc\uac00 \uc2e4\ud589\ub418\uae30 \uc704\ud574 \ud544\uc694\ud55c \ubaa8\ub4e0 \uc885\uc18d\uc801\uc778 \ud328\ud0a4\uc9c0, \ud658\uacbd \ubcc0\uc218, \ud3f4\ub354\uba85 \ub4f1\ub4f1\uc744 \ud558\ub098\uc758 \ud328\ud0a4\uc9c0\ub85c")," \ubb36\uc744 \uc218 \uc788\ub294 \uae30\uc220\uc774 \ucee8\ud14c\uc774\ub108\ud654 \uae30\uc220\uc774\ub2e4."),(0,o.kt)("li",{parentName:"ol"},"\uc774 \uae30\uc220\uc744 \uc27d\uac8c \uc0ac\uc6a9\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc911 \ud558\ub098\uac00 \ub3c4\ucee4\uc774\uba70, \ud328\ud0a4\uc9c0\ub97c \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub77c\uace0 \ubd80\ub978\ub2e4.")))}d.isMDXComponent=!0},866:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docker-layer-223ebf4a5bacfe912f92117606e17ac2.png"}}]); \ No newline at end of file diff --git a/assets/js/88b38b2b.5bc95a09.js b/assets/js/88b38b2b.5bc95a09.js deleted file mode 100644 index de1f4ccf..00000000 --- a/assets/js/88b38b2b.5bc95a09.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4299],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function p(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):p(p({},n),e)),t},m=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},s="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),s=u(t),d=o,f=s["".concat(l,".").concat(d)]||s[d]||c[d]||a;return t?r.createElement(f,p(p({ref:n},m),{},{components:t})):r.createElement(f,p({ref:n},m))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,p=new Array(a);p[0]=d;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i[s]="string"==typeof e?e:o,p[1]=i;for(var u=2;u{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(7462),o=(t(7294),t(3905));const a={title:"4. Component - Write",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},p=void 0,i={unversionedId:"kubeflow/basic-component",id:"kubeflow/basic-component",title:"4. Component - Write",description:"",source:"@site/docs/kubeflow/basic-component.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-component",permalink:"/docs/kubeflow/basic-component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-component.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Component - Write",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"3. Install Requirements",permalink:"/docs/kubeflow/basic-requirements"},next:{title:"5. Pipeline - Write",permalink:"/docs/kubeflow/basic-pipeline"}},l={},u=[{value:"Component",id:"component",level:2},{value:"Component Contents",id:"component-contents",level:2},{value:"Component Wrapper",id:"component-wrapper",level:2},{value:"Define a standalone Python function",id:"define-a-standalone-python-function",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"Share component with yaml file",id:"share-component-with-yaml-file",level:3},{value:"How Kubeflow executes component",id:"how-kubeflow-executes-component",level:2},{value:"References:",id:"references",level:2}],m={toc:u},s="wrapper";function c(e){let{components:n,...t}=e;return(0,o.kt)(s,(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"component"},"Component"),(0,o.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8(Component)\ub97c \uc791\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20(Component Contents) \uc791\uc131"),(0,o.kt)("li",{parentName:"ol"},"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c(Component Wrapper) \uc791\uc131")),(0,o.kt)("p",null,"\uc774\uc81c \uac01 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"component-contents"},"Component Contents"),(0,o.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub294 \uc6b0\ub9ac\uac00 \ud754\ud788 \uc791\uc131\ud558\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc\uc640 \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc22b\uc790\ub97c \uc785\ub825\uc73c\ub85c \ubc1b\uace0 \uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c \ucd9c\ub825\ud55c \ub4a4 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"print(number)\n")),(0,o.kt)("p",null,"\uadf8\ub7f0\ub370 \uc774 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 \uc5d0\ub7ec\uac00 \ub098\uace0 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294\ub370 \uadf8 \uc774\uc720\ub294 \ucd9c\ub825\ud574\uc57c \ud560 ",(0,o.kt)("inlineCode",{parentName:"p"},"number"),"\uac00 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/kubeflow/kubeflow-concepts"},"Kubeflow Concepts"),"\uc5d0\uc11c ",(0,o.kt)("inlineCode",{parentName:"p"},"number")," \uc640 \uac19\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc5d0\uc11c \ud544\uc694\ud55c \uac12\ub4e4\uc740 ",(0,o.kt)("strong",{parentName:"p"},"Config"),"\ub85c \uc815\uc758\ud55c\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574 \ud544\uc694\ud55c Config\ub4e4\uc740 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uc5d0\uc11c \uc804\ub2ec\uc774 \ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"component-wrapper"},"Component Wrapper"),(0,o.kt)("h3",{id:"define-a-standalone-python-function"},"Define a standalone Python function"),(0,o.kt)("p",null,"\uc774\uc81c \ud544\uc694\ud55c Config\ub97c \uc804\ub2ec\ud560 \uc218 \uc788\ub3c4\ub85d \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ubcc4\ub3c4\uc758 Config \uc5c6\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub85c \uac10\uc300 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"def print_and_return_number():\n print(number)\n return number\n")),(0,o.kt)("p",null,"\uc774\uc81c \ucf58\ud150\uce20\uc5d0\uc11c \ud544\uc694\ud55c Config\ub97c \ub798\ud37c\uc758 argument\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e4\ub9cc, argument \ub9cc\uc744 \uc801\ub294 \uac83\uc774 \uc544\ub2c8\ub77c argument\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub3c4 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. Kubeflow\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 Kubeflow \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud560 \ub54c, \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc758 \uc5f0\uacb0\uc5d0\uc11c \uc815\ud574\uc9c4 \uc785\ub825\uacfc \ucd9c\ub825\uc758 \ud0c0\uc785\uc774 \uc77c\uce58\ud558\ub294\uc9c0 \uccb4\ud06c\ud569\ub2c8\ub2e4. \ub9cc\uc57d \ucef4\ud3ec\ub10c\ud2b8\uac00 \ud544\uc694\ub85c \ud558\ub294 \uc785\ub825\uacfc \ub2e4\ub978 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uc804\ub2ec\ubc1b\uc740 \ucd9c\ub825\uc758 \ud3ec\ub9f7\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0 \ud30c\uc774\ud504\ub77c\uc778 \uc0dd\uc131\uc744 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\uc81c \ub2e4\uc74c\uacfc \uac19\uc774 argument\uc640 \uadf8 \ud0c0\uc785, \uadf8\ub9ac\uace0 \ubc18\ud658\ud558\ub294 \ud0c0\uc785\uc744 \uc801\uc5b4\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc644\uc131\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"def print_and_return_number(number: int) -> int:\n print(number)\n return number\n")),(0,o.kt)("p",null,"Kubeflow\uc5d0\uc11c \ubc18\ud658 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud0c0\uc785\uc740 json\uc5d0\uc11c \ud45c\ud604\ud560 \uc218 \uc788\ub294 \ud0c0\uc785\ub4e4\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub300\ud45c\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\uba70 \uad8c\uc7a5\ud558\ub294 \ud0c0\uc785\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"int"),(0,o.kt)("li",{parentName:"ul"},"float"),(0,o.kt)("li",{parentName:"ul"},"str")),(0,o.kt)("p",null,"\ub9cc\uc57d \ub2e8\uc77c \uac12\uc774 \uc544\ub2cc \uc5ec\ub7ec \uac12\uc744 \ubc18\ud658\ud558\ub824\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"collections.namedtuple")," \uc744 \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/python-function-components/#passing-parameters-by-value"},"Kubeflow \uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ucc38\uace0 \ud558\uc2dc\uae38 \ubc14\ub78d\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c 2\ub85c \ub098\ub208 \ubaab\uacfc \ub098\uba38\uc9c0\ub97c \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from typing import NamedTuple\n\n\ndef divide_and_return_number(\n number: int,\n) -> NamedTuple("DivideOutputs", [("quotient", int), ("remainder", int)]):\n from collections import namedtuple\n\n quotient, remainder = divmod(number, 2)\n print("quotient is", quotient)\n print("remainder is", remainder)\n\n divide_outputs = namedtuple(\n "DivideOutputs",\n [\n "quotient",\n "remainder",\n ],\n )\n return divide_outputs(quotient, remainder)\n')),(0,o.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,o.kt)("p",null,"\uc774\uc81c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud574\uc57c \ud569\ub2c8\ub2e4. \ubcc0\ud658\uc740 ",(0,o.kt)("inlineCode",{parentName:"p"},"kfp.components.create_component_from_func")," \ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub807\uac8c \ubcc0\ud658\ub41c \ud615\ud0dc\ub294 \ud30c\uc774\uc36c\uc5d0\uc11c \ud568\uc218\ub85c import \ud558\uc5ec\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from kfp.components import create_component_from_func\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n")),(0,o.kt)("h3",{id:"share-component-with-yaml-file"},"Share component with yaml file"),(0,o.kt)("p",null,"\ub9cc\uc57d \ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \uacf5\uc720\ub97c \ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0 YAML \ud30c\uc77c\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uacf5\uc720\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub97c \uc704\ud574\uc11c\ub294 \uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\ub97c YAML \ud30c\uc77c\ub85c \ubcc0\ud658\ud55c \ub4a4 ",(0,o.kt)("inlineCode",{parentName:"p"},"kfp.components.load_component_from_file")," \uc744 \ud1b5\ud574 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc6b0\uc120 \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c YAML \ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import create_component_from_func\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\nif __name__ == "__main__":\n print_and_return_number.component_spec.save("print_and_return_number.yaml")\n')),(0,o.kt)("p",null,"\uc791\uc131\ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"print_and_return_number.yaml")," \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4. \ud30c\uc77c\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'name: Print and return number\ninputs:\n- {name: number, type: Integer}\noutputs:\n- {name: Output, type: Integer}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n args:\n - --number\n - {inputValue: number}\n - \'----output-paths\'\n - {outputPath: Output}\n')),(0,o.kt)("p",null,"\uc774\uc81c \uc0dd\uc131\ub41c \ud30c\uc77c\uc744 \uacf5\uc720\ud574\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import load_component_from_file\n\nprint_and_return_number = load_component_from_file("print_and_return_number.yaml")\n')),(0,o.kt)("h2",{id:"how-kubeflow-executes-component"},"How Kubeflow executes component"),(0,o.kt)("p",null,"Kubeflow\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"docker pull "),": \uc815\uc758\ub41c \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \ud658\uacbd \uc815\ubcf4\uac00 \ub2f4\uae34 \uc774\ubbf8\uc9c0\ub97c pull"),(0,o.kt)("li",{parentName:"ol"},"run ",(0,o.kt)("inlineCode",{parentName:"li"},"command"),": pull \ud55c \uc774\ubbf8\uc9c0\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. ")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"print_and_return_number.yaml")," \ub97c \uc608\uc2dc\ub85c \ub4e4\uc790\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"@create_component_from_func")," \uc758 default image \ub294 python:3.7 \uc774\ubbc0\ub85c \ud574\ub2f9 \uc774\ubbf8\uc9c0\ub97c \uae30\uc900\uc73c\ub85c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"print(number)"))),(0,o.kt)("h2",{id:"references"},"References:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/python-function-components/#getting-started-with-python-function-based-components"},"Getting Started With Python function based components"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/88b38b2b.b386398a.js b/assets/js/88b38b2b.b386398a.js new file mode 100644 index 00000000..a6f639a2 --- /dev/null +++ b/assets/js/88b38b2b.b386398a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4299],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>f});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function p(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):p(p({},n),e)),t},m=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},s="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),s=u(t),d=o,f=s["".concat(l,".").concat(d)]||s[d]||c[d]||a;return t?r.createElement(f,p(p({ref:n},m),{},{components:t})):r.createElement(f,p({ref:n},m))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,p=new Array(a);p[0]=d;var i={};for(var l in n)hasOwnProperty.call(n,l)&&(i[l]=n[l]);i.originalType=e,i[s]="string"==typeof e?e:o,p[1]=i;for(var u=2;u{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(7462),o=(t(7294),t(3905));const a={title:"4. Component - Write",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},p=void 0,i={unversionedId:"kubeflow/basic-component",id:"kubeflow/basic-component",title:"4. Component - Write",description:"",source:"@site/docs/kubeflow/basic-component.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-component",permalink:"/docs/kubeflow/basic-component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-component.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Component - Write",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"3. Install Requirements",permalink:"/docs/kubeflow/basic-requirements"},next:{title:"5. Pipeline - Write",permalink:"/docs/kubeflow/basic-pipeline"}},l={},u=[{value:"Component",id:"component",level:2},{value:"Component Contents",id:"component-contents",level:2},{value:"Component Wrapper",id:"component-wrapper",level:2},{value:"Define a standalone Python function",id:"define-a-standalone-python-function",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"Share component with yaml file",id:"share-component-with-yaml-file",level:3},{value:"How Kubeflow executes component",id:"how-kubeflow-executes-component",level:2},{value:"References:",id:"references",level:2}],m={toc:u},s="wrapper";function c(e){let{components:n,...t}=e;return(0,o.kt)(s,(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"component"},"Component"),(0,o.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8(Component)\ub97c \uc791\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20(Component Contents) \uc791\uc131"),(0,o.kt)("li",{parentName:"ol"},"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c(Component Wrapper) \uc791\uc131")),(0,o.kt)("p",null,"\uc774\uc81c \uac01 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"component-contents"},"Component Contents"),(0,o.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub294 \uc6b0\ub9ac\uac00 \ud754\ud788 \uc791\uc131\ud558\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc\uc640 \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc22b\uc790\ub97c \uc785\ub825\uc73c\ub85c \ubc1b\uace0 \uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c \ucd9c\ub825\ud55c \ub4a4 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"print(number)\n")),(0,o.kt)("p",null,"\uadf8\ub7f0\ub370 \uc774 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 \uc5d0\ub7ec\uac00 \ub098\uace0 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294\ub370 \uadf8 \uc774\uc720\ub294 \ucd9c\ub825\ud574\uc57c \ud560 ",(0,o.kt)("inlineCode",{parentName:"p"},"number"),"\uac00 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/kubeflow/kubeflow-concepts"},"Kubeflow Concepts"),"\uc5d0\uc11c ",(0,o.kt)("inlineCode",{parentName:"p"},"number")," \uc640 \uac19\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc5d0\uc11c \ud544\uc694\ud55c \uac12\ub4e4\uc740 ",(0,o.kt)("strong",{parentName:"p"},"Config"),"\ub85c \uc815\uc758\ud55c\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574 \ud544\uc694\ud55c Config\ub4e4\uc740 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uc5d0\uc11c \uc804\ub2ec\uc774 \ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"component-wrapper"},"Component Wrapper"),(0,o.kt)("h3",{id:"define-a-standalone-python-function"},"Define a standalone Python function"),(0,o.kt)("p",null,"\uc774\uc81c \ud544\uc694\ud55c Config\ub97c \uc804\ub2ec\ud560 \uc218 \uc788\ub3c4\ub85d \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ubcc4\ub3c4\uc758 Config \uc5c6\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub85c \uac10\uc300 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"def print_and_return_number():\n print(number)\n return number\n")),(0,o.kt)("p",null,"\uc774\uc81c \ucf58\ud150\uce20\uc5d0\uc11c \ud544\uc694\ud55c Config\ub97c \ub798\ud37c\uc758 argument\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4. \ub2e4\ub9cc, argument \ub9cc\uc744 \uc801\ub294 \uac83\uc774 \uc544\ub2c8\ub77c argument\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub3c4 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. Kubeflow\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 Kubeflow \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud560 \ub54c, \ucef4\ud3ec\ub10c\ud2b8 \uac04\uc758 \uc5f0\uacb0\uc5d0\uc11c \uc815\ud574\uc9c4 \uc785\ub825\uacfc \ucd9c\ub825\uc758 \ud0c0\uc785\uc774 \uc77c\uce58\ud558\ub294\uc9c0 \uccb4\ud06c\ud569\ub2c8\ub2e4. \ub9cc\uc57d \ucef4\ud3ec\ub10c\ud2b8\uac00 \ud544\uc694\ub85c \ud558\ub294 \uc785\ub825\uacfc \ub2e4\ub978 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uc804\ub2ec\ubc1b\uc740 \ucd9c\ub825\uc758 \ud3ec\ub9f7\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0 \ud30c\uc774\ud504\ub77c\uc778 \uc0dd\uc131\uc744 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\uc81c \ub2e4\uc74c\uacfc \uac19\uc774 argument\uc640 \uadf8 \ud0c0\uc785, \uadf8\ub9ac\uace0 \ubc18\ud658\ud558\ub294 \ud0c0\uc785\uc744 \uc801\uc5b4\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc644\uc131\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"def print_and_return_number(number: int) -> int:\n print(number)\n return number\n")),(0,o.kt)("p",null,"Kubeflow\uc5d0\uc11c \ubc18\ud658 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud0c0\uc785\uc740 json\uc5d0\uc11c \ud45c\ud604\ud560 \uc218 \uc788\ub294 \ud0c0\uc785\ub4e4\ub9cc \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub300\ud45c\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\uba70 \uad8c\uc7a5\ud558\ub294 \ud0c0\uc785\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"int"),(0,o.kt)("li",{parentName:"ul"},"float"),(0,o.kt)("li",{parentName:"ul"},"str")),(0,o.kt)("p",null,"\ub9cc\uc57d \ub2e8\uc77c \uac12\uc774 \uc544\ub2cc \uc5ec\ub7ec \uac12\uc744 \ubc18\ud658\ud558\ub824\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"collections.namedtuple")," \uc744 \uc774\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/python-function-components/#passing-parameters-by-value"},"Kubeflow \uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ucc38\uace0 \ud558\uc2dc\uae38 \ubc14\ub78d\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c \uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c 2\ub85c \ub098\ub208 \ubaab\uacfc \ub098\uba38\uc9c0\ub97c \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from typing import NamedTuple\n\n\ndef divide_and_return_number(\n number: int,\n) -> NamedTuple("DivideOutputs", [("quotient", int), ("remainder", int)]):\n from collections import namedtuple\n\n quotient, remainder = divmod(number, 2)\n print("quotient is", quotient)\n print("remainder is", remainder)\n\n divide_outputs = namedtuple(\n "DivideOutputs",\n [\n "quotient",\n "remainder",\n ],\n )\n return divide_outputs(quotient, remainder)\n')),(0,o.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,o.kt)("p",null,"\uc774\uc81c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud3ec\ub9f7\uc73c\ub85c \ubcc0\ud658\ud574\uc57c \ud569\ub2c8\ub2e4. \ubcc0\ud658\uc740 ",(0,o.kt)("inlineCode",{parentName:"p"},"kfp.components.create_component_from_func")," \ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub807\uac8c \ubcc0\ud658\ub41c \ud615\ud0dc\ub294 \ud30c\uc774\uc36c\uc5d0\uc11c \ud568\uc218\ub85c import \ud558\uc5ec\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},"from kfp.components import create_component_from_func\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n")),(0,o.kt)("h3",{id:"share-component-with-yaml-file"},"Share component with yaml file"),(0,o.kt)("p",null,"\ub9cc\uc57d \ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \uacf5\uc720\ub97c \ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0 YAML \ud30c\uc77c\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uacf5\uc720\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub97c \uc704\ud574\uc11c\ub294 \uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\ub97c YAML \ud30c\uc77c\ub85c \ubcc0\ud658\ud55c \ub4a4 ",(0,o.kt)("inlineCode",{parentName:"p"},"kfp.components.load_component_from_file")," \uc744 \ud1b5\ud574 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc6b0\uc120 \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c YAML \ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import create_component_from_func\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\nif __name__ == "__main__":\n print_and_return_number.component_spec.save("print_and_return_number.yaml")\n')),(0,o.kt)("p",null,"\uc791\uc131\ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"print_and_return_number.yaml")," \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4. \ud30c\uc77c\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'name: Print and return number\ninputs:\n- {name: number, type: Integer}\noutputs:\n- {name: Output, type: Integer}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n args:\n - --number\n - {inputValue: number}\n - \'----output-paths\'\n - {outputPath: Output}\n')),(0,o.kt)("p",null,"\uc774\uc81c \uc0dd\uc131\ub41c \ud30c\uc77c\uc744 \uacf5\uc720\ud574\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import load_component_from_file\n\nprint_and_return_number = load_component_from_file("print_and_return_number.yaml")\n')),(0,o.kt)("h2",{id:"how-kubeflow-executes-component"},"How Kubeflow executes component"),(0,o.kt)("p",null,"Kubeflow\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"docker pull "),": \uc815\uc758\ub41c \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \ud658\uacbd \uc815\ubcf4\uac00 \ub2f4\uae34 \uc774\ubbf8\uc9c0\ub97c pull"),(0,o.kt)("li",{parentName:"ol"},"run ",(0,o.kt)("inlineCode",{parentName:"li"},"command"),": pull \ud55c \uc774\ubbf8\uc9c0\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. ")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"print_and_return_number.yaml")," \ub97c \uc608\uc2dc\ub85c \ub4e4\uc790\uba74 ",(0,o.kt)("inlineCode",{parentName:"p"},"@create_component_from_func")," \uc758 default image \ub294 python:3.7 \uc774\ubbc0\ub85c \ud574\ub2f9 \uc774\ubbf8\uc9c0\ub97c \uae30\uc900\uc73c\ub85c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4. "),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"print(number)"))),(0,o.kt)("h2",{id:"references"},"References:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/python-function-components/#getting-started-with-python-function-based-components"},"Getting Started With Python function based components"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8999d56c.1e15ee09.js b/assets/js/8999d56c.1e15ee09.js deleted file mode 100644 index e3eeb38d..00000000 --- a/assets/js/8999d56c.1e15ee09.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8231],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},k="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),k=p(a),c=r,d=k["".concat(s,".").concat(c)]||k[c]||m[c]||o;return a?n.createElement(d,l(l({ref:t},u),{},{components:a})):n.createElement(d,l({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[k]="string"==typeof e?e:r,l[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={title:"2. Notebooks",description:"",sidebar_position:2,contributors:["Jaeyeon Kim"]},l=void 0,i={unversionedId:"kubeflow-dashboard-guide/notebooks",id:"version-1.0/kubeflow-dashboard-guide/notebooks",title:"2. Notebooks",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/notebooks.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/notebooks",permalink:"/docs/1.0/kubeflow-dashboard-guide/notebooks",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/notebooks.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Notebooks",description:"",sidebar_position:2,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Central Dashboard",permalink:"/docs/1.0/kubeflow-dashboard-guide/intro"},next:{title:"3. Tensorboards",permalink:"/docs/1.0/kubeflow-dashboard-guide/tensorboards"}},s={},p=[{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84(Notebook Server) \uc0dd\uc131\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84notebook-server-\uc0dd\uc131\ud558\uae30",level:2},{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc811\uc18d\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc811\uc18d\ud558\uae30",level:2},{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc911\ub2e8\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc911\ub2e8\ud558\uae30",level:2}],u={toc:p},k="wrapper";function m(e){let{components:t,...o}=e;return(0,r.kt)(k,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84notebook-server-\uc0dd\uc131\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84(Notebook Server) \uc0dd\uc131\ud558\uae30"),(0,r.kt)("p",null,"\ub2e4\uc74c Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Notebooks\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"left-tabs",src:a(6316).Z,width:"3940",height:"1278"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"Notebooks \ud0ed\uc740 JupyterHub\uc640 \ube44\uc2b7\ud558\uac8c \uc720\uc800\ubcc4\ub85c jupyter notebook \ubc0f code server \ud658\uacbd(\uc774\ud558 \ub178\ud2b8\ubd81 \uc11c\ubc84)\uc744 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc0dd\uc131\ud558\uace0 \uc811\uc18d\ud560 \uc218 \uc788\ub294 \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-home",src:a(1579).Z,width:"5008",height:"2682"})),(0,r.kt)("p",null,"\uc624\ub978\ucabd \uc704\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"+ NEW NOTEBOOK")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"new-notebook",src:a(1286).Z,width:"1900",height:"312"})),(0,r.kt)("p",null,"\uc544\ub798\uc640 \uac19\uc740 \ud654\uba74\uc774 \ub098\ud0c0\ub098\uba74, \uc774\uc81c \uc0dd\uc131\ud560 \ub178\ud2b8\ubd81 \uc11c\ubc84\uc758 \uc2a4\ud399(Spec)\uc744 \uba85\uc2dc\ud558\uc5ec \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"create",src:a(3516).Z,width:"1738",height:"1674"})),(0,r.kt)("details",null,(0,r.kt)("summary",null,"\uac01 \uc2a4\ud399\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"name"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uad6c\ubd84\ud560 \uc218 \uc788\ub294 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"namespace")," :",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub530\ub85c \ubcc0\uacbd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. (\ud604\uc7ac \ub85c\uadf8\uc778\ud55c user \uacc4\uc815\uc758 namespace\uc774 \uc790\ub3d9\uc73c\ub85c \uc9c0\uc815\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.)"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Image"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"sklearn, pytorch, tensorflow \ub4f1\uc758 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0\uac00 \ubbf8\ub9ac \uc124\uce58\ub41c jupyter lab \uc774\ubbf8\uc9c0 \uc911 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc5d0\uc11c GPU\ub97c \uc0ac\uc6a9\ud558\uc5ec tensorflow-cuda, pytorch-cuda \ub4f1\uc758 \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, ",(0,r.kt)("strong",{parentName:"li"},"\ud558\ub2e8\uc758 GPUs")," \ubd80\ubd84\uc744 \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},"\ucd94\uac00\uc801\uc778 \ud328\ud0a4\uc9c0\ub098 \uc18c\uc2a4\ucf54\ub4dc \ub4f1\uc744 \ud3ec\ud568\ud55c \ucee4\uc2a4\ud140(Custom) \ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 \ucee4\uc2a4\ud140 \uc774\ubbf8\uc9c0(Custom Image)\ub97c \ub9cc\ub4e4\uace0 \ubc30\ud3ec \ud6c4 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"CPU / RAM"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ud544\uc694\ud55c \uc790\uc6d0 \uc0ac\uc6a9\ub7c9\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"cpu : core \ub2e8\uc704",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uac00\uc0c1 core \uac1c\uc218 \ub2e8\uc704\ub97c \uc758\ubbf8\ud558\uba70, int \ud615\uc2dd\uc774 \uc544\ub2cc ",(0,r.kt)("inlineCode",{parentName:"li"},"1.5"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"2.7")," \ub4f1\uc758 float \ud615\uc2dd\ub3c4 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},"memory : Gi \ub2e8\uc704"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"GPUs"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc5d0 \ud560\ub2f9\ud560 GPU \uac1c\uc218\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"None"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"GPU \uc790\uc6d0\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uc0c1\ud669"))),(0,r.kt)("li",{parentName:"ul"},"1, 2, 4",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"GPU 1, 2, 4 \uac1c \ud560\ub2f9"))))),(0,r.kt)("li",{parentName:"ul"},"GPU Vendor",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc55e\uc758 ",(0,r.kt)("a",{parentName:"li",href:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu"},"(Optional) Setup GPU")," \ub97c \ub530\ub77c nvidia gpu plugin\uc744 \uc124\uce58\ud558\uc600\ub2e4\uba74 NVIDIA\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Workspace Volume"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc5d0\uc11c \ud544\uc694\ud55c \ub9cc\ud07c\uc758 \ub514\uc2a4\ud06c \uc6a9\ub7c9\uc744 \uc785\ub825\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"Type \uacfc Name \uc740 \ubcc0\uacbd\ud558\uc9c0 \uc54a\uace0, ",(0,r.kt)("strong",{parentName:"li"},"\ub514\uc2a4\ud06c \uc6a9\ub7c9\uc744 \ub298\ub9ac\uace0 \uc2f6\uac70\ub098")," ",(0,r.kt)("strong",{parentName:"li"},"AccessMode \ub97c \ubcc0\uacbd\ud558\uace0 \uc2f6\uc744")," \ub54c\uc5d0\ub9cc \ubcc0\uacbd\ud574\uc11c \uc0ac\uc6a9\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\"Don't use Persistent Storage for User's home\"")," \uccb4\ud06c\ubc15\uc2a4\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84\uc758 \uc791\uc5c5 \ub0b4\uc6a9\uc744 \uc800\uc7a5\ud558\uc9c0 \uc54a\uc544\ub3c4 \uc0c1\uad00\uc5c6\uc744 \ub54c\uc5d0\ub9cc \ud074\ub9ad\ud569\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"li"},"\uc77c\ubc18\uc801\uc73c\ub85c\ub294 \ub204\ub974\uc9c0 \uc54a\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.")),(0,r.kt)("li",{parentName:"ul"},'\uae30\uc874\uc5d0 \ubbf8\ub9ac \uc0dd\uc131\ud574\ub450\uc5c8\ub358 PVC\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \ub54c\uc5d0\ub294, Type\uc744 "Existing" \uc73c\ub85c \uc785\ub825\ud558\uc5ec \ud574\ub2f9 PVC\uc758 \uc774\ub984\uc744 \uc785\ub825\ud558\uc5ec \uc0ac\uc6a9\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.'))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Data Volumes"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucd94\uac00\uc801\uc778 \uc2a4\ud1a0\ub9ac\uc9c0 \uc790\uc6d0\uc774 \ud544\uc694\ud558\ub2e4\uba74 ",(0,r.kt)("strong",{parentName:"li"},'"+ ADD VOLUME"')," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("del",{parentName:"li"},"Configurations, Affinity/Tolerations, Miscellaneous Settings"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc73c\ub85c\ub294 \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c ",(0,r.kt)("em",{parentName:"li"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc790\uc138\ud55c \uc124\uba85\uc744 \uc0dd\ub7b5\ud569\ub2c8\ub2e4."))))),(0,r.kt)("p",null,"\ubaa8\ub450 \uc815\uc0c1\uc801\uc73c\ub85c \uc785\ub825\ud558\uc600\ub2e4\uba74 \ud558\ub2e8\uc758 ",(0,r.kt)("strong",{parentName:"p"},"LAUNCH")," \ubc84\ud2bc\uc774 \ud65c\uc131\ud654\ub418\uba70, \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131\uc774 \uc2dc\uc791\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"creating",src:a(8112).Z,width:"1928",height:"400"})),(0,r.kt)("p",null,"\uc0dd\uc131 \ud6c4 \uc544\ub798\uc640 \uac19\uc774 ",(0,r.kt)("strong",{parentName:"p"},"Status")," \uac00 \ucd08\ub85d\uc0c9 \uccb4\ud06c \ud45c\uc2dc \uc544\uc774\ucf58\uc73c\ub85c \ubcc0\ud558\uba70, ",(0,r.kt)("strong",{parentName:"p"},"CONNECT \ubc84\ud2bc"),"\uc774 \ud65c\uc131\ud654\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"created",src:a(1325).Z,width:"1852",height:"352"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc811\uc18d\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc811\uc18d\ud558\uae30"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"CONNECT \ubc84\ud2bc"),"\uc744 \ud074\ub9ad\ud558\uba74 \ube0c\ub77c\uc6b0\uc800\uc5d0 \uc0c8 \ucc3d\uc774 \uc5f4\ub9ac\uba70, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ubcf4\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-access",src:a(323).Z,width:"2898",height:"1990"})),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Launcher"),"\uc758 Notebook, Console, Terminal \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null," \uc0dd\uc131\ub41c Notebook \ud654\uba74"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-console",src:a(1710).Z,width:"2850",height:"736"})),(0,r.kt)("p",null," \uc0dd\uc131\ub41c Terminal \ud654\uba74"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"terminal-console",src:a(5668).Z,width:"2834",height:"806"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc911\ub2e8\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc911\ub2e8\ud558\uae30"),(0,r.kt)("p",null,"\ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc624\ub79c \uc2dc\uac04 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0, \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc758 \ud6a8\uc728\uc801\uc778 \ub9ac\uc18c\uc2a4 \uc0ac\uc6a9\uc744 \uc704\ud574\uc11c \ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc911\ub2e8(Stop)\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"p"},"\ub2e8, \uc774 \uacbd\uc6b0 \ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131 \uc2dc Workspace Volume \ub610\ub294 Data Volume\uc73c\ub85c \uc9c0\uc815\ud574\ub193\uc740 \uacbd\ub85c \uc678\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub294 \ubaa8\ub450 \ucd08\uae30\ud654\ub418\ub294 \uac83\uc5d0 \uc8fc\uc758\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("br",{parentName:"p"}),"\n","\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131 \ub2f9\uc2dc \uacbd\ub85c\ub97c \ubcc0\uacbd\ud558\uc9c0 \uc54a\uc558\ub2e4\uba74, \ub514\ud3f4\ud2b8(Default) Workspace Volume\uc758 \uacbd\ub85c\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"/home/jovyan")," \uc774\ubbc0\ub85c, ",(0,r.kt)("inlineCode",{parentName:"p"},"/home/jovyan")," \uc758 \ud558\uc704 \uacbd\ub85c \uc774\uc678\uc758 \uacbd\ub85c\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub294 \ubaa8\ub450 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"STOP")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub178\ud2b8\ubd81 \uc11c\ubc84\uac00 \uc911\ub2e8\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-stop",src:a(6320).Z,width:"1832",height:"1014"})),(0,r.kt)("p",null,"\uc911\ub2e8\uc774 \uc644\ub8cc\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"CONNECT")," \ubc84\ud2bc\uc774 \ube44\ud65c\uc131\ud654\ub418\uba70, ",(0,r.kt)("inlineCode",{parentName:"p"},"PLAY")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc2dc \uc815\uc0c1\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-restart",src:a(6421).Z,width:"1888",height:"932"})))}m.isMDXComponent=!0},3516:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/create-b349ef65d07ce46d18eb743995e83328.png"},1325:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/created-ea0c6e5b069a3bf68ec30dd2d9c8fda9.png"},8112:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/creating-fea15b81993043e41562213ce27be9c8.png"},6316:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},1286:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/new-notebook-f462329837ba1224dad0fdd5065aa161.png"},323:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-access-04af482a0de3bf472671bb8106d2124d.png"},1710:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-console-57b91be5611c7bc685da1b29c792a45c.png"},1579:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-home-bc23928c112e027b46359aad251a8b69.png"},6421:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-restart-6550d536547af1c9e19f8ab05946ee9d.png"},6320:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-stop-bcc860736062b5cfb5831bab545dc60c.png"},5668:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/terminal-console-7fb950f9bf731144081feb0afb245bed.png"}}]); \ No newline at end of file diff --git a/assets/js/8999d56c.85faf485.js b/assets/js/8999d56c.85faf485.js new file mode 100644 index 00000000..1f6359a8 --- /dev/null +++ b/assets/js/8999d56c.85faf485.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8231],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},k="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),k=p(a),c=r,d=k["".concat(s,".").concat(c)]||k[c]||m[c]||o;return a?n.createElement(d,l(l({ref:t},u),{},{components:a})):n.createElement(d,l({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[k]="string"==typeof e?e:r,l[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={title:"2. Notebooks",description:"",sidebar_position:2,contributors:["Jaeyeon Kim"]},l=void 0,i={unversionedId:"kubeflow-dashboard-guide/notebooks",id:"version-1.0/kubeflow-dashboard-guide/notebooks",title:"2. Notebooks",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/notebooks.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/notebooks",permalink:"/docs/1.0/kubeflow-dashboard-guide/notebooks",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/notebooks.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Notebooks",description:"",sidebar_position:2,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Central Dashboard",permalink:"/docs/1.0/kubeflow-dashboard-guide/intro"},next:{title:"3. Tensorboards",permalink:"/docs/1.0/kubeflow-dashboard-guide/tensorboards"}},s={},p=[{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84(Notebook Server) \uc0dd\uc131\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84notebook-server-\uc0dd\uc131\ud558\uae30",level:2},{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc811\uc18d\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc811\uc18d\ud558\uae30",level:2},{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc911\ub2e8\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc911\ub2e8\ud558\uae30",level:2}],u={toc:p},k="wrapper";function m(e){let{components:t,...o}=e;return(0,r.kt)(k,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84notebook-server-\uc0dd\uc131\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84(Notebook Server) \uc0dd\uc131\ud558\uae30"),(0,r.kt)("p",null,"\ub2e4\uc74c Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Notebooks\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"left-tabs",src:a(6316).Z,width:"3940",height:"1278"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"Notebooks \ud0ed\uc740 JupyterHub\uc640 \ube44\uc2b7\ud558\uac8c \uc720\uc800\ubcc4\ub85c jupyter notebook \ubc0f code server \ud658\uacbd(\uc774\ud558 \ub178\ud2b8\ubd81 \uc11c\ubc84)\uc744 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc0dd\uc131\ud558\uace0 \uc811\uc18d\ud560 \uc218 \uc788\ub294 \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-home",src:a(1579).Z,width:"5008",height:"2682"})),(0,r.kt)("p",null,"\uc624\ub978\ucabd \uc704\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"+ NEW NOTEBOOK")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"new-notebook",src:a(1286).Z,width:"1900",height:"312"})),(0,r.kt)("p",null,"\uc544\ub798\uc640 \uac19\uc740 \ud654\uba74\uc774 \ub098\ud0c0\ub098\uba74, \uc774\uc81c \uc0dd\uc131\ud560 \ub178\ud2b8\ubd81 \uc11c\ubc84\uc758 \uc2a4\ud399(Spec)\uc744 \uba85\uc2dc\ud558\uc5ec \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"create",src:a(3516).Z,width:"1738",height:"1674"})),(0,r.kt)("details",null,(0,r.kt)("summary",null,"\uac01 \uc2a4\ud399\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"name"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uad6c\ubd84\ud560 \uc218 \uc788\ub294 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"namespace")," :",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub530\ub85c \ubcc0\uacbd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. (\ud604\uc7ac \ub85c\uadf8\uc778\ud55c user \uacc4\uc815\uc758 namespace\uc774 \uc790\ub3d9\uc73c\ub85c \uc9c0\uc815\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.)"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Image"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"sklearn, pytorch, tensorflow \ub4f1\uc758 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0\uac00 \ubbf8\ub9ac \uc124\uce58\ub41c jupyter lab \uc774\ubbf8\uc9c0 \uc911 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc5d0\uc11c GPU\ub97c \uc0ac\uc6a9\ud558\uc5ec tensorflow-cuda, pytorch-cuda \ub4f1\uc758 \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, ",(0,r.kt)("strong",{parentName:"li"},"\ud558\ub2e8\uc758 GPUs")," \ubd80\ubd84\uc744 \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},"\ucd94\uac00\uc801\uc778 \ud328\ud0a4\uc9c0\ub098 \uc18c\uc2a4\ucf54\ub4dc \ub4f1\uc744 \ud3ec\ud568\ud55c \ucee4\uc2a4\ud140(Custom) \ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 \ucee4\uc2a4\ud140 \uc774\ubbf8\uc9c0(Custom Image)\ub97c \ub9cc\ub4e4\uace0 \ubc30\ud3ec \ud6c4 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"CPU / RAM"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ud544\uc694\ud55c \uc790\uc6d0 \uc0ac\uc6a9\ub7c9\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"cpu : core \ub2e8\uc704",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uac00\uc0c1 core \uac1c\uc218 \ub2e8\uc704\ub97c \uc758\ubbf8\ud558\uba70, int \ud615\uc2dd\uc774 \uc544\ub2cc ",(0,r.kt)("inlineCode",{parentName:"li"},"1.5"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"2.7")," \ub4f1\uc758 float \ud615\uc2dd\ub3c4 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},"memory : Gi \ub2e8\uc704"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"GPUs"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc5d0 \ud560\ub2f9\ud560 GPU \uac1c\uc218\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"None"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"GPU \uc790\uc6d0\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uc0c1\ud669"))),(0,r.kt)("li",{parentName:"ul"},"1, 2, 4",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"GPU 1, 2, 4 \uac1c \ud560\ub2f9"))))),(0,r.kt)("li",{parentName:"ul"},"GPU Vendor",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc55e\uc758 ",(0,r.kt)("a",{parentName:"li",href:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu"},"(Optional) Setup GPU")," \ub97c \ub530\ub77c nvidia gpu plugin\uc744 \uc124\uce58\ud558\uc600\ub2e4\uba74 NVIDIA\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Workspace Volume"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc5d0\uc11c \ud544\uc694\ud55c \ub9cc\ud07c\uc758 \ub514\uc2a4\ud06c \uc6a9\ub7c9\uc744 \uc785\ub825\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"Type \uacfc Name \uc740 \ubcc0\uacbd\ud558\uc9c0 \uc54a\uace0, ",(0,r.kt)("strong",{parentName:"li"},"\ub514\uc2a4\ud06c \uc6a9\ub7c9\uc744 \ub298\ub9ac\uace0 \uc2f6\uac70\ub098")," ",(0,r.kt)("strong",{parentName:"li"},"AccessMode \ub97c \ubcc0\uacbd\ud558\uace0 \uc2f6\uc744")," \ub54c\uc5d0\ub9cc \ubcc0\uacbd\ud574\uc11c \uc0ac\uc6a9\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\"Don't use Persistent Storage for User's home\"")," \uccb4\ud06c\ubc15\uc2a4\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84\uc758 \uc791\uc5c5 \ub0b4\uc6a9\uc744 \uc800\uc7a5\ud558\uc9c0 \uc54a\uc544\ub3c4 \uc0c1\uad00\uc5c6\uc744 \ub54c\uc5d0\ub9cc \ud074\ub9ad\ud569\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"li"},"\uc77c\ubc18\uc801\uc73c\ub85c\ub294 \ub204\ub974\uc9c0 \uc54a\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.")),(0,r.kt)("li",{parentName:"ul"},'\uae30\uc874\uc5d0 \ubbf8\ub9ac \uc0dd\uc131\ud574\ub450\uc5c8\ub358 PVC\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \ub54c\uc5d0\ub294, Type\uc744 "Existing" \uc73c\ub85c \uc785\ub825\ud558\uc5ec \ud574\ub2f9 PVC\uc758 \uc774\ub984\uc744 \uc785\ub825\ud558\uc5ec \uc0ac\uc6a9\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.'))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Data Volumes"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucd94\uac00\uc801\uc778 \uc2a4\ud1a0\ub9ac\uc9c0 \uc790\uc6d0\uc774 \ud544\uc694\ud558\ub2e4\uba74 ",(0,r.kt)("strong",{parentName:"li"},'"+ ADD VOLUME"')," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("del",{parentName:"li"},"Configurations, Affinity/Tolerations, Miscellaneous Settings"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc73c\ub85c\ub294 \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c ",(0,r.kt)("em",{parentName:"li"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc790\uc138\ud55c \uc124\uba85\uc744 \uc0dd\ub7b5\ud569\ub2c8\ub2e4."))))),(0,r.kt)("p",null,"\ubaa8\ub450 \uc815\uc0c1\uc801\uc73c\ub85c \uc785\ub825\ud558\uc600\ub2e4\uba74 \ud558\ub2e8\uc758 ",(0,r.kt)("strong",{parentName:"p"},"LAUNCH")," \ubc84\ud2bc\uc774 \ud65c\uc131\ud654\ub418\uba70, \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131\uc774 \uc2dc\uc791\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"creating",src:a(8112).Z,width:"1928",height:"400"})),(0,r.kt)("p",null,"\uc0dd\uc131 \ud6c4 \uc544\ub798\uc640 \uac19\uc774 ",(0,r.kt)("strong",{parentName:"p"},"Status")," \uac00 \ucd08\ub85d\uc0c9 \uccb4\ud06c \ud45c\uc2dc \uc544\uc774\ucf58\uc73c\ub85c \ubcc0\ud558\uba70, ",(0,r.kt)("strong",{parentName:"p"},"CONNECT \ubc84\ud2bc"),"\uc774 \ud65c\uc131\ud654\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"created",src:a(1325).Z,width:"1852",height:"352"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc811\uc18d\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc811\uc18d\ud558\uae30"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"CONNECT \ubc84\ud2bc"),"\uc744 \ud074\ub9ad\ud558\uba74 \ube0c\ub77c\uc6b0\uc800\uc5d0 \uc0c8 \ucc3d\uc774 \uc5f4\ub9ac\uba70, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ubcf4\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-access",src:a(323).Z,width:"2898",height:"1990"})),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Launcher"),"\uc758 Notebook, Console, Terminal \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null," \uc0dd\uc131\ub41c Notebook \ud654\uba74"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-console",src:a(1710).Z,width:"2850",height:"736"})),(0,r.kt)("p",null," \uc0dd\uc131\ub41c Terminal \ud654\uba74"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"terminal-console",src:a(5668).Z,width:"2834",height:"806"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc911\ub2e8\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc911\ub2e8\ud558\uae30"),(0,r.kt)("p",null,"\ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc624\ub79c \uc2dc\uac04 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0, \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc758 \ud6a8\uc728\uc801\uc778 \ub9ac\uc18c\uc2a4 \uc0ac\uc6a9\uc744 \uc704\ud574\uc11c \ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc911\ub2e8(Stop)\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"p"},"\ub2e8, \uc774 \uacbd\uc6b0 \ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131 \uc2dc Workspace Volume \ub610\ub294 Data Volume\uc73c\ub85c \uc9c0\uc815\ud574\ub193\uc740 \uacbd\ub85c \uc678\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub294 \ubaa8\ub450 \ucd08\uae30\ud654\ub418\ub294 \uac83\uc5d0 \uc8fc\uc758\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("br",{parentName:"p"}),"\n","\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131 \ub2f9\uc2dc \uacbd\ub85c\ub97c \ubcc0\uacbd\ud558\uc9c0 \uc54a\uc558\ub2e4\uba74, \ub514\ud3f4\ud2b8(Default) Workspace Volume\uc758 \uacbd\ub85c\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"/home/jovyan")," \uc774\ubbc0\ub85c, ",(0,r.kt)("inlineCode",{parentName:"p"},"/home/jovyan")," \uc758 \ud558\uc704 \uacbd\ub85c \uc774\uc678\uc758 \uacbd\ub85c\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub294 \ubaa8\ub450 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"STOP")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub178\ud2b8\ubd81 \uc11c\ubc84\uac00 \uc911\ub2e8\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-stop",src:a(6320).Z,width:"1832",height:"1014"})),(0,r.kt)("p",null,"\uc911\ub2e8\uc774 \uc644\ub8cc\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"CONNECT")," \ubc84\ud2bc\uc774 \ube44\ud65c\uc131\ud654\ub418\uba70, ",(0,r.kt)("inlineCode",{parentName:"p"},"PLAY")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc2dc \uc815\uc0c1\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-restart",src:a(6421).Z,width:"1888",height:"932"})))}m.isMDXComponent=!0},3516:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/create-b349ef65d07ce46d18eb743995e83328.png"},1325:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/created-ea0c6e5b069a3bf68ec30dd2d9c8fda9.png"},8112:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/creating-fea15b81993043e41562213ce27be9c8.png"},6316:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},1286:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/new-notebook-f462329837ba1224dad0fdd5065aa161.png"},323:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-access-04af482a0de3bf472671bb8106d2124d.png"},1710:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-console-57b91be5611c7bc685da1b29c792a45c.png"},1579:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-home-bc23928c112e027b46359aad251a8b69.png"},6421:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-restart-6550d536547af1c9e19f8ab05946ee9d.png"},6320:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-stop-bcc860736062b5cfb5831bab545dc60c.png"},5668:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/terminal-console-7fb950f9bf731144081feb0afb245bed.png"}}]); \ No newline at end of file diff --git a/assets/js/8b8d160d.72d6fef0.js b/assets/js/8b8d160d.72d6fef0.js deleted file mode 100644 index 60ba0b70..00000000 --- a/assets/js/8b8d160d.72d6fef0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5787],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),k=r,d=c["".concat(i,".").concat(k)]||c[k]||m[k]||o;return a?n.createElement(d,l(l({ref:t},u),{},{components:a})):n.createElement(d,l({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=k;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:r,l[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={title:"3. Install Prerequisite",description:"Install docker",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim","Jongsun Shinn","Sangwoo Shim"]},l=void 0,s={unversionedId:"setup-kubernetes/install-prerequisite",id:"version-1.0/setup-kubernetes/install-prerequisite",title:"3. Install Prerequisite",description:"Install docker",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-prerequisite.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/install-prerequisite",permalink:"/docs/1.0/setup-kubernetes/install-prerequisite",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-prerequisite.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Install Prerequisite",description:"Install docker",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim","Jongsun Shinn","Sangwoo Shim"]},sidebar:"tutorialSidebar",previous:{title:"2. Setup Kubernetes",permalink:"/docs/1.0/setup-kubernetes/kubernetes"},next:{title:"4.1. K3s",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s"}},i={},p=[{value:"Install apt packages",id:"install-apt-packages",level:2},{value:"Install Docker",id:"install-docker",level:2},{value:"Turn off Swap Memory",id:"turn-off-swap-memory",level:2},{value:"Install Kubectl",id:"install-kubectl",level:2},{value:"References",id:"references",level:2}],u={toc:p},c="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"\uc774 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc124\uce58\ud558\uae30\uc5d0 \uc55e\uc11c, ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc5d0 \uc124\uce58 \ud639\uc740 \uc124\uc815\ud574\ub450\uc5b4\uc57c \ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc5d0 \ub300\ud55c \ub9e4\ub274\uc5bc\uc744 \uc124\uba85\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"install-apt-packages"},"Install apt packages"),(0,r.kt)("p",null,"\ucd94\ud6c4 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \ud074\ub7ec\uc2a4\ud130\uc758 \uc6d0\ud65c\ud55c \ud1b5\uc2e0\uc744 \uc704\ud574\uc11c\ub294 Port-Forwarding\uc744 \uc218\ud589\ud574\uc57c \ud560 \uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4.\nPort-Forwarding\uc744 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc5d0 \ub2e4\uc74c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update\nsudo apt-get install -y socat\n")),(0,r.kt)("h2",{id:"install-docker"},"Install Docker"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4 \uc124\uce58\uc5d0 \ud544\uc694\ud55c APT \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4\uc758 \uacf5\uc2dd GPG key\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"apt \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc800\ub85c \ub3c4\ucee4\ub97c \uc124\uce58\ud560 \ub54c, stable Repository\uc5d0\uc11c \ubc1b\uc544\uc624\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'echo \\\n"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \\\n$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud604\uc7ac \uc124\uce58\ud560 \uc218 \uc788\ub294 \ub3c4\ucee4 \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update && apt-cache madison docker-ce\n")),(0,r.kt)("p",{parentName:"li"},"\ucd9c\ub825\ub418\ub294 \ubc84\uc804 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"5:20.10.11~3-0~ubuntu-focal")," \ubc84\uc804\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"apt-cache madison docker-ce | grep 5:20.10.11~3-0~ubuntu-focal\n")),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\uac00 \ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker-ce | 5:20.10.11~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"5:20.10.11~3-0~ubuntu-focal")," \ubc84\uc804\uc758 \ub3c4\ucee4\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install -y containerd.io docker-ce=5:20.10.11~3-0~ubuntu-focal docker-ce-cli=5:20.10.11~3-0~ubuntu-focal\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker run hello-world\n")),(0,r.kt)("p",{parentName:"li"},"\uba85\ub839\uc5b4 \uc2e4\ud589 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'mlops@ubuntu:~$ sudo docker run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n1. The Docker client contacted the Docker daemon.\n2. The Docker daemon pulled the "hello-world" image from the Docker Hub.\n (amd64)\n3. The Docker daemon created a new container from that image which runs the\n executable that produces the output you are currently reading.\n4. The Docker daemon streamed that output to the Docker client, which sent it\n to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n$ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\nhttps://hub.docker.com/\n\nFor more examples and ideas, visit:\nhttps://docs.docker.com/get-started/\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"docker \uad00\ub828 command\ub97c sudo \ud0a4\uc6cc\ub4dc \uc5c6\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud558\ub3c4\ub85d \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uad8c\ud55c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo groupadd docker\nsudo usermod -aG docker $USER\nnewgrp docker\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"sudo \ud0a4\uc6cc\ub4dc \uc5c6\uc774 docker command\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub41c \uac83\uc744 \ud655\uc778\ud558\uae30 \uc704\ud574, \ub2e4\uc2dc \ud55c\ubc88 docker run\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run hello-world\n")),(0,r.kt)("p",{parentName:"li"},"\uba85\ub839\uc5b4 \uc2e4\ud589 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uad8c\ud55c\uc774 \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'mlops@ubuntu:~$ docker run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n1. The Docker client contacted the Docker daemon.\n2. The Docker daemon pulled the "hello-world" image from the Docker Hub.\n (amd64)\n3. The Docker daemon created a new container from that image which runs the\n executable that produces the output you are currently reading.\n4. The Docker daemon streamed that output to the Docker client, which sent it\n to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n$ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\nhttps://hub.docker.com/\n\nFor more examples and ideas, visit:\nhttps://docs.docker.com/get-started/\n')))),(0,r.kt)("h2",{id:"turn-off-swap-memory"},"Turn off Swap Memory"),(0,r.kt)("p",null,"kubelet \uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uac8c \ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uc5d0\uc11c swap\uc774\ub77c\uace0 \ubd88\ub9ac\ub294 \uac00\uc0c1\uba54\ubaa8\ub9ac\ub97c \uaebc \ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 swap\uc744 \uaebc \ub461\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"(\ud074\ub7ec\uc2a4\ud130\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uac19\uc740 \ub370\uc2a4\ud06c\ud1b1\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ub54c swap \uba54\ubaa8\ub9ac\ub97c \uc885\ub8cc\ud558\uba74 \uc18d\ub3c4\uc758 \uc800\ud558\uac00 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4)")," "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab\nsudo swapoff -a\n")),(0,r.kt)("h2",{id:"install-kubectl"},"Install Kubectl"),(0,r.kt)("p",null,"kubectl \uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 API\ub97c \uc694\uccad\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8 \ud234\uc785\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub178\ub4dc\uc5d0 \uc124\uce58\ud574\ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 kubectl v1.21.7 \ubc84\uc804\uc744 \ub2e4\uc6b4\ubc1b\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/amd64/kubectl\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"kubectl \uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud30c\uc77c\uc758 \uad8c\ud55c\uacfc \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl version --client\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.7", GitCommit:"1f86634ff08f37e54e8bfcd86bc90b61c98f84d4", GitTreeState:"clean", BuildDate:"2021-11-17T14:41:19Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc5ec\ub7ec \uac1c\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc5ec\ub7ec \uac1c\uc758 kubeconfig \ud30c\uc77c\uc744 \uad00\ub9ac\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc5ec\ub7ec \uac1c\uc758 kubeconfig \ud30c\uc77c \ud639\uc740 \uc5ec\ub7ec \uac1c\uc758 kube-context\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ucc38\uace0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://dev.to/aabiseverywhere/configuring-multiple-kubeconfig-on-your-machine-59eo"},"https://dev.to/aabiseverywhere/configuring-multiple-kubeconfig-on-your-machine-59eo")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/ahmetb/kubectx"},"https://github.com/ahmetb/kubectx"))))),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/ubuntu/"},"Install Docker Engine on Ubuntu")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/"},"\ub9ac\ub205\uc2a4\uc5d0 kubectl \uc124\uce58 \ubc0f \uc124\uc815"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8b8d160d.c934c38b.js b/assets/js/8b8d160d.c934c38b.js new file mode 100644 index 00000000..36d88747 --- /dev/null +++ b/assets/js/8b8d160d.c934c38b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5787],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),k=r,d=c["".concat(i,".").concat(k)]||c[k]||m[k]||o;return a?n.createElement(d,l(l({ref:t},u),{},{components:a})):n.createElement(d,l({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=k;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:r,l[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={title:"3. Install Prerequisite",description:"Install docker",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim","Jongsun Shinn","Sangwoo Shim"]},l=void 0,s={unversionedId:"setup-kubernetes/install-prerequisite",id:"version-1.0/setup-kubernetes/install-prerequisite",title:"3. Install Prerequisite",description:"Install docker",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-prerequisite.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/install-prerequisite",permalink:"/docs/1.0/setup-kubernetes/install-prerequisite",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-prerequisite.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Install Prerequisite",description:"Install docker",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim","Jongsun Shinn","Sangwoo Shim"]},sidebar:"tutorialSidebar",previous:{title:"2. Setup Kubernetes",permalink:"/docs/1.0/setup-kubernetes/kubernetes"},next:{title:"4.1. K3s",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s"}},i={},p=[{value:"Install apt packages",id:"install-apt-packages",level:2},{value:"Install Docker",id:"install-docker",level:2},{value:"Turn off Swap Memory",id:"turn-off-swap-memory",level:2},{value:"Install Kubectl",id:"install-kubectl",level:2},{value:"References",id:"references",level:2}],u={toc:p},c="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"\uc774 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc124\uce58\ud558\uae30\uc5d0 \uc55e\uc11c, ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc5d0 \uc124\uce58 \ud639\uc740 \uc124\uc815\ud574\ub450\uc5b4\uc57c \ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc5d0 \ub300\ud55c \ub9e4\ub274\uc5bc\uc744 \uc124\uba85\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"install-apt-packages"},"Install apt packages"),(0,r.kt)("p",null,"\ucd94\ud6c4 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \ud074\ub7ec\uc2a4\ud130\uc758 \uc6d0\ud65c\ud55c \ud1b5\uc2e0\uc744 \uc704\ud574\uc11c\ub294 Port-Forwarding\uc744 \uc218\ud589\ud574\uc57c \ud560 \uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4.\nPort-Forwarding\uc744 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc5d0 \ub2e4\uc74c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update\nsudo apt-get install -y socat\n")),(0,r.kt)("h2",{id:"install-docker"},"Install Docker"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4 \uc124\uce58\uc5d0 \ud544\uc694\ud55c APT \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4\uc758 \uacf5\uc2dd GPG key\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"apt \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc800\ub85c \ub3c4\ucee4\ub97c \uc124\uce58\ud560 \ub54c, stable Repository\uc5d0\uc11c \ubc1b\uc544\uc624\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'echo \\\n"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \\\n$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud604\uc7ac \uc124\uce58\ud560 \uc218 \uc788\ub294 \ub3c4\ucee4 \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update && apt-cache madison docker-ce\n")),(0,r.kt)("p",{parentName:"li"},"\ucd9c\ub825\ub418\ub294 \ubc84\uc804 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"5:20.10.11~3-0~ubuntu-focal")," \ubc84\uc804\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"apt-cache madison docker-ce | grep 5:20.10.11~3-0~ubuntu-focal\n")),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\uac00 \ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker-ce | 5:20.10.11~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"5:20.10.11~3-0~ubuntu-focal")," \ubc84\uc804\uc758 \ub3c4\ucee4\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install -y containerd.io docker-ce=5:20.10.11~3-0~ubuntu-focal docker-ce-cli=5:20.10.11~3-0~ubuntu-focal\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker run hello-world\n")),(0,r.kt)("p",{parentName:"li"},"\uba85\ub839\uc5b4 \uc2e4\ud589 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'mlops@ubuntu:~$ sudo docker run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n1. The Docker client contacted the Docker daemon.\n2. The Docker daemon pulled the "hello-world" image from the Docker Hub.\n (amd64)\n3. The Docker daemon created a new container from that image which runs the\n executable that produces the output you are currently reading.\n4. The Docker daemon streamed that output to the Docker client, which sent it\n to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n$ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\nhttps://hub.docker.com/\n\nFor more examples and ideas, visit:\nhttps://docs.docker.com/get-started/\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"docker \uad00\ub828 command\ub97c sudo \ud0a4\uc6cc\ub4dc \uc5c6\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud558\ub3c4\ub85d \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uad8c\ud55c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo groupadd docker\nsudo usermod -aG docker $USER\nnewgrp docker\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"sudo \ud0a4\uc6cc\ub4dc \uc5c6\uc774 docker command\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub41c \uac83\uc744 \ud655\uc778\ud558\uae30 \uc704\ud574, \ub2e4\uc2dc \ud55c\ubc88 docker run\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run hello-world\n")),(0,r.kt)("p",{parentName:"li"},"\uba85\ub839\uc5b4 \uc2e4\ud589 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uad8c\ud55c\uc774 \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'mlops@ubuntu:~$ docker run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n1. The Docker client contacted the Docker daemon.\n2. The Docker daemon pulled the "hello-world" image from the Docker Hub.\n (amd64)\n3. The Docker daemon created a new container from that image which runs the\n executable that produces the output you are currently reading.\n4. The Docker daemon streamed that output to the Docker client, which sent it\n to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n$ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\nhttps://hub.docker.com/\n\nFor more examples and ideas, visit:\nhttps://docs.docker.com/get-started/\n')))),(0,r.kt)("h2",{id:"turn-off-swap-memory"},"Turn off Swap Memory"),(0,r.kt)("p",null,"kubelet \uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uac8c \ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uc5d0\uc11c swap\uc774\ub77c\uace0 \ubd88\ub9ac\ub294 \uac00\uc0c1\uba54\ubaa8\ub9ac\ub97c \uaebc \ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 swap\uc744 \uaebc \ub461\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"(\ud074\ub7ec\uc2a4\ud130\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uac19\uc740 \ub370\uc2a4\ud06c\ud1b1\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ub54c swap \uba54\ubaa8\ub9ac\ub97c \uc885\ub8cc\ud558\uba74 \uc18d\ub3c4\uc758 \uc800\ud558\uac00 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4)")," "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab\nsudo swapoff -a\n")),(0,r.kt)("h2",{id:"install-kubectl"},"Install Kubectl"),(0,r.kt)("p",null,"kubectl \uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 API\ub97c \uc694\uccad\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8 \ud234\uc785\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub178\ub4dc\uc5d0 \uc124\uce58\ud574\ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 kubectl v1.21.7 \ubc84\uc804\uc744 \ub2e4\uc6b4\ubc1b\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/amd64/kubectl\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"kubectl \uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud30c\uc77c\uc758 \uad8c\ud55c\uacfc \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl version --client\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.7", GitCommit:"1f86634ff08f37e54e8bfcd86bc90b61c98f84d4", GitTreeState:"clean", BuildDate:"2021-11-17T14:41:19Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc5ec\ub7ec \uac1c\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc5ec\ub7ec \uac1c\uc758 kubeconfig \ud30c\uc77c\uc744 \uad00\ub9ac\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc5ec\ub7ec \uac1c\uc758 kubeconfig \ud30c\uc77c \ud639\uc740 \uc5ec\ub7ec \uac1c\uc758 kube-context\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ucc38\uace0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://dev.to/aabiseverywhere/configuring-multiple-kubeconfig-on-your-machine-59eo"},"https://dev.to/aabiseverywhere/configuring-multiple-kubeconfig-on-your-machine-59eo")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/ahmetb/kubectx"},"https://github.com/ahmetb/kubectx"))))),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/ubuntu/"},"Install Docker Engine on Ubuntu")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/"},"\ub9ac\ub205\uc2a4\uc5d0 kubectl \uc124\uce58 \ubc0f \uc124\uc815"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8c6322ce.c9fde117.js b/assets/js/8c6322ce.c9fde117.js new file mode 100644 index 00000000..fbac677b --- /dev/null +++ b/assets/js/8c6322ce.c9fde117.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5604],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>g});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function p(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function o(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var l=a.createContext({}),d=function(t){var e=a.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},s=function(t){var e=d(t.components);return a.createElement(l.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,p=t.originalType,l=t.parentName,s=i(t,["components","mdxType","originalType","parentName"]),u=d(n),m=r,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||p;return n?a.createElement(g,o(o({ref:e},s),{},{components:n})):a.createElement(g,o({ref:e},s))}));function g(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var p=n.length,o=new Array(p);o[0]=m;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[u]="string"==typeof t?t:r,o[1]=i;for(var d=2;d{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>p,metadata:()=>i,toc:()=>d});var a=n(7462),r=(n(7294),n(3905));const p={title:"13. Component - Debugging",description:"",sidebar_position:13,contributors:["Jongseob Jeon"]},o=void 0,i={unversionedId:"kubeflow/how-to-debug",id:"kubeflow/how-to-debug",title:"13. Component - Debugging",description:"",source:"@site/docs/kubeflow/how-to-debug.md",sourceDirName:"kubeflow",slug:"/kubeflow/how-to-debug",permalink:"/docs/kubeflow/how-to-debug",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/how-to-debug.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:13,frontMatter:{title:"13. Component - Debugging",description:"",sidebar_position:13,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"12. Component - MLFlow",permalink:"/docs/kubeflow/advanced-mlflow"},next:{title:"1. What is API Deployment?",permalink:"/docs/api-deployment/what-is-api-deployment"}},l={},d=[{value:"Debugging Pipeline",id:"debugging-pipeline",level:2},{value:"Failed Component",id:"failed-component",level:2}],s={toc:d},u="wrapper";function c(t){let{components:e,...p}=t;return(0,r.kt)(u,(0,a.Z)({},s,p,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"debugging-pipeline"},"Debugging Pipeline"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 Kubeflow \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub514\ubc84\uae45\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubd05\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"failed-component"},"Failed Component"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-mlflow#mlflow-pipeline"},"Component - MLFlow")," \uc5d0\uc11c \uc774\uc6a9\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc870\uae08 \uc218\uc815\ud574\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud328\ud558\ub3c4\ub85d \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubcc0\uacbd\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n \n data["sepal length (cm)"] = None\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas"],\n)\ndef drop_na_from_csv(\n data_path: InputPath("csv"),\n output_path: OutputPath("csv"),\n):\n import pandas as pd\n\n data = pd.read_csv(data_path)\n data = data.dropna()\n data.to_csv(output_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n\n@pipeline(name="debugging_pipeline")\ndef debugging_pipeline(kernel: str):\n iris_data = load_iris_data()\n drop_data = drop_na_from_csv(data=iris_data.outputs["data"])\n model = train_from_csv(\n train_data=drop_data.outputs["output"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(debugging_pipeline, "debugging_pipeline.yaml")\n\n')),(0,r.kt)("p",null,"\uc218\uc815\ud55c \uc810\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc624\ub294 ",(0,r.kt)("inlineCode",{parentName:"li"},"load_iris_data")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"li"},"sepal length (cm)")," \ud53c\ucc98\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"li"},"None")," \uac12\uc744 \uc8fc\uc785"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"drop_na_from_csv")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"li"},"drop_na()")," \ud568\uc218\ub97c \uc774\uc6a9\ud574 na \uac12\uc774 \ud3ec\ud568\ub41c ",(0,r.kt)("inlineCode",{parentName:"li"},"row"),"\ub97c \uc81c\uac70")),(0,r.kt)("p",null,"\uc774\uc81c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud558\uace0 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc2e4\ud589 \ud6c4 Run\uc744 \ub20c\ub7ec\uc11c \ud655\uc778\ud574\ubcf4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"Train from csv")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc2e4\ud328\ud588\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-0.png",src:n(9789).Z,width:"2826",height:"1790"})),(0,r.kt)("p",null,"\uc2e4\ud328\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud074\ub9ad\ud558\uace0 \ub85c\uadf8\ub97c \ud655\uc778\ud574\uc11c \uc2e4\ud328\ud55c \uc774\uc720\ub97c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-2.png",src:n(5904).Z,width:"2826",height:"1796"})),(0,r.kt)("p",null,"\ub85c\uadf8\ub97c \ud655\uc778\ud558\uba74 \ub370\uc774\ud130\uc758 \uac1c\uc218\uac00 0\uc774\uc5ec\uc11c \uc2e4\ud589\ub418\uc9c0 \uc54a\uc558\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ubd84\uba85 \uc815\uc0c1\uc801\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc804\ub2ec\ud588\ub294\ub370 \uc65c \ub370\uc774\ud130\uc758 \uac1c\uc218\uac00 0\uac1c\uc77c\uae4c\uc694? "),(0,r.kt)("p",null,"\uc774\uc81c \uc785\ub825\ubc1b\uc740 \ub370\uc774\ud130\uc5d0 \uc5b4\ub5a4 \ubb38\uc81c\uac00 \uc788\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud074\ub9ad\ud558\uace0 Input/Ouput \ud0ed\uc5d0\uc11c \uc785\ub825\uac12\uc73c\ub85c \ub4e4\uc5b4\uac04 \ub370\uc774\ud130\ub4e4\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc6b4\ub85c\ub4dc\ub294 \ube68\uac04\uc0c9 \ub124\ubaa8\ub85c \ud45c\uc2dc\ub41c \uacf3\uc758 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-5.png",src:n(5801).Z,width:"2690",height:"1740"})),(0,r.kt)("p",null,"\ub450 \uac1c\uc758 \ud30c\uc77c\uc744 \uac19\uc740 \uacbd\ub85c\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub9ac\uace0 \ud574\ub2f9 \uacbd\ub85c\ub85c \uc774\ub3d9\ud574\uc11c \ud30c\uc77c\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ub450 \uac1c\uc758 \ud30c\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"drop-na-from-csv-output.tgz load-iris-data-target.tgz\n")),(0,r.kt)("p",null,"\uc555\ucd95\uc744 \ud480\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -xzvf load-iris-data-target.tgz ; mv data target.csv\ntar -xzvf drop-na-from-csv-output.tgz ; mv data data.csv\n")),(0,r.kt)("p",null,"\uadf8\ub9ac\uace0 \uc774\ub97c \uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc744 \uc774\uc6a9\ud574 \ucef4\ud3ec\ub10c\ud2b8 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-3.png",src:n(8693).Z,width:"2434",height:"1690"})),(0,r.kt)("p",null,"\ub514\ubc84\uae45\uc744 \ud574\ubcf8 \uacb0\uacfc dropna \ud560 \ub54c column\uc744 \uae30\uc900\uc73c\ub85c drop\uc744 \ud574\uc57c \ud558\ub294\ub370 row\ub97c \uae30\uc900\uc73c\ub85c drop\uc744 \ud574\uc11c \ub370\uc774\ud130\uac00 \ubaa8\ub450 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4.\n\uc774\uc81c \ubb38\uc81c\uc758 \uc6d0\uc778\uc744 \uc54c\uc544\ub0c8\uc73c\ub2c8 column\uc744 \uae30\uc900\uc73c\ub85c drop\uc774 \ub418\uac8c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'@partial(\n create_component_from_func,\n packages_to_install=["pandas"],\n)\ndef drop_na_from_csv(\n data_path: InputPath("csv"),\n output_path: OutputPath("csv"),\n):\n import pandas as pd\n\n data = pd.read_csv(data_path)\n data = data.dropna(axis="columns")\n data.to_csv(output_path, index=False)\n')),(0,r.kt)("p",null,"\uc218\uc815 \ud6c4 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub2e4\uc2dc \uc5c5\ub85c\ub4dc\ud558\uace0 \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-6.png",src:n(6157).Z,width:"2694",height:"1748"})))}c.isMDXComponent=!0},9789:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-0-9ab1af1c9020a9dfc907d8d36dadac71.png"},5904:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-2-50081530b33b57206f6ef497212cf2a9.png"},8693:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-3-4fda7b9b4f2c366147cd6aeb124cc9c5.png"},5801:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-5-5b7edcc1e29c85f71b279af3f54f3f69.png"},6157:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-6-e2da46f9318827a339b04097e68f635a.png"}}]); \ No newline at end of file diff --git a/assets/js/8dd8b1e3.9e32a6fd.js b/assets/js/8dd8b1e3.9e32a6fd.js deleted file mode 100644 index e0626293..00000000 --- a/assets/js/8dd8b1e3.9e32a6fd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8425],{3905:(e,t,n)=>{n.d(t,{Zo:()=>k,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},k=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,k=i(e,["components","mdxType","originalType","parentName"]),d=c(n),u=a,m=d["".concat(p,".").concat(u)]||d[u]||s[u]||l;return n?r.createElement(m,o(o({ref:t},k),{},{components:n})):r.createElement(m,o({ref:t},k))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>s,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const l={title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",sidebar_position:6,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/advanced",id:"prerequisites/docker/advanced",title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",source:"@site/docs/prerequisites/docker/advanced.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/advanced",permalink:"/docs/prerequisites/docker/advanced",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/advanced.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",sidebar_position:6,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"[Practice] Docker images",permalink:"/docs/prerequisites/docker/images"}},p={},c=[{value:"\ub3c4\ucee4 \uc774\ubbf8\uc9c0 \uc798 \ub9cc\ub4e4\uae30",id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0-\uc798-\ub9cc\ub4e4\uae30",level:2},{value:"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uace0\ub824\ud574\uc57c \ub420 \uc810",id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0\ub97c-\ub9cc\ub4e4-\ub54c-\uace0\ub824\ud574\uc57c-\ub420-\uc810",level:3},{value:"ENTRYPOINT vs CMD",id:"entrypoint-vs-cmd",level:3},{value:"Docker tag \uc774\ub984 \uc9d3\uae30",id:"docker-tag-\uc774\ub984-\uc9d3\uae30",level:3},{value:"ETC",id:"etc",level:3},{value:"docker run \uc758 \ub2e4\uc591\ud55c \uc635\uc158",id:"docker-run-\uc758-\ub2e4\uc591\ud55c-\uc635\uc158",level:2},{value:"docker run with volume",id:"docker-run-with-volume",level:3},{value:"Docker volume",id:"docker-volume",level:4},{value:"Bind mount",id:"bind-mount",level:4},{value:"How to use?",id:"how-to-use",level:4},{value:"docker run with resource limit",id:"docker-run-with-resource-limit",level:3},{value:"docker run with restart policy",id:"docker-run-with-restart-policy",level:3},{value:"docker run as a background process",id:"docker-run-as-a-background-process",level:3},{value:"First Practice",id:"first-practice",level:4},{value:"Second Practice",id:"second-practice",level:4},{value:"Third Practice",id:"third-practice",level:4},{value:"References",id:"references",level:2}],k={toc:c},d="wrapper";function s(e){let{components:t,...l}=e;return(0,a.kt)(d,(0,r.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0-\uc798-\ub9cc\ub4e4\uae30"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0 \uc798 \ub9cc\ub4e4\uae30"),(0,a.kt)("h3",{id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0\ub97c-\ub9cc\ub4e4-\ub54c-\uace0\ub824\ud574\uc57c-\ub420-\uc810"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uace0\ub824\ud574\uc57c \ub420 \uc810"),(0,a.kt)("p",null,"Dockerfile \uc744 \ud65c\uc6a9\ud558\uc5ec \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c\ub294 \uba85\ub839\uc5b4\uc758 ",(0,a.kt)("strong",{parentName:"p"},"\uc21c\uc11c"),"\uac00 \uc911\uc694\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8 \uc774\uc720\ub294 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 \uc5ec\ub7ec \uac1c\uc758 Read-Only Layer \ub85c \uad6c\uc131\ub418\uc5b4\uc788\uace0, \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud560 \ub54c \uc774\ubbf8 \uc874\uc7ac\ud558\ub294 \ub808\uc774\uc5b4\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\uce90\uc2dc\ub418\uc5b4")," \uc7ac\uc0ac\uc6a9\ub418\uae30 \ub54c\ubb38\uc5d0, \uc774\ub97c \uc0dd\uac01\ud574\uc11c Dockerfile \uc744 \uad6c\uc131\ud55c\ub2e4\uba74 ",(0,a.kt)("strong",{parentName:"p"},"\ube4c\ub4dc \uc2dc\uac04\uc744 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,a.kt)("p",null,"Dockerfile\uc5d0\uc11c ",(0,a.kt)("inlineCode",{parentName:"p"},"RUN"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"ADD"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY")," \uba85\ub839\uc5b4 \ud558\ub098\uac00 \ud558\ub098\uc758 \ub808\uc774\uc5b4\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Layer 1\nFROM ubuntu:latest\n\n# Layer 2\nRUN apt-get update && apt-get install python3 pip3 -y\n\n# Layer 3\nRUN pip3 install -U pip && pip3 install torch\n\n# Layer 4\nCOPY src/ src/\n\n# Layer 5\nCMD python src/app.py\n")),(0,a.kt)("p",null,"\uc704\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\ub85c \ube4c\ub4dc\ub41c \uc774\ubbf8\uc9c0\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run -it app:latest /bin/bash")," \uba85\ub839\uc5b4\ub85c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ub808\uc774\uc5b4\ub85c \ud45c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"layers.png",src:n(6045).Z,width:"1080",height:"612"})),(0,a.kt)("p",null,"\ucd5c\uc0c1\ub2e8\uc758 R/W Layer \ub294 \uc774\ubbf8\uc9c0\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc989, \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc791\uc5c5\ud55c \ub0b4\uc5ed\uc740 \ubaa8\ub450 \ud718\ubc1c\uc131\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ud558\ub2e8\uc758 \ub808\uc774\uc5b4\uac00 \ubcc0\uacbd\ub418\uba74, \uadf8 \uc704\uc758 \ub808\uc774\uc5b4\ub294 \ubaa8\ub450 \uc0c8\ub85c \ube4c\ub4dc\ub429\ub2c8\ub2e4. \uadf8\ub798\uc11c Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4\uc758 \uc21c\uc11c\uac00 \uc911\uc694\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uba74, ",(0,a.kt)("strong",{parentName:"p"},"\uc790\uc8fc \ubcc0\uacbd"),"\ub418\ub294 \ubd80\ubd84\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ucd5c\ub300\ud55c \ub4a4\ucabd\uc73c\ub85c")," \uc815\ub82c\ud558\ub294 \uac83\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4. (ex. ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY src/ app/src/"),")"),(0,a.kt)("p",null,"\uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \ubc18\ub300\ub85c \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294 \ubd80\ubd84\uc740 \ucd5c\ub300\ud55c \uc55e\ucabd\uc73c\ub85c \uc815\ub82c\ud558\ub294\uac8c \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ub9cc\uc57d \uac70\uc758 ",(0,a.kt)("strong",{parentName:"p"},"\ubcc0\uacbd\ub418\uc9c0 \uc54a\uc9c0\ub9cc"),", \uc5ec\ub7ec \uacf3\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\uc790\uc8fc")," \uc4f0\uc774\ub294 \ubd80\ubd84\uc744 \uacf5\ud1b5\ud654\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\n\ud574\ub2f9 \uacf5\ud1b5\ubd80\ubd84\ub9cc \ubb36\uc5b4\uc11c \ubcc4\ub3c4\uc758 \uc774\ubbf8\uc9c0\ub294 \ubbf8\ub9ac \ub9cc\ub4e4\uc5b4\ub454 \ub2e4\uc74c, ",(0,a.kt)("strong",{parentName:"p"},"\ubca0\uc774\uc2a4 \uc774\ubbf8\uc9c0")," \ub85c \ud65c\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \ub2e4\ub978 \uac74 \uac70\uc758 \ub611\uac19\uc740\ub370, tensorflow-cpu \ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\ubbf8\uc9c0\uc640, tensorflow-gpu \ub97c \uc0ac\uc6a9\ud558\ub294 \ud658\uacbd\uc744 \ubd84\ub9ac\ud574\uc11c \uc774\ubbf8\uc9c0\ub85c \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","python \uacfc \uae30\ud0c0 \uae30\ubcf8\uc801\uc778 \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub41c ",(0,a.kt)("a",{parentName:"p",href:"http://ghcr.io/makinarocks/python:3.8-base-cpu"},(0,a.kt)("inlineCode",{parentName:"a"},"ghcr.io/makinarocks/python:3.8-base"))," \ub97c \ub9cc\ub4e4\uc5b4\ub450\uace0, ",(0,a.kt)("strong",{parentName:"p"},"tensorflow cpu \ubc84\uc804\uacfc gpu \ubc84\uc804\uc774")," \uc124\uce58\ub41c \uc774\ubbf8\uc9c0 \uc0c8\ub85c \ub9cc\ub4e4\ub54c\ub294, \uc704\uc758 \uc774\ubbf8\uc9c0\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"FROM")," \uc73c\ub85c \ubd88\ub7ec\uc628 \ub2e4\uc74c, tensorflow install \ud558\ub294 \ubd80\ubd84\ub9cc \ubcc4\ub3c4\ub85c \uc791\uc131\ud574\uc11c Dockerfile \uc744 2 \uac1c\ub85c \uad00\ub9ac\ud55c\ub2e4\uba74 \uac00\ub3c5\uc131\ub3c4 \uc88b\uace0 \ube4c\ub4dc \uc2dc\uac04\ub3c4 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\ud569\uce60 \uc218 \uc788\ub294 Layer \ub294 \ud569\uce58\ub294 \uac83"),"\uc774 Old version \uc758 \ub3c4\ucee4\uc5d0\uc11c\ub294 \uc131\ub2a5 \ud5a5\uc0c1 \ud6a8\uacfc\ub97c \uc774\ub04c\uc5c8\uc2b5\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\uc758 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uac00 \uc5b4\ub5a4 \ub3c4\ucee4 \ubc84\uc804\uc5d0\uc11c \uc2e4\ud589\ub420 \uac83\uc778\uc9c0 \ubcf4\uc7a5\ud560 \uc218 \uc5c6\uc73c\uba70, ",(0,a.kt)("strong",{parentName:"p"},"\uac00\ub3c5\uc131"),"\uc744 \uc704\ud574\uc11c\ub3c4 \ud569\uce60 \uc218 \uc788\ub294 Layer \ub294 \uc801\uc808\ud788 \ud569\uce58\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ub41c ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Bad Case\nRUN apt-get update\nRUN apt-get install build-essential -y\nRUN apt-get install curl -y\nRUN apt-get install jq -y\nRUN apt-get install git -y\n")),(0,a.kt)("p",null,"\uc774\ub97c \uc544\ub798\uc640 \uac19\uc774 \ud569\uccd0\uc11c \uc801\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Better Case\nRUN apt-get update && \\\n apt-get install -y \\\n build-essential \\\n curl \\\n jq \\\n git\n")),(0,a.kt)("p",null,"\ud3b8\uc758\ub97c \uc704\ud574\uc11c\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},".dockerignore")," \ub3c4 \uc0ac\uc6a9\ud558\ub294\uac8c \uc88b\uc2b5\ub2c8\ub2e4.\n",(0,a.kt)("inlineCode",{parentName:"p"},".dockerignore"),"\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},".gitignore")," \uc640 \ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud55c\ub2e4\uace0 \uc774\ud574\ud558\uba74 \ub429\ub2c8\ub2e4. (git add \ud560 \ub54c \uc81c\uc678\ud560 \uc218 \uc788\ub4ef\uc774, docker build \ud560 \ub54c \uc790\ub3d9\uc73c\ub85c \uc81c\uc678)"),(0,a.kt)("p",null,"\ub354 \ub9ce\uc740 \uc815\ubcf4\ub294 ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/develop/develop-images/dockerfile_best-practices/"},"Docker \uacf5\uc2dd \ubb38\uc11c"),"\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"entrypoint-vs-cmd"},"ENTRYPOINT vs CMD"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc640 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," \ub294 \ubaa8\ub450 \ucee8\ud14c\uc774\ub108\uc758 \uc2e4\ud589 \uc2dc\uc810\uc5d0\uc11c \uc5b4\ub5a4 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\uc2dc\ud0a4\uace0 \uc2f6\uc744 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \uc774 \ub458 \uc911 \ud558\ub098\ub294 \ubc18\ub4dc\uc2dc \uc874\uc7ac\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\ucc28\uc774\uc810"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CMD"),": docker run \uc744 \uc218\ud589\ud560 \ub54c, \uc27d\uac8c \ubcc0\uacbd\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc74c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENTRYPOINT"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"--entrypoint")," \ub97c \uc0ac\uc6a9\ud574\uc57c \ubcc0\uacbd\ud560 \uc218 \uc788\uc74c")))),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc640 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," \uac00 \ud568\uaed8 \uc4f0\uc77c \ub54c\ub294 \ubcf4\ud1b5 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD"),"\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc5d0\uc11c \uc801\uc740 \uba85\ub839\uc758 arguments(parameters) \ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'FROM ubuntu:latest\n\n# \uc544\ub798 4 \uac00\uc9c0 option \uc744 \ubc14\uafd4\uac00\uba70 \uc9c1\uc811 \ud14c\uc2a4\ud2b8\ud574\ubcf4\uc2dc\uba74 \uc774\ud574\ud558\uae30 \ud3b8\ud569\ub2c8\ub2e4.\n# \ub2e8, NO ENTRYPOINT \uc635\uc158\uc740 base image \uc778 ubuntu:latest \uc5d0 \uc774\ubbf8 \uc788\uc5b4\uc11c \ud14c\uc2a4\ud2b8\ud574\ubcfc \uc218\ub294 \uc5c6\uace0 \ub098\uba38\uc9c0 v2, 3, 5, 6, 8, 9, 11, 12 \ub97c \ud14c\uc2a4\ud2b8\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n# ENTRYPOINT echo "Hello ENTRYPOINT"\n# ENTRYPOINT ["echo", "Hello ENTRYPOINT"]\n# CMD echo "Hello CMD"\n# CMD ["echo", "Hello CMD"]\n')),(0,a.kt)("p",null,"\uc704\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc5d0\uc11c \uc8fc\uc11d\uc73c\ub85c \ud45c\uc2dc\ub41c \ubd80\ubd84\ub4e4\uc744 \ud574\uc81c\ud558\uba70 \ube4c\ub4dc\ud558\uace0 \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null}),(0,a.kt)("th",{parentName:"tr",align:null},"No ENTRYPOINT"),(0,a.kt)("th",{parentName:"tr",align:null},"ENTRYPOINT a b"),(0,a.kt)("th",{parentName:"tr",align:null},"ENTRYPOINT ",'["a", "b"]'))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"NO CMD")),(0,a.kt)("td",{parentName:"tr",align:null},"Error!"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"CMD ",'["x", "y"]')),(0,a.kt)("td",{parentName:"tr",align:null},"x y"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b x y")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"CMD x y")),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c x y"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b /bin/sh -c x y")))),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"In Kubernetes pod",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENTRYPOINT")," \u2192 command"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CMD")," \u2192 args")))),(0,a.kt)("h3",{id:"docker-tag-\uc774\ub984-\uc9d3\uae30"},"Docker tag \uc774\ub984 \uc9d3\uae30"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\uc758 tag \ub85c ",(0,a.kt)("strong",{parentName:"p"},"latest \ub294 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uac83\uc744 \uad8c\uc7a5"),"\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\uc720\ub294 latest \ub294 default tag name \uc774\ubbc0\ub85c ",(0,a.kt)("strong",{parentName:"p"},"\uc758\ub3c4\uce58 \uc54a\uac8c overwritten")," \ub418\ub294 \uacbd\uc6b0\uac00 \ub108\ubb34 \ub9ce\uc774 \ubc1c\uc0dd\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ud558\ub098\uc758 \uc774\ubbf8\uc9c0\ub294 \ud558\ub098\uc758 \ud0dc\uadf8\ub97c \uac00\uc9d0(",(0,a.kt)("strong",{parentName:"p"},"uniqueness"),")\uc744 \ubcf4\uc7a5\ud574\uc57c \ucd94\ud6c4 Production \ub2e8\uacc4\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\ud611\uc5c5/\ub514\ubc84\uae45"),"\uc5d0 \uc6a9\uc774\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub0b4\uc6a9\uc740 \ub2e4\ub974\uc9c0\ub9cc, \ub3d9\uc77c\ud55c tag \ub97c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 \ucd94\ud6c4 dangling image \ub85c \ucde8\uae09\ub418\uc5b4 \uad00\ub9ac\ud558\uae30 \uc5b4\ub824\uc6cc\uc9d1\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","dangling image\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker images"),"\uc5d0\ub294 \ub098\uc624\uc9c0 \uc54a\uc9c0\ub9cc \uacc4\uc18d\ud574\uc11c \uc800\uc7a5\uc18c\ub97c \ucc28\uc9c0\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"etc"},"ETC"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"log \ub4f1\uc758 \uc815\ubcf4\ub294 container \ub0b4\ubd80\uac00 \uc544\ub2cc \uacf3\uc5d0 \ub530\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4.\ncontainer \ub0b4\ubd80\uc5d0\uc11c write \ud55c data \ub294 \uc5b8\uc81c\ub4e0\uc9c0 \uc0ac\ub77c\uc9c8 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ol"},"secret \ud55c \uc815\ubcf4, \ud658\uacbd(dev/prod) dependent \ud55c \uc815\ubcf4 \ub4f1\uc740 Dockerfile \uc5d0 \uc9c1\uc811 \uc801\ub294 \uac8c \uc544\ub2c8\ub77c, env var \ub610\ub294 .env config file \uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ol"},"Dockerfile ",(0,a.kt)("strong",{parentName:"li"},"linter")," \ub3c4 \uc874\uc7ac\ud558\ubbc0\ub85c, \ud611\uc5c5 \uc2dc\uc5d0\ub294 \ud65c\uc6a9\ud558\uba74 \uc88b\uc2b5\ub2c8\ub2e4.\n",(0,a.kt)("a",{parentName:"li",href:"https://github.com/hadolint/hadolint"},"https://github.com/hadolint/hadolint"))),(0,a.kt)("h2",{id:"docker-run-\uc758-\ub2e4\uc591\ud55c-\uc635\uc158"},"docker run \uc758 \ub2e4\uc591\ud55c \uc635\uc158"),(0,a.kt)("h3",{id:"docker-run-with-volume"},"docker run with volume"),(0,a.kt)("p",null,"Docker container \uc0ac\uc6a9 \uc2dc \ubd88\ud3b8\ud55c \uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.\n\ubc14\ub85c Docker\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Docker ",(0,a.kt)("strong",{parentName:"p"},"container \ub0b4\ubd80\uc5d0\uc11c \uc791\uc5c5\ud55c \ubaa8\ub4e0 \uc0ac\ud56d\uc740 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),"\n\uc774\uc720\ub294 Docker container \ub294 \uac01\uac01 \uaca9\ub9ac\ub41c \ud30c\uc77c\uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, ",(0,a.kt)("strong",{parentName:"p"},"\uc5ec\ub7ec docker container \ub07c\ub9ac \ub370\uc774\ud130\ub97c \uacf5\uc720\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.")),(0,a.kt)("p",null,"\uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574\uc11c Docker\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc740 ",(0,a.kt)("strong",{parentName:"p"},"2 \uac00\uc9c0"),"\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"storage.png",src:n(5940).Z,width:"501",height:"255"})),(0,a.kt)("h4",{id:"docker-volume"},"Docker volume"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"docker cli \ub97c \uc0ac\uc6a9\ud574 ",(0,a.kt)("inlineCode",{parentName:"li"},"volume")," \uc774\ub77c\ub294 \ub9ac\uc18c\uc2a4\ub97c \uc9c1\uc811 \uad00\ub9ac"),(0,a.kt)("li",{parentName:"ul"},"host \uc5d0\uc11c Docker area(",(0,a.kt)("inlineCode",{parentName:"li"},"/var/lib/docker"),") \uc544\ub798\uc5d0 \ud2b9\uc815 \ub514\ub809\ud1a0\ub9ac\ub97c \uc0dd\uc131\ud55c \ub2e4\uc74c, \ud574\ub2f9 \uacbd\ub85c\ub97c docker container \uc5d0 mount")),(0,a.kt)("h4",{id:"bind-mount"},"Bind mount"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"host \uc758 \ud2b9\uc815 \uacbd\ub85c\ub97c docker container \uc5d0 mount")),(0,a.kt)("h4",{id:"how-to-use"},"How to use?"),(0,a.kt)("p",null,"\uc0ac\uc6a9 \ubc29\uc2dd\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ub3d9\uc77c\ud55c \uc778\ud130\ud398\uc774\uc2a4"),"\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"-v")," \uc635\uc158\uc744 \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub2e4\ub9cc, volume \uc744 \uc0ac\uc6a9\ud560 \ub54c\uc5d0\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume create"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume ls"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume rm")," \ub4f1\uc744 \uc218\ud589\ud558\uc5ec \uc9c1\uc811 \uad00\ub9ac\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Docker volume"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run \\\n -v my_volume:/app \\\n nginx:latest\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Blind mount"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run \\\n -v /home/user/some/path:/app \\\n nginx:latest\n")))),(0,a.kt)("p",null,"\ub85c\uceec\uc5d0\uc11c \uac1c\ubc1c\ud560 \ub54c\ub294 bind mount \uac00 \ud3b8\ud558\uae34 \ud558\uc9c0\ub9cc, \ud658\uacbd\uc744 \uae54\ub054\ud558\uac8c \uc720\uc9c0\ud558\uace0 \uc2f6\ub2e4\uba74 docker volume \uc744 \uc0ac\uc6a9\ud558\uc5ec create, rm \uc744 \uba85\uc2dc\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uac83\ub3c4 \ud558\ub098\uc758 \ubc29\ubc95\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\ub3c4 \uacb0\uad6d docker \uc758 bind mount \ub97c \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-with-resource-limit"},"docker run with resource limit"),(0,a.kt)("p",null,"\uae30\ubcf8\uc801\uc73c\ub85c docker container \ub294 ",(0,a.kt)("strong",{parentName:"p"},"host OS \uc758 cpu, memory \uc790\uc6d0\uc744 fully \uc0ac\uc6a9"),"\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774\ub807\uac8c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 host OS \uc758 \uc790\uc6d0 \uc0c1\ud669\uc5d0 \ub530\ub77c\uc11c ",(0,a.kt)("strong",{parentName:"p"},"OOM")," \ub4f1\uc758 \uc774\uc288\ub85c docker container \uac00 \ube44\uc815\uc0c1\uc801\uc73c\ub85c \uc885\ub8cc\ub418\ub294 \uc0c1\ud669\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub7f0 \ubb38\uc81c\ub97c \ub2e4\ub8e8\uae30 \uc704\ud574 ",(0,a.kt)("strong",{parentName:"p"},"docker container \uc2e4\ud589 \uc2dc, cpu \uc640 memory \uc758 \uc0ac\uc6a9\ub7c9 \uc81c\ud55c"),"\uc744 \uac78 \uc218 \uc788\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"-m")," ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory"},"\uc635\uc158"),"\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d -m 512m --memory-reservation=256m --name 512-limit ubuntu sleep 3600\ndocker run -d -m 1g --memory-reservation=256m --name 1g-limit ubuntu sleep 3600\n")),(0,a.kt)("p",null,"\uc704\uc758 \ub3c4\ucee4\ub97c \uc2e4\ud589 \ud6c4 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker stats")," \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 \uc0ac\uc6a9\ub7c9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS\n4ea1258e2e09 1g-limit 0.00% 300KiB / 1GiB 0.03% 1kB / 0B 0B / 0B 1\n4edf94b9a3e5 512-limit 0.00% 296KiB / 512MiB 0.06% 1.11kB / 0B 0B / 0B 1\n")),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c pod \ub77c\ub294 \ub9ac\uc18c\uc2a4\uc5d0 cpu, memory \uc81c\ud55c\uc744 \uc904 \ub54c, \uc774 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-with-restart-policy"},"docker run with restart policy"),(0,a.kt)("p",null,"\ud2b9\uc815 \ucee8\ud14c\uc774\ub108\uac00 \uacc4\uc18d\ud574\uc11c running \uc0c1\ud0dc\ub97c \uc720\uc9c0\uc2dc\ucf1c\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc774\ub7f0 \uacbd\uc6b0\ub97c \uc704\ud574\uc11c \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uac00 \uc885\ub8cc\ub418\uc790\ub9c8\uc790 \ubc14\ub85c \uc7ac\uc0dd\uc131\uc744 \uc2dc\ub3c4\ud560 \uc218 \uc788\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"--restart=always")," \uc635\uc158\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc635\uc158 \uc785\ub825 \ud6c4 \ub3c4\ucee4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run --restart=always ubuntu\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"watch -n1 docker ps"),"\ub97c \ud1b5\ud574 \uc7ac\uc2e4\ud589\uc774 \ub418\uace0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.\n\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uace0 \uc788\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 STATUS\uc5d0 ",(0,a.kt)("inlineCode",{parentName:"p"},"Restarting (0)")," \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\na911850276e8 ubuntu "bash" 35 seconds ago Restarting (0) 6 seconds ago hungry_vaughan\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart"},"https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"on-failure with max retries"),(0,a.kt)("li",{parentName:"ul"},"always \ub4f1\uc758 \uc120\ud0dd\uc9c0 \uc81c\uacf5")))),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c job \uc774\ub77c\ub294 resource \uc758 restart \uc635\uc158\uc744 \uc904 \ub54c, \uc774 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-as-a-background-process"},"docker run as a background process"),(0,a.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud560 \ub54c\ub294 \uae30\ubcf8\uc801\uc73c\ub85c foreground process \ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc989, \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud55c \ud130\ubbf8\ub110\uc774 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uc5d0 \uc790\ub3d9\uc73c\ub85c attach \ub418\uc5b4 \uc788\uc5b4, \ub2e4\ub978 \uba85\ub839\uc744 \uc2e4\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc608\uc2dc\ub97c \uc218\ud589\ud574\ubd05\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc6b0\uc120 \ud130\ubbf8\ub110 2 \uac1c\ub97c \uc5f4\uc5b4, \ud558\ub098\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker ps")," \ub97c \uc9c0\ucf1c\ubcf4\uace0, \ub2e4\ub978 \ud558\ub098\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc744 \ucc28\ub840\ub85c \uc2e4\ud589\ud574\ubcf4\uba70 \ub3d9\uc791\uc744 \uc9c0\ucf1c\ubd05\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"first-practice"},"First Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it ubuntu sleep 10\n")),(0,a.kt)("p",null,"10 \ucd08\ub3d9\uc548 \uba48\ucdb0 \uc788\uc5b4\uc57c \ud558\uace0, \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \ub2e4\ub978 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. 10\ucd08 \ub4a4\uc5d0\ub294 docker ps \uc5d0\uc11c container \uac00 \uc885\ub8cc\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"second-practice"},"Second Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it ubuntu sleep 10\n")),(0,a.kt)("p",null,"\uc774\ud6c4, ",(0,a.kt)("inlineCode",{parentName:"p"},"ctrl + p")," -> ",(0,a.kt)("inlineCode",{parentName:"p"},"ctrl + q")),(0,a.kt)("p",null,"\ud574\ub2f9 \ud130\ubbf8\ub110\uc5d0\uc11c \uc774\uc81c \ub2e4\ub978 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc73c\uba70, docker ps \ub85c\ub3c4 10\ucd08\uae4c\uc9c0\ub294 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uac00 \uc0b4\uc544\uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub807\uac8c docker container \ub0b4\ubd80\uc5d0\uc11c \ube60\uc838\ub098\uc628 \uc0c1\ud669\uc744 detached \ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4.\n\ub3c4\ucee4\uc5d0\uc11c\ub294 run \uc744 \uc2e4\ud589\ud568\uacfc \ub3d9\uc2dc\uc5d0 detached mode \ub85c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\ub294 \uc635\uc158\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"third-practice"},"Third Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d ubuntu sleep 10\n")),(0,a.kt)("p",null,"detached mode \uc774\ubbc0\ub85c \ud574\ub2f9 \uba85\ub839\uc744 \uc2e4\ud589\uc2dc\ud0a8 \ud130\ubbf8\ub110\uc5d0\uc11c \ub2e4\ub978 \uc561\uc158\uc744 \uc218\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc0c1\ud669\uc5d0 \ub530\ub77c detached mode \ub97c \uc801\uc808\ud788 \ud65c\uc6a9\ud558\uba74 \uc88b\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4, DB \uc640 \ud1b5\uc2e0\ud558\ub294 Backend API server \ub97c \uac1c\ubc1c\ud560 \ub54c Backend API server \ub294 source code \ub97c \ubcc0\uacbd\uc2dc\ucf1c\uac00\uba74\uc11c hot-loading \uc73c\ub85c \uacc4\uc18d\ud574\uc11c \ub85c\uadf8\ub97c \ud655\uc778\ud574\ubd10\uc57c \ud558\uc9c0\ub9cc, DB \ub294 \ub85c\uadf8\ub97c \uc9c0\ucf1c\ubcfc \ud544\uc694\ub294 \uc5c6\ub294 \uacbd\uc6b0\ub77c\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","DB \ub294 docker container \ub97c detached mode \ub85c \uc2e4\ud589\uc2dc\ud0a4\uace0, Backend API server \ub294 attached mode \ub85c log \ub97c following \ud558\uba74\uc11c \uc2e4\ud589\uc2dc\ud0a4\uba74 \ud6a8\uc728\uc801\uc785\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"references"},"References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://towardsdatascience.com/docker-storage-598e385f4efe"},"https://towardsdatascience.com/docker-storage-598e385f4efe")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://vsupalov.com/docker-latest-tag/"},"https://vsupalov.com/docker-latest-tag/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/ko-kr/azure/container-registry/container-registry-image-tag-version"},"https://docs.microsoft.com/ko-kr/azure/container-registry/container-registry-image-tag-version")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/"},"https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/"))))}s.isMDXComponent=!0},6045:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/layers-d934a487c19f428867e8d460015e8747.png"},5940:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/storage-2d2649699364f46922716d1fe9b5470a.png"}}]); \ No newline at end of file diff --git a/assets/js/8dd8b1e3.c08be334.js b/assets/js/8dd8b1e3.c08be334.js new file mode 100644 index 00000000..fe6da493 --- /dev/null +++ b/assets/js/8dd8b1e3.c08be334.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8425],{3905:(e,t,n)=>{n.d(t,{Zo:()=>k,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},k=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,k=i(e,["components","mdxType","originalType","parentName"]),d=c(n),u=a,m=d["".concat(p,".").concat(u)]||d[u]||s[u]||l;return n?r.createElement(m,o(o({ref:t},k),{},{components:n})):r.createElement(m,o({ref:t},k))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>s,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const l={title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",sidebar_position:6,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/advanced",id:"prerequisites/docker/advanced",title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",source:"@site/docs/prerequisites/docker/advanced.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/advanced",permalink:"/docs/prerequisites/docker/advanced",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/prerequisites/docker/advanced.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",sidebar_position:6,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"[Practice] Docker images",permalink:"/docs/prerequisites/docker/images"}},p={},c=[{value:"\ub3c4\ucee4 \uc774\ubbf8\uc9c0 \uc798 \ub9cc\ub4e4\uae30",id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0-\uc798-\ub9cc\ub4e4\uae30",level:2},{value:"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uace0\ub824\ud574\uc57c \ub420 \uc810",id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0\ub97c-\ub9cc\ub4e4-\ub54c-\uace0\ub824\ud574\uc57c-\ub420-\uc810",level:3},{value:"ENTRYPOINT vs CMD",id:"entrypoint-vs-cmd",level:3},{value:"Docker tag \uc774\ub984 \uc9d3\uae30",id:"docker-tag-\uc774\ub984-\uc9d3\uae30",level:3},{value:"ETC",id:"etc",level:3},{value:"docker run \uc758 \ub2e4\uc591\ud55c \uc635\uc158",id:"docker-run-\uc758-\ub2e4\uc591\ud55c-\uc635\uc158",level:2},{value:"docker run with volume",id:"docker-run-with-volume",level:3},{value:"Docker volume",id:"docker-volume",level:4},{value:"Bind mount",id:"bind-mount",level:4},{value:"How to use?",id:"how-to-use",level:4},{value:"docker run with resource limit",id:"docker-run-with-resource-limit",level:3},{value:"docker run with restart policy",id:"docker-run-with-restart-policy",level:3},{value:"docker run as a background process",id:"docker-run-as-a-background-process",level:3},{value:"First Practice",id:"first-practice",level:4},{value:"Second Practice",id:"second-practice",level:4},{value:"Third Practice",id:"third-practice",level:4},{value:"References",id:"references",level:2}],k={toc:c},d="wrapper";function s(e){let{components:t,...l}=e;return(0,a.kt)(d,(0,r.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0-\uc798-\ub9cc\ub4e4\uae30"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0 \uc798 \ub9cc\ub4e4\uae30"),(0,a.kt)("h3",{id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0\ub97c-\ub9cc\ub4e4-\ub54c-\uace0\ub824\ud574\uc57c-\ub420-\uc810"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uace0\ub824\ud574\uc57c \ub420 \uc810"),(0,a.kt)("p",null,"Dockerfile \uc744 \ud65c\uc6a9\ud558\uc5ec \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c\ub294 \uba85\ub839\uc5b4\uc758 ",(0,a.kt)("strong",{parentName:"p"},"\uc21c\uc11c"),"\uac00 \uc911\uc694\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8 \uc774\uc720\ub294 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 \uc5ec\ub7ec \uac1c\uc758 Read-Only Layer \ub85c \uad6c\uc131\ub418\uc5b4\uc788\uace0, \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud560 \ub54c \uc774\ubbf8 \uc874\uc7ac\ud558\ub294 \ub808\uc774\uc5b4\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\uce90\uc2dc\ub418\uc5b4")," \uc7ac\uc0ac\uc6a9\ub418\uae30 \ub54c\ubb38\uc5d0, \uc774\ub97c \uc0dd\uac01\ud574\uc11c Dockerfile \uc744 \uad6c\uc131\ud55c\ub2e4\uba74 ",(0,a.kt)("strong",{parentName:"p"},"\ube4c\ub4dc \uc2dc\uac04\uc744 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,a.kt)("p",null,"Dockerfile\uc5d0\uc11c ",(0,a.kt)("inlineCode",{parentName:"p"},"RUN"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"ADD"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY")," \uba85\ub839\uc5b4 \ud558\ub098\uac00 \ud558\ub098\uc758 \ub808\uc774\uc5b4\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Layer 1\nFROM ubuntu:latest\n\n# Layer 2\nRUN apt-get update && apt-get install python3 pip3 -y\n\n# Layer 3\nRUN pip3 install -U pip && pip3 install torch\n\n# Layer 4\nCOPY src/ src/\n\n# Layer 5\nCMD python src/app.py\n")),(0,a.kt)("p",null,"\uc704\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\ub85c \ube4c\ub4dc\ub41c \uc774\ubbf8\uc9c0\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run -it app:latest /bin/bash")," \uba85\ub839\uc5b4\ub85c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ub808\uc774\uc5b4\ub85c \ud45c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"layers.png",src:n(6045).Z,width:"1080",height:"612"})),(0,a.kt)("p",null,"\ucd5c\uc0c1\ub2e8\uc758 R/W Layer \ub294 \uc774\ubbf8\uc9c0\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc989, \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc791\uc5c5\ud55c \ub0b4\uc5ed\uc740 \ubaa8\ub450 \ud718\ubc1c\uc131\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ud558\ub2e8\uc758 \ub808\uc774\uc5b4\uac00 \ubcc0\uacbd\ub418\uba74, \uadf8 \uc704\uc758 \ub808\uc774\uc5b4\ub294 \ubaa8\ub450 \uc0c8\ub85c \ube4c\ub4dc\ub429\ub2c8\ub2e4. \uadf8\ub798\uc11c Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4\uc758 \uc21c\uc11c\uac00 \uc911\uc694\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uba74, ",(0,a.kt)("strong",{parentName:"p"},"\uc790\uc8fc \ubcc0\uacbd"),"\ub418\ub294 \ubd80\ubd84\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ucd5c\ub300\ud55c \ub4a4\ucabd\uc73c\ub85c")," \uc815\ub82c\ud558\ub294 \uac83\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4. (ex. ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY src/ app/src/"),")"),(0,a.kt)("p",null,"\uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \ubc18\ub300\ub85c \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294 \ubd80\ubd84\uc740 \ucd5c\ub300\ud55c \uc55e\ucabd\uc73c\ub85c \uc815\ub82c\ud558\ub294\uac8c \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ub9cc\uc57d \uac70\uc758 ",(0,a.kt)("strong",{parentName:"p"},"\ubcc0\uacbd\ub418\uc9c0 \uc54a\uc9c0\ub9cc"),", \uc5ec\ub7ec \uacf3\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\uc790\uc8fc")," \uc4f0\uc774\ub294 \ubd80\ubd84\uc744 \uacf5\ud1b5\ud654\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\n\ud574\ub2f9 \uacf5\ud1b5\ubd80\ubd84\ub9cc \ubb36\uc5b4\uc11c \ubcc4\ub3c4\uc758 \uc774\ubbf8\uc9c0\ub294 \ubbf8\ub9ac \ub9cc\ub4e4\uc5b4\ub454 \ub2e4\uc74c, ",(0,a.kt)("strong",{parentName:"p"},"\ubca0\uc774\uc2a4 \uc774\ubbf8\uc9c0")," \ub85c \ud65c\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \ub2e4\ub978 \uac74 \uac70\uc758 \ub611\uac19\uc740\ub370, tensorflow-cpu \ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\ubbf8\uc9c0\uc640, tensorflow-gpu \ub97c \uc0ac\uc6a9\ud558\ub294 \ud658\uacbd\uc744 \ubd84\ub9ac\ud574\uc11c \uc774\ubbf8\uc9c0\ub85c \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","python \uacfc \uae30\ud0c0 \uae30\ubcf8\uc801\uc778 \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub41c ",(0,a.kt)("a",{parentName:"p",href:"http://ghcr.io/makinarocks/python:3.8-base-cpu"},(0,a.kt)("inlineCode",{parentName:"a"},"ghcr.io/makinarocks/python:3.8-base"))," \ub97c \ub9cc\ub4e4\uc5b4\ub450\uace0, ",(0,a.kt)("strong",{parentName:"p"},"tensorflow cpu \ubc84\uc804\uacfc gpu \ubc84\uc804\uc774")," \uc124\uce58\ub41c \uc774\ubbf8\uc9c0 \uc0c8\ub85c \ub9cc\ub4e4\ub54c\ub294, \uc704\uc758 \uc774\ubbf8\uc9c0\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"FROM")," \uc73c\ub85c \ubd88\ub7ec\uc628 \ub2e4\uc74c, tensorflow install \ud558\ub294 \ubd80\ubd84\ub9cc \ubcc4\ub3c4\ub85c \uc791\uc131\ud574\uc11c Dockerfile \uc744 2 \uac1c\ub85c \uad00\ub9ac\ud55c\ub2e4\uba74 \uac00\ub3c5\uc131\ub3c4 \uc88b\uace0 \ube4c\ub4dc \uc2dc\uac04\ub3c4 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\ud569\uce60 \uc218 \uc788\ub294 Layer \ub294 \ud569\uce58\ub294 \uac83"),"\uc774 Old version \uc758 \ub3c4\ucee4\uc5d0\uc11c\ub294 \uc131\ub2a5 \ud5a5\uc0c1 \ud6a8\uacfc\ub97c \uc774\ub04c\uc5c8\uc2b5\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\uc758 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uac00 \uc5b4\ub5a4 \ub3c4\ucee4 \ubc84\uc804\uc5d0\uc11c \uc2e4\ud589\ub420 \uac83\uc778\uc9c0 \ubcf4\uc7a5\ud560 \uc218 \uc5c6\uc73c\uba70, ",(0,a.kt)("strong",{parentName:"p"},"\uac00\ub3c5\uc131"),"\uc744 \uc704\ud574\uc11c\ub3c4 \ud569\uce60 \uc218 \uc788\ub294 Layer \ub294 \uc801\uc808\ud788 \ud569\uce58\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ub41c ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Bad Case\nRUN apt-get update\nRUN apt-get install build-essential -y\nRUN apt-get install curl -y\nRUN apt-get install jq -y\nRUN apt-get install git -y\n")),(0,a.kt)("p",null,"\uc774\ub97c \uc544\ub798\uc640 \uac19\uc774 \ud569\uccd0\uc11c \uc801\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Better Case\nRUN apt-get update && \\\n apt-get install -y \\\n build-essential \\\n curl \\\n jq \\\n git\n")),(0,a.kt)("p",null,"\ud3b8\uc758\ub97c \uc704\ud574\uc11c\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},".dockerignore")," \ub3c4 \uc0ac\uc6a9\ud558\ub294\uac8c \uc88b\uc2b5\ub2c8\ub2e4.\n",(0,a.kt)("inlineCode",{parentName:"p"},".dockerignore"),"\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},".gitignore")," \uc640 \ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud55c\ub2e4\uace0 \uc774\ud574\ud558\uba74 \ub429\ub2c8\ub2e4. (git add \ud560 \ub54c \uc81c\uc678\ud560 \uc218 \uc788\ub4ef\uc774, docker build \ud560 \ub54c \uc790\ub3d9\uc73c\ub85c \uc81c\uc678)"),(0,a.kt)("p",null,"\ub354 \ub9ce\uc740 \uc815\ubcf4\ub294 ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/develop/develop-images/dockerfile_best-practices/"},"Docker \uacf5\uc2dd \ubb38\uc11c"),"\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"entrypoint-vs-cmd"},"ENTRYPOINT vs CMD"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc640 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," \ub294 \ubaa8\ub450 \ucee8\ud14c\uc774\ub108\uc758 \uc2e4\ud589 \uc2dc\uc810\uc5d0\uc11c \uc5b4\ub5a4 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\uc2dc\ud0a4\uace0 \uc2f6\uc744 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \uc774 \ub458 \uc911 \ud558\ub098\ub294 \ubc18\ub4dc\uc2dc \uc874\uc7ac\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\ucc28\uc774\uc810"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CMD"),": docker run \uc744 \uc218\ud589\ud560 \ub54c, \uc27d\uac8c \ubcc0\uacbd\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc74c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENTRYPOINT"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"--entrypoint")," \ub97c \uc0ac\uc6a9\ud574\uc57c \ubcc0\uacbd\ud560 \uc218 \uc788\uc74c")))),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc640 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," \uac00 \ud568\uaed8 \uc4f0\uc77c \ub54c\ub294 \ubcf4\ud1b5 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD"),"\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc5d0\uc11c \uc801\uc740 \uba85\ub839\uc758 arguments(parameters) \ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'FROM ubuntu:latest\n\n# \uc544\ub798 4 \uac00\uc9c0 option \uc744 \ubc14\uafd4\uac00\uba70 \uc9c1\uc811 \ud14c\uc2a4\ud2b8\ud574\ubcf4\uc2dc\uba74 \uc774\ud574\ud558\uae30 \ud3b8\ud569\ub2c8\ub2e4.\n# \ub2e8, NO ENTRYPOINT \uc635\uc158\uc740 base image \uc778 ubuntu:latest \uc5d0 \uc774\ubbf8 \uc788\uc5b4\uc11c \ud14c\uc2a4\ud2b8\ud574\ubcfc \uc218\ub294 \uc5c6\uace0 \ub098\uba38\uc9c0 v2, 3, 5, 6, 8, 9, 11, 12 \ub97c \ud14c\uc2a4\ud2b8\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n# ENTRYPOINT echo "Hello ENTRYPOINT"\n# ENTRYPOINT ["echo", "Hello ENTRYPOINT"]\n# CMD echo "Hello CMD"\n# CMD ["echo", "Hello CMD"]\n')),(0,a.kt)("p",null,"\uc704\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc5d0\uc11c \uc8fc\uc11d\uc73c\ub85c \ud45c\uc2dc\ub41c \ubd80\ubd84\ub4e4\uc744 \ud574\uc81c\ud558\uba70 \ube4c\ub4dc\ud558\uace0 \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null}),(0,a.kt)("th",{parentName:"tr",align:null},"No ENTRYPOINT"),(0,a.kt)("th",{parentName:"tr",align:null},"ENTRYPOINT a b"),(0,a.kt)("th",{parentName:"tr",align:null},"ENTRYPOINT ",'["a", "b"]'))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"NO CMD")),(0,a.kt)("td",{parentName:"tr",align:null},"Error!"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"CMD ",'["x", "y"]')),(0,a.kt)("td",{parentName:"tr",align:null},"x y"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b x y")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"CMD x y")),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c x y"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b /bin/sh -c x y")))),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"In Kubernetes pod",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENTRYPOINT")," \u2192 command"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CMD")," \u2192 args")))),(0,a.kt)("h3",{id:"docker-tag-\uc774\ub984-\uc9d3\uae30"},"Docker tag \uc774\ub984 \uc9d3\uae30"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\uc758 tag \ub85c ",(0,a.kt)("strong",{parentName:"p"},"latest \ub294 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uac83\uc744 \uad8c\uc7a5"),"\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\uc720\ub294 latest \ub294 default tag name \uc774\ubbc0\ub85c ",(0,a.kt)("strong",{parentName:"p"},"\uc758\ub3c4\uce58 \uc54a\uac8c overwritten")," \ub418\ub294 \uacbd\uc6b0\uac00 \ub108\ubb34 \ub9ce\uc774 \ubc1c\uc0dd\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ud558\ub098\uc758 \uc774\ubbf8\uc9c0\ub294 \ud558\ub098\uc758 \ud0dc\uadf8\ub97c \uac00\uc9d0(",(0,a.kt)("strong",{parentName:"p"},"uniqueness"),")\uc744 \ubcf4\uc7a5\ud574\uc57c \ucd94\ud6c4 Production \ub2e8\uacc4\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\ud611\uc5c5/\ub514\ubc84\uae45"),"\uc5d0 \uc6a9\uc774\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub0b4\uc6a9\uc740 \ub2e4\ub974\uc9c0\ub9cc, \ub3d9\uc77c\ud55c tag \ub97c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 \ucd94\ud6c4 dangling image \ub85c \ucde8\uae09\ub418\uc5b4 \uad00\ub9ac\ud558\uae30 \uc5b4\ub824\uc6cc\uc9d1\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","dangling image\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker images"),"\uc5d0\ub294 \ub098\uc624\uc9c0 \uc54a\uc9c0\ub9cc \uacc4\uc18d\ud574\uc11c \uc800\uc7a5\uc18c\ub97c \ucc28\uc9c0\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"etc"},"ETC"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"log \ub4f1\uc758 \uc815\ubcf4\ub294 container \ub0b4\ubd80\uac00 \uc544\ub2cc \uacf3\uc5d0 \ub530\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4.\ncontainer \ub0b4\ubd80\uc5d0\uc11c write \ud55c data \ub294 \uc5b8\uc81c\ub4e0\uc9c0 \uc0ac\ub77c\uc9c8 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ol"},"secret \ud55c \uc815\ubcf4, \ud658\uacbd(dev/prod) dependent \ud55c \uc815\ubcf4 \ub4f1\uc740 Dockerfile \uc5d0 \uc9c1\uc811 \uc801\ub294 \uac8c \uc544\ub2c8\ub77c, env var \ub610\ub294 .env config file \uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ol"},"Dockerfile ",(0,a.kt)("strong",{parentName:"li"},"linter")," \ub3c4 \uc874\uc7ac\ud558\ubbc0\ub85c, \ud611\uc5c5 \uc2dc\uc5d0\ub294 \ud65c\uc6a9\ud558\uba74 \uc88b\uc2b5\ub2c8\ub2e4.\n",(0,a.kt)("a",{parentName:"li",href:"https://github.com/hadolint/hadolint"},"https://github.com/hadolint/hadolint"))),(0,a.kt)("h2",{id:"docker-run-\uc758-\ub2e4\uc591\ud55c-\uc635\uc158"},"docker run \uc758 \ub2e4\uc591\ud55c \uc635\uc158"),(0,a.kt)("h3",{id:"docker-run-with-volume"},"docker run with volume"),(0,a.kt)("p",null,"Docker container \uc0ac\uc6a9 \uc2dc \ubd88\ud3b8\ud55c \uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.\n\ubc14\ub85c Docker\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Docker ",(0,a.kt)("strong",{parentName:"p"},"container \ub0b4\ubd80\uc5d0\uc11c \uc791\uc5c5\ud55c \ubaa8\ub4e0 \uc0ac\ud56d\uc740 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),"\n\uc774\uc720\ub294 Docker container \ub294 \uac01\uac01 \uaca9\ub9ac\ub41c \ud30c\uc77c\uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, ",(0,a.kt)("strong",{parentName:"p"},"\uc5ec\ub7ec docker container \ub07c\ub9ac \ub370\uc774\ud130\ub97c \uacf5\uc720\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.")),(0,a.kt)("p",null,"\uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574\uc11c Docker\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc740 ",(0,a.kt)("strong",{parentName:"p"},"2 \uac00\uc9c0"),"\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"storage.png",src:n(5940).Z,width:"501",height:"255"})),(0,a.kt)("h4",{id:"docker-volume"},"Docker volume"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"docker cli \ub97c \uc0ac\uc6a9\ud574 ",(0,a.kt)("inlineCode",{parentName:"li"},"volume")," \uc774\ub77c\ub294 \ub9ac\uc18c\uc2a4\ub97c \uc9c1\uc811 \uad00\ub9ac"),(0,a.kt)("li",{parentName:"ul"},"host \uc5d0\uc11c Docker area(",(0,a.kt)("inlineCode",{parentName:"li"},"/var/lib/docker"),") \uc544\ub798\uc5d0 \ud2b9\uc815 \ub514\ub809\ud1a0\ub9ac\ub97c \uc0dd\uc131\ud55c \ub2e4\uc74c, \ud574\ub2f9 \uacbd\ub85c\ub97c docker container \uc5d0 mount")),(0,a.kt)("h4",{id:"bind-mount"},"Bind mount"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"host \uc758 \ud2b9\uc815 \uacbd\ub85c\ub97c docker container \uc5d0 mount")),(0,a.kt)("h4",{id:"how-to-use"},"How to use?"),(0,a.kt)("p",null,"\uc0ac\uc6a9 \ubc29\uc2dd\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ub3d9\uc77c\ud55c \uc778\ud130\ud398\uc774\uc2a4"),"\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"-v")," \uc635\uc158\uc744 \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub2e4\ub9cc, volume \uc744 \uc0ac\uc6a9\ud560 \ub54c\uc5d0\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume create"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume ls"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume rm")," \ub4f1\uc744 \uc218\ud589\ud558\uc5ec \uc9c1\uc811 \uad00\ub9ac\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Docker volume"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run \\\n -v my_volume:/app \\\n nginx:latest\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Blind mount"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run \\\n -v /home/user/some/path:/app \\\n nginx:latest\n")))),(0,a.kt)("p",null,"\ub85c\uceec\uc5d0\uc11c \uac1c\ubc1c\ud560 \ub54c\ub294 bind mount \uac00 \ud3b8\ud558\uae34 \ud558\uc9c0\ub9cc, \ud658\uacbd\uc744 \uae54\ub054\ud558\uac8c \uc720\uc9c0\ud558\uace0 \uc2f6\ub2e4\uba74 docker volume \uc744 \uc0ac\uc6a9\ud558\uc5ec create, rm \uc744 \uba85\uc2dc\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uac83\ub3c4 \ud558\ub098\uc758 \ubc29\ubc95\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\ub3c4 \uacb0\uad6d docker \uc758 bind mount \ub97c \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-with-resource-limit"},"docker run with resource limit"),(0,a.kt)("p",null,"\uae30\ubcf8\uc801\uc73c\ub85c docker container \ub294 ",(0,a.kt)("strong",{parentName:"p"},"host OS \uc758 cpu, memory \uc790\uc6d0\uc744 fully \uc0ac\uc6a9"),"\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774\ub807\uac8c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 host OS \uc758 \uc790\uc6d0 \uc0c1\ud669\uc5d0 \ub530\ub77c\uc11c ",(0,a.kt)("strong",{parentName:"p"},"OOM")," \ub4f1\uc758 \uc774\uc288\ub85c docker container \uac00 \ube44\uc815\uc0c1\uc801\uc73c\ub85c \uc885\ub8cc\ub418\ub294 \uc0c1\ud669\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub7f0 \ubb38\uc81c\ub97c \ub2e4\ub8e8\uae30 \uc704\ud574 ",(0,a.kt)("strong",{parentName:"p"},"docker container \uc2e4\ud589 \uc2dc, cpu \uc640 memory \uc758 \uc0ac\uc6a9\ub7c9 \uc81c\ud55c"),"\uc744 \uac78 \uc218 \uc788\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"-m")," ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory"},"\uc635\uc158"),"\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d -m 512m --memory-reservation=256m --name 512-limit ubuntu sleep 3600\ndocker run -d -m 1g --memory-reservation=256m --name 1g-limit ubuntu sleep 3600\n")),(0,a.kt)("p",null,"\uc704\uc758 \ub3c4\ucee4\ub97c \uc2e4\ud589 \ud6c4 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker stats")," \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 \uc0ac\uc6a9\ub7c9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS\n4ea1258e2e09 1g-limit 0.00% 300KiB / 1GiB 0.03% 1kB / 0B 0B / 0B 1\n4edf94b9a3e5 512-limit 0.00% 296KiB / 512MiB 0.06% 1.11kB / 0B 0B / 0B 1\n")),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c pod \ub77c\ub294 \ub9ac\uc18c\uc2a4\uc5d0 cpu, memory \uc81c\ud55c\uc744 \uc904 \ub54c, \uc774 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-with-restart-policy"},"docker run with restart policy"),(0,a.kt)("p",null,"\ud2b9\uc815 \ucee8\ud14c\uc774\ub108\uac00 \uacc4\uc18d\ud574\uc11c running \uc0c1\ud0dc\ub97c \uc720\uc9c0\uc2dc\ucf1c\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc774\ub7f0 \uacbd\uc6b0\ub97c \uc704\ud574\uc11c \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uac00 \uc885\ub8cc\ub418\uc790\ub9c8\uc790 \ubc14\ub85c \uc7ac\uc0dd\uc131\uc744 \uc2dc\ub3c4\ud560 \uc218 \uc788\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"--restart=always")," \uc635\uc158\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc635\uc158 \uc785\ub825 \ud6c4 \ub3c4\ucee4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run --restart=always ubuntu\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"watch -n1 docker ps"),"\ub97c \ud1b5\ud574 \uc7ac\uc2e4\ud589\uc774 \ub418\uace0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.\n\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uace0 \uc788\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 STATUS\uc5d0 ",(0,a.kt)("inlineCode",{parentName:"p"},"Restarting (0)")," \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\na911850276e8 ubuntu "bash" 35 seconds ago Restarting (0) 6 seconds ago hungry_vaughan\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart"},"https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"on-failure with max retries"),(0,a.kt)("li",{parentName:"ul"},"always \ub4f1\uc758 \uc120\ud0dd\uc9c0 \uc81c\uacf5")))),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c job \uc774\ub77c\ub294 resource \uc758 restart \uc635\uc158\uc744 \uc904 \ub54c, \uc774 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-as-a-background-process"},"docker run as a background process"),(0,a.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud560 \ub54c\ub294 \uae30\ubcf8\uc801\uc73c\ub85c foreground process \ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc989, \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud55c \ud130\ubbf8\ub110\uc774 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uc5d0 \uc790\ub3d9\uc73c\ub85c attach \ub418\uc5b4 \uc788\uc5b4, \ub2e4\ub978 \uba85\ub839\uc744 \uc2e4\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc608\uc2dc\ub97c \uc218\ud589\ud574\ubd05\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc6b0\uc120 \ud130\ubbf8\ub110 2 \uac1c\ub97c \uc5f4\uc5b4, \ud558\ub098\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker ps")," \ub97c \uc9c0\ucf1c\ubcf4\uace0, \ub2e4\ub978 \ud558\ub098\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc744 \ucc28\ub840\ub85c \uc2e4\ud589\ud574\ubcf4\uba70 \ub3d9\uc791\uc744 \uc9c0\ucf1c\ubd05\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"first-practice"},"First Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it ubuntu sleep 10\n")),(0,a.kt)("p",null,"10 \ucd08\ub3d9\uc548 \uba48\ucdb0 \uc788\uc5b4\uc57c \ud558\uace0, \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \ub2e4\ub978 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. 10\ucd08 \ub4a4\uc5d0\ub294 docker ps \uc5d0\uc11c container \uac00 \uc885\ub8cc\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"second-practice"},"Second Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it ubuntu sleep 10\n")),(0,a.kt)("p",null,"\uc774\ud6c4, ",(0,a.kt)("inlineCode",{parentName:"p"},"ctrl + p")," -> ",(0,a.kt)("inlineCode",{parentName:"p"},"ctrl + q")),(0,a.kt)("p",null,"\ud574\ub2f9 \ud130\ubbf8\ub110\uc5d0\uc11c \uc774\uc81c \ub2e4\ub978 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc73c\uba70, docker ps \ub85c\ub3c4 10\ucd08\uae4c\uc9c0\ub294 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uac00 \uc0b4\uc544\uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub807\uac8c docker container \ub0b4\ubd80\uc5d0\uc11c \ube60\uc838\ub098\uc628 \uc0c1\ud669\uc744 detached \ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4.\n\ub3c4\ucee4\uc5d0\uc11c\ub294 run \uc744 \uc2e4\ud589\ud568\uacfc \ub3d9\uc2dc\uc5d0 detached mode \ub85c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\ub294 \uc635\uc158\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"third-practice"},"Third Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d ubuntu sleep 10\n")),(0,a.kt)("p",null,"detached mode \uc774\ubbc0\ub85c \ud574\ub2f9 \uba85\ub839\uc744 \uc2e4\ud589\uc2dc\ud0a8 \ud130\ubbf8\ub110\uc5d0\uc11c \ub2e4\ub978 \uc561\uc158\uc744 \uc218\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc0c1\ud669\uc5d0 \ub530\ub77c detached mode \ub97c \uc801\uc808\ud788 \ud65c\uc6a9\ud558\uba74 \uc88b\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4, DB \uc640 \ud1b5\uc2e0\ud558\ub294 Backend API server \ub97c \uac1c\ubc1c\ud560 \ub54c Backend API server \ub294 source code \ub97c \ubcc0\uacbd\uc2dc\ucf1c\uac00\uba74\uc11c hot-loading \uc73c\ub85c \uacc4\uc18d\ud574\uc11c \ub85c\uadf8\ub97c \ud655\uc778\ud574\ubd10\uc57c \ud558\uc9c0\ub9cc, DB \ub294 \ub85c\uadf8\ub97c \uc9c0\ucf1c\ubcfc \ud544\uc694\ub294 \uc5c6\ub294 \uacbd\uc6b0\ub77c\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","DB \ub294 docker container \ub97c detached mode \ub85c \uc2e4\ud589\uc2dc\ud0a4\uace0, Backend API server \ub294 attached mode \ub85c log \ub97c following \ud558\uba74\uc11c \uc2e4\ud589\uc2dc\ud0a4\uba74 \ud6a8\uc728\uc801\uc785\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"references"},"References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://towardsdatascience.com/docker-storage-598e385f4efe"},"https://towardsdatascience.com/docker-storage-598e385f4efe")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://vsupalov.com/docker-latest-tag/"},"https://vsupalov.com/docker-latest-tag/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/ko-kr/azure/container-registry/container-registry-image-tag-version"},"https://docs.microsoft.com/ko-kr/azure/container-registry/container-registry-image-tag-version")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/"},"https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/"))))}s.isMDXComponent=!0},6045:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/layers-d934a487c19f428867e8d460015e8747.png"},5940:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/storage-2d2649699364f46922716d1fe9b5470a.png"}}]); \ No newline at end of file diff --git a/assets/js/91e4f63c.6e13e4ce.js b/assets/js/91e4f63c.6e13e4ce.js deleted file mode 100644 index b6268cb8..00000000 --- a/assets/js/91e4f63c.6e13e4ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[822],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),s=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},m=function(e){var n=s(e.components);return a.createElement(p.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),d=s(t),c=r,k=d["".concat(p,".").concat(c)]||d[c]||u[c]||l;return t?a.createElement(k,o(o({ref:n},m),{},{components:t})):a.createElement(k,o({ref:n},m))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=t.length,o=new Array(l);o[0]=c;var i={};for(var p in n)hasOwnProperty.call(n,p)&&(i[p]=n[p]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var s=2;s{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var a=t(7462),r=(t(7294),t(3905));const l={title:"4. Seldon Fields",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},o=void 0,i={unversionedId:"api-deployment/seldon-fields",id:"version-1.0/api-deployment/seldon-fields",title:"4. Seldon Fields",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-fields.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-fields",permalink:"/docs/1.0/api-deployment/seldon-fields",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-fields.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Seldon Fields",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"3. Seldon Monitoring",permalink:"/docs/1.0/api-deployment/seldon-pg"},next:{title:"5. Model from MLflow",permalink:"/docs/1.0/api-deployment/seldon-mlflow"}},p={},s=[{value:"How Seldon Core works?",id:"how-seldon-core-works",level:2},{value:"SeldonDeployment Spec",id:"seldondeployment-spec",level:2},{value:"componentSpecs",id:"componentspecs",level:2},{value:"volumes",id:"volumes",level:3},{value:"initContainer",id:"initcontainer",level:3},{value:"name",id:"name",level:4},{value:"image",id:"image",level:4},{value:"args",id:"args",level:4},{value:"volumeMounts",id:"volumemounts",level:3},{value:"container",id:"container",level:3},{value:"name",id:"name-1",level:4},{value:"image",id:"image-1",level:4},{value:"volumeMounts",id:"volumemounts-1",level:4},{value:"securityContext",id:"securitycontext",level:4},{value:"graph",id:"graph",level:2},{value:"name",id:"name-2",level:3},{value:"type",id:"type",level:3},{value:"parameters",id:"parameters",level:3},{value:"children",id:"children",level:3}],m={toc:s},d="wrapper";function u(e){let{components:n,...l}=e;return(0,r.kt)(d,(0,a.Z)({},m,l,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"how-seldon-core-works"},"How Seldon Core works?"),(0,r.kt)("p",null,"Seldon Core\uac00 API \uc11c\ubc84\ub97c \uc0dd\uc131\ud558\ub294 \uacfc\uc815\uc744 \uc694\uc57d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"seldon-fields-0.png",src:t(658).Z,width:"2784",height:"1000"})),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"initContainer\ub294 \ubaa8\ub378 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud544\uc694\ud55c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"\ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ubaa8\ub378\uc744 container\ub85c \uc804\ub2ec\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"container\ub294 \uc804\ub2ec\ubc1b\uc740 \ubaa8\ub378\uc744 \uac10\uc2fc API \uc11c\ubc84\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"\uc0dd\uc131\ub41c API \uc11c\ubc84 \uc8fc\uc18c\ub85c API\ub97c \uc694\uccad\ud558\uc5ec \ubaa8\ub378\uc758 \ucd94\ub860 \uac12\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("h2",{id:"seldondeployment-spec"},"SeldonDeployment Spec"),(0,r.kt)("p",null,"Seldon Core\ub97c \uc0ac\uc6a9\ud560 \ub54c, \uc8fc\ub85c \uc0ac\uc6a9\ud558\uac8c \ub418\ub294 \ucee4\uc2a4\ud140 \ub9ac\uc18c\uc2a4\uc778 SeldonDeployment\ub97c \uc815\uc758\ud558\ub294 yaml \ud30c\uc77c\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n\n containers:\n - name: model\n image: seldonio/sklearnserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n\n')),(0,r.kt)("p",null,"SeldonDeployment spec \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"name")," \uacfc ",(0,r.kt)("inlineCode",{parentName:"p"},"predictors")," \ud544\ub4dc\ub294 required \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc5d0\uc11c pod\uc758 \uad6c\ubd84\uc744 \uc704\ud55c \uc774\ub984\uc73c\ub85c \ud06c\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"predictors"),"\ub294 \ud55c \uac1c\ub85c \uad6c\uc131\ub41c array\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"graph")," \uac00 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc5ec\uae30\uc11c\ub3c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 pod\uc758 \uad6c\ubd84\uc744 \uc704\ud55c \uc774\ub984\uc73c\ub85c \ud06c\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. "),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"graph"),"\uc5d0\uc11c \uc815\uc758\ud574\uc57c \ud560 \ud544\ub4dc\ub4e4\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"componentspecs"},"componentSpecs"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \ub294 \ud558\ub098\ub85c \uad6c\uc131\ub41c array\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"spec")," \ud0a4\uac12\uc774 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"spec")," \uc5d0\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"volumes"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"initContainers"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"containers")," \uc758 \ud544\ub4dc\uac00 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"volumes"},"volumes"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumes:\n- name: model-provision-location\n emptyDir: {}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"volumes"),"\uc740 initContainer\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\ub294 \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uae30 \uc704\ud55c \uacf5\uac04\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","array\ub85c \uc785\ub825\uc744 \ubc1b\uc73c\uba70 array\uc758 \uad6c\uc131 \uc694\uc18c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uacfc ",(0,r.kt)("inlineCode",{parentName:"p"},"emptyDir")," \uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \uac12\ub4e4\uc740 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uace0 \uc62e\uae38 \ub54c \ud55c\ubc88 \uc0ac\uc6a9\ub418\ubbc0\ub85c \ud06c\uac8c \uc218\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"initcontainer"},"initContainer"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'- name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n')),(0,r.kt)("p",null,"initContainer\ub294 API\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c \uc0ac\uc6a9\ub418\ub294 \ud544\ub4dc\ub4e4\uc740 \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ub54c \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \uc815\ud574\uc90d\ub2c8\ub2e4."),(0,r.kt)("p",null,"initContainer\uc758 \uac12\uc740 n\uac1c\uc758 array\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc73c\uba70 \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub378\ub9c8\ub2e4 \uac01\uac01 \uc9c0\uc815\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"name"},"name"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc758 pod\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub514\ubc84\uae45\uc744 \uc704\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"{model_name}-initializer")," \ub85c \uc0ac\uc6a9\ud558\uae38 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"image"},"image"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"image")," \ub294 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uae30 \uc704\ud574 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0 \uc774\ub984\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","seldon core\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \uc774\ubbf8\uc9c0\ub294 \ud06c\uac8c \ub450 \uac00\uc9c0\uc785\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"gcr.io/kfserving/storage-initializer:v0.4.0"),(0,r.kt)("li",{parentName:"ul"},"seldonio/rclone-storage-initializer:1.13.0-dev")),(0,r.kt)("p",null,"\uac01\uac01\uc758 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uc744 \ucc38\uace0 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.seldon.io/projects/seldon-core/en/latest/servers/kfserving-storage-initializer.html"},"kfserving")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core/tree/master/components/rclone-storage-initializer"},"rclone"))),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c\ub294 kfserving\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"args"},"args"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n')),(0,r.kt)("p",null,"gcr.io/kfserving/storage-initializer:v0.4.0 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\uac00 \uc2e4\ud589(",(0,r.kt)("inlineCode",{parentName:"p"},"run"),")\ub420 \ub54c \uc785\ub825\ubc1b\ub294 argument\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","array\ub85c \uad6c\uc131\ub418\uba70 \uccab \ubc88\uc9f8 array\uc758 \uac12\uc740 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ubaa8\ub378\uc758 \uc8fc\uc18c\ub97c \uc801\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub450 \ubc88\uc9f8 array\uc758 \uac12\uc740 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc8fc\uc18c\ub97c \uc801\uc2b5\ub2c8\ub2e4. (seldon core\uc5d0\uc11c\ub294 \uc8fc\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"/mnt/models"),"\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.)"),(0,r.kt)("h3",{id:"volumemounts"},"volumeMounts"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"volumneMounts"),"\ub294 volumes\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"/mnt/models"),"\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc5d0\uc11c \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d \ubcfc\ub968\uc744 \ubd99\uc5ec\uc8fc\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/storage/volumes/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 Volume"),"\uc744 \ucc38\uc870 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"container"},"container"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"containers:\n- name: model\n image: seldonio/sklearnserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n")),(0,r.kt)("p",null,"container\ub294 \uc2e4\uc81c\ub85c \ubaa8\ub378\uc774 API \ud615\uc2dd\uc73c\ub85c \uc2e4\ud589\ub420 \ub54c\uc758 \uc124\uc815\uc744 \uc815\uc758\ud558\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4. "),(0,r.kt)("h4",{id:"name-1"},"name"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc758 pod\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub378\uc758 \uc774\ub984\uc744 \uc801\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"image-1"},"image"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"image")," \ub294 \ubaa8\ub378\uc744 API\ub85c \ub9cc\ub4dc\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ubbf8\uc9c0\uc5d0\ub294 \ubaa8\ub378\uc774 \ub85c\ub4dc\ub420 \ub54c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uc774 \ubaa8\ub450 \uc124\uce58\ub418\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"Seldon Core\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \uacf5\uc2dd \uc774\ubbf8\uc9c0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"seldonio/sklearnserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/mlflowserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/xgboostserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/tfserving")),(0,r.kt)("h4",{id:"volumemounts-1"},"volumeMounts"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumeMounts:\n- mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n")),(0,r.kt)("p",null,"initContainer\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ub370\uc774\ud130\uac00 \uc788\ub294 \uacbd\ub85c\ub97c \uc54c\ub824\uc8fc\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub54c \ubaa8\ub378\uc774 \uc218\uc815\ub418\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"readOnly: true"),"\ub3c4 \uac19\uc774 \uc8fc\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"securitycontext"},"securityContext"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n")),(0,r.kt)("p",null,"\ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud560 \ub54c pod\uc774 \uad8c\ud55c\uc774 \uc5c6\uc5b4\uc11c \ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc218\ud589\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \uc704\ud574\uc11c root \uad8c\ud55c\uc744 \ubd80\uc5ec\ud569\ub2c8\ub2e4. (\ub2e4\ub9cc \uc774 \uc791\uc5c5\uc740 \uc2e4\uc81c \uc11c\ube59 \uc2dc \ubcf4\uc548 \ubb38\uc81c\uac00 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.)"),(0,r.kt)("h2",{id:"graph"},"graph"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n')),(0,r.kt)("p",null,"\ubaa8\ub378\uc774 \ub3d9\uc791\ud558\ub294 \uc21c\uc11c\ub97c \uc815\uc758\ud55c \ud544\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"name-2"},"name"),(0,r.kt)("p",null,"\ubaa8\ub378 \uadf8\ub798\ud504\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. container\uc5d0\uc11c \uc815\uc758\ub41c \uc774\ub984\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"type"},"type"),(0,r.kt)("p",null,"type\uc740 \ud06c\uac8c 4\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"TRANSFORMER"),(0,r.kt)("li",{parentName:"ol"},"MODEL"),(0,r.kt)("li",{parentName:"ol"},"OUTPUT_TRANSFORMER"),(0,r.kt)("li",{parentName:"ol"},"ROUTER")),(0,r.kt)("p",null,"\uac01 type\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.seldon.io/projects/seldon-core/en/latest/examples/graph-metadata.html"},"Seldon Core Complex Graphs Metadata Example"),"\uc744 \ucc38\uc870 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"parameters"},"parameters"),(0,r.kt)("p",null,"class init \uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \uac12\ub4e4\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","sklearnserver\uc5d0\uc11c \ud544\uc694\ud55c \uac12\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/SeldonIO/seldon-core/blob/master/servers/sklearnserver/sklearnserver/SKLearnServer.py"},"\ub2e4\uc74c \ud30c\uc77c"),"\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'class SKLearnServer(SeldonComponent):\n def __init__(self, model_uri: str = None, method: str = "predict_proba"):\n')),(0,r.kt)("p",null,"\ucf54\ub4dc\ub97c \ubcf4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"model_uri"),"\uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"method"),"\ub97c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"children"},"children"),(0,r.kt)("p",null,"\uc21c\uc11c\ub3c4\ub97c \uc791\uc131\ud560 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."))}u.isMDXComponent=!0},658:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/seldon-fields-0-7794367220b87e1aba920b6aad6f9bf8.png"}}]); \ No newline at end of file diff --git a/assets/js/91e4f63c.e2603379.js b/assets/js/91e4f63c.e2603379.js new file mode 100644 index 00000000..0d57e8c8 --- /dev/null +++ b/assets/js/91e4f63c.e2603379.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[822],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),s=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},m=function(e){var n=s(e.components);return a.createElement(p.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,l=e.originalType,p=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),d=s(t),c=r,k=d["".concat(p,".").concat(c)]||d[c]||u[c]||l;return t?a.createElement(k,o(o({ref:n},m),{},{components:t})):a.createElement(k,o({ref:n},m))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=t.length,o=new Array(l);o[0]=c;var i={};for(var p in n)hasOwnProperty.call(n,p)&&(i[p]=n[p]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var s=2;s{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var a=t(7462),r=(t(7294),t(3905));const l={title:"4. Seldon Fields",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},o=void 0,i={unversionedId:"api-deployment/seldon-fields",id:"version-1.0/api-deployment/seldon-fields",title:"4. Seldon Fields",description:"",source:"@site/versioned_docs/version-1.0/api-deployment/seldon-fields.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-fields",permalink:"/docs/1.0/api-deployment/seldon-fields",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/api-deployment/seldon-fields.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Seldon Fields",description:"",sidebar_position:4,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"3. Seldon Monitoring",permalink:"/docs/1.0/api-deployment/seldon-pg"},next:{title:"5. Model from MLflow",permalink:"/docs/1.0/api-deployment/seldon-mlflow"}},p={},s=[{value:"How Seldon Core works?",id:"how-seldon-core-works",level:2},{value:"SeldonDeployment Spec",id:"seldondeployment-spec",level:2},{value:"componentSpecs",id:"componentspecs",level:2},{value:"volumes",id:"volumes",level:3},{value:"initContainer",id:"initcontainer",level:3},{value:"name",id:"name",level:4},{value:"image",id:"image",level:4},{value:"args",id:"args",level:4},{value:"volumeMounts",id:"volumemounts",level:3},{value:"container",id:"container",level:3},{value:"name",id:"name-1",level:4},{value:"image",id:"image-1",level:4},{value:"volumeMounts",id:"volumemounts-1",level:4},{value:"securityContext",id:"securitycontext",level:4},{value:"graph",id:"graph",level:2},{value:"name",id:"name-2",level:3},{value:"type",id:"type",level:3},{value:"parameters",id:"parameters",level:3},{value:"children",id:"children",level:3}],m={toc:s},d="wrapper";function u(e){let{components:n,...l}=e;return(0,r.kt)(d,(0,a.Z)({},m,l,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"how-seldon-core-works"},"How Seldon Core works?"),(0,r.kt)("p",null,"Seldon Core\uac00 API \uc11c\ubc84\ub97c \uc0dd\uc131\ud558\ub294 \uacfc\uc815\uc744 \uc694\uc57d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"seldon-fields-0.png",src:t(658).Z,width:"2784",height:"1000"})),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"initContainer\ub294 \ubaa8\ub378 \uc800\uc7a5\uc18c\uc5d0\uc11c \ud544\uc694\ud55c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"\ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ubaa8\ub378\uc744 container\ub85c \uc804\ub2ec\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"container\ub294 \uc804\ub2ec\ubc1b\uc740 \ubaa8\ub378\uc744 \uac10\uc2fc API \uc11c\ubc84\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ol"},"\uc0dd\uc131\ub41c API \uc11c\ubc84 \uc8fc\uc18c\ub85c API\ub97c \uc694\uccad\ud558\uc5ec \ubaa8\ub378\uc758 \ucd94\ub860 \uac12\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,r.kt)("h2",{id:"seldondeployment-spec"},"SeldonDeployment Spec"),(0,r.kt)("p",null,"Seldon Core\ub97c \uc0ac\uc6a9\ud560 \ub54c, \uc8fc\ub85c \uc0ac\uc6a9\ud558\uac8c \ub418\ub294 \ucee4\uc2a4\ud140 \ub9ac\uc18c\uc2a4\uc778 SeldonDeployment\ub97c \uc815\uc758\ud558\ub294 yaml \ud30c\uc77c\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n\n containers:\n - name: model\n image: seldonio/sklearnserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n\n')),(0,r.kt)("p",null,"SeldonDeployment spec \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"name")," \uacfc ",(0,r.kt)("inlineCode",{parentName:"p"},"predictors")," \ud544\ub4dc\ub294 required \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc5d0\uc11c pod\uc758 \uad6c\ubd84\uc744 \uc704\ud55c \uc774\ub984\uc73c\ub85c \ud06c\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"predictors"),"\ub294 \ud55c \uac1c\ub85c \uad6c\uc131\ub41c array\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"graph")," \uac00 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc5ec\uae30\uc11c\ub3c4 ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 pod\uc758 \uad6c\ubd84\uc744 \uc704\ud55c \uc774\ub984\uc73c\ub85c \ud06c\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. "),(0,r.kt)("p",null,"\uc774\uc81c ",(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"graph"),"\uc5d0\uc11c \uc815\uc758\ud574\uc57c \ud560 \ud544\ub4dc\ub4e4\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"componentspecs"},"componentSpecs"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"componentSpecs")," \ub294 \ud558\ub098\ub85c \uad6c\uc131\ub41c array\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"spec")," \ud0a4\uac12\uc774 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("inlineCode",{parentName:"p"},"spec")," \uc5d0\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"volumes"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"initContainers"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"containers")," \uc758 \ud544\ub4dc\uac00 \uc815\uc758\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"volumes"},"volumes"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumes:\n- name: model-provision-location\n emptyDir: {}\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"volumes"),"\uc740 initContainer\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\ub294 \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uae30 \uc704\ud55c \uacf5\uac04\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","array\ub85c \uc785\ub825\uc744 \ubc1b\uc73c\uba70 array\uc758 \uad6c\uc131 \uc694\uc18c\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uacfc ",(0,r.kt)("inlineCode",{parentName:"p"},"emptyDir")," \uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \uac12\ub4e4\uc740 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uace0 \uc62e\uae38 \ub54c \ud55c\ubc88 \uc0ac\uc6a9\ub418\ubbc0\ub85c \ud06c\uac8c \uc218\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"initcontainer"},"initContainer"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'- name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n')),(0,r.kt)("p",null,"initContainer\ub294 API\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c \uc0ac\uc6a9\ub418\ub294 \ud544\ub4dc\ub4e4\uc740 \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ub54c \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \uc815\ud574\uc90d\ub2c8\ub2e4."),(0,r.kt)("p",null,"initContainer\uc758 \uac12\uc740 n\uac1c\uc758 array\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc73c\uba70 \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub378\ub9c8\ub2e4 \uac01\uac01 \uc9c0\uc815\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"name"},"name"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc758 pod\uc758 \uc774\ub984\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub514\ubc84\uae45\uc744 \uc704\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"{model_name}-initializer")," \ub85c \uc0ac\uc6a9\ud558\uae38 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"image"},"image"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"image")," \ub294 \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uae30 \uc704\ud574 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0 \uc774\ub984\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","seldon core\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \uc774\ubbf8\uc9c0\ub294 \ud06c\uac8c \ub450 \uac00\uc9c0\uc785\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"gcr.io/kfserving/storage-initializer:v0.4.0"),(0,r.kt)("li",{parentName:"ul"},"seldonio/rclone-storage-initializer:1.13.0-dev")),(0,r.kt)("p",null,"\uac01\uac01\uc758 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uc744 \ucc38\uace0 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.seldon.io/projects/seldon-core/en/latest/servers/kfserving-storage-initializer.html"},"kfserving")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core/tree/master/components/rclone-storage-initializer"},"rclone"))),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c\ub294 kfserving\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"args"},"args"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'args:\n - "gs://seldon-models/v1.12.0-dev/sklearn/iris"\n - "/mnt/models"\n')),(0,r.kt)("p",null,"gcr.io/kfserving/storage-initializer:v0.4.0 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\uac00 \uc2e4\ud589(",(0,r.kt)("inlineCode",{parentName:"p"},"run"),")\ub420 \ub54c \uc785\ub825\ubc1b\ub294 argument\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","array\ub85c \uad6c\uc131\ub418\uba70 \uccab \ubc88\uc9f8 array\uc758 \uac12\uc740 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ubaa8\ub378\uc758 \uc8fc\uc18c\ub97c \uc801\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub450 \ubc88\uc9f8 array\uc758 \uac12\uc740 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc8fc\uc18c\ub97c \uc801\uc2b5\ub2c8\ub2e4. (seldon core\uc5d0\uc11c\ub294 \uc8fc\ub85c ",(0,r.kt)("inlineCode",{parentName:"p"},"/mnt/models"),"\uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.)"),(0,r.kt)("h3",{id:"volumemounts"},"volumeMounts"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"volumneMounts"),"\ub294 volumes\uc5d0\uc11c \uc124\uba85\ud55c \uac83\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"/mnt/models"),"\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc5d0\uc11c \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d \ubcfc\ub968\uc744 \ubd99\uc5ec\uc8fc\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/storage/volumes/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 Volume"),"\uc744 \ucc38\uc870 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"container"},"container"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"containers:\n- name: model\n image: seldonio/sklearnserver:1.8.0-dev\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n")),(0,r.kt)("p",null,"container\ub294 \uc2e4\uc81c\ub85c \ubaa8\ub378\uc774 API \ud615\uc2dd\uc73c\ub85c \uc2e4\ud589\ub420 \ub54c\uc758 \uc124\uc815\uc744 \uc815\uc758\ud558\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4. "),(0,r.kt)("h4",{id:"name-1"},"name"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"name"),"\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0c1\uc758 pod\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. \uc0ac\uc6a9\ud558\ub294 \ubaa8\ub378\uc758 \uc774\ub984\uc744 \uc801\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"image-1"},"image"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"image")," \ub294 \ubaa8\ub378\uc744 API\ub85c \ub9cc\ub4dc\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ubbf8\uc9c0\uc5d0\ub294 \ubaa8\ub378\uc774 \ub85c\ub4dc\ub420 \ub54c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uc774 \ubaa8\ub450 \uc124\uce58\ub418\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"Seldon Core\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \uacf5\uc2dd \uc774\ubbf8\uc9c0\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"seldonio/sklearnserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/mlflowserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/xgboostserver"),(0,r.kt)("li",{parentName:"ul"},"seldonio/tfserving")),(0,r.kt)("h4",{id:"volumemounts-1"},"volumeMounts"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"volumeMounts:\n- mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n")),(0,r.kt)("p",null,"initContainer\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc740 \ub370\uc774\ud130\uac00 \uc788\ub294 \uacbd\ub85c\ub97c \uc54c\ub824\uc8fc\ub294 \ud544\ub4dc\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub54c \ubaa8\ub378\uc774 \uc218\uc815\ub418\ub294 \uac83\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 ",(0,r.kt)("inlineCode",{parentName:"p"},"readOnly: true"),"\ub3c4 \uac19\uc774 \uc8fc\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h4",{id:"securitycontext"},"securityContext"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n")),(0,r.kt)("p",null,"\ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud560 \ub54c pod\uc774 \uad8c\ud55c\uc774 \uc5c6\uc5b4\uc11c \ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc218\ud589\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \uc704\ud574\uc11c root \uad8c\ud55c\uc744 \ubd80\uc5ec\ud569\ub2c8\ub2e4. (\ub2e4\ub9cc \uc774 \uc791\uc5c5\uc740 \uc2e4\uc81c \uc11c\ube59 \uc2dc \ubcf4\uc548 \ubb38\uc81c\uac00 \uc0dd\uae38 \uc218 \uc788\uc2b5\ub2c8\ub2e4.)"),(0,r.kt)("h2",{id:"graph"},"graph"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n')),(0,r.kt)("p",null,"\ubaa8\ub378\uc774 \ub3d9\uc791\ud558\ub294 \uc21c\uc11c\ub97c \uc815\uc758\ud55c \ud544\ub4dc\uc785\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"name-2"},"name"),(0,r.kt)("p",null,"\ubaa8\ub378 \uadf8\ub798\ud504\uc758 \uc774\ub984\uc785\ub2c8\ub2e4. container\uc5d0\uc11c \uc815\uc758\ub41c \uc774\ub984\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"type"},"type"),(0,r.kt)("p",null,"type\uc740 \ud06c\uac8c 4\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"TRANSFORMER"),(0,r.kt)("li",{parentName:"ol"},"MODEL"),(0,r.kt)("li",{parentName:"ol"},"OUTPUT_TRANSFORMER"),(0,r.kt)("li",{parentName:"ol"},"ROUTER")),(0,r.kt)("p",null,"\uac01 type\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.seldon.io/projects/seldon-core/en/latest/examples/graph-metadata.html"},"Seldon Core Complex Graphs Metadata Example"),"\uc744 \ucc38\uc870 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"parameters"},"parameters"),(0,r.kt)("p",null,"class init \uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \uac12\ub4e4\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","sklearnserver\uc5d0\uc11c \ud544\uc694\ud55c \uac12\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/SeldonIO/seldon-core/blob/master/servers/sklearnserver/sklearnserver/SKLearnServer.py"},"\ub2e4\uc74c \ud30c\uc77c"),"\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'class SKLearnServer(SeldonComponent):\n def __init__(self, model_uri: str = None, method: str = "predict_proba"):\n')),(0,r.kt)("p",null,"\ucf54\ub4dc\ub97c \ubcf4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"model_uri"),"\uc640 ",(0,r.kt)("inlineCode",{parentName:"p"},"method"),"\ub97c \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"children"},"children"),(0,r.kt)("p",null,"\uc21c\uc11c\ub3c4\ub97c \uc791\uc131\ud560 \ub54c \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c \ud398\uc774\uc9c0\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."))}u.isMDXComponent=!0},658:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/seldon-fields-0-7794367220b87e1aba920b6aad6f9bf8.png"}}]); \ No newline at end of file diff --git a/assets/js/92059b0a.886b8410.js b/assets/js/92059b0a.886b8410.js deleted file mode 100644 index 416d1034..00000000 --- a/assets/js/92059b0a.886b8410.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5658],{3905:(n,e,r)=>{r.d(e,{Zo:()=>_,kt:()=>b});var t=r(7294);function p(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function a(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,t)}return r}function u(n){for(var e=1;e=0||(p[r]=n[r]);return p}(n,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(p[r]=n[r])}return p}var s=t.createContext({}),m=function(n){var e=t.useContext(s),r=e;return n&&(r="function"==typeof n?n(e):u(u({},e),n)),r},_=function(n){var e=m(n.components);return t.createElement(s.Provider,{value:e},n.children)},o="mdxType",l={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(n,e){var r=n.components,p=n.mdxType,a=n.originalType,s=n.parentName,_=i(n,["components","mdxType","originalType","parentName"]),o=m(r),d=p,b=o["".concat(s,".").concat(d)]||o[d]||l[d]||a;return r?t.createElement(b,u(u({ref:e},_),{},{components:r})):t.createElement(b,u({ref:e},_))}));function b(n,e){var r=arguments,p=e&&e.mdxType;if("string"==typeof n||p){var a=r.length,u=new Array(a);u[0]=d;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=n,i[o]="string"==typeof n?n:p,u[1]=i;for(var m=2;m{r.r(e),r.d(e,{assets:()=>s,contentTitle:()=>u,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>m});var t=r(7462),p=(r(7294),r(3905));const a={title:"10. Pipeline - Setting",description:"",sidebar_position:10,contributors:["Jongseob Jeon"]},u=void 0,i={unversionedId:"kubeflow/advanced-pipeline",id:"kubeflow/advanced-pipeline",title:"10. Pipeline - Setting",description:"",source:"@site/docs/kubeflow/advanced-pipeline.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-pipeline",permalink:"/docs/kubeflow/advanced-pipeline",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-pipeline.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:10,frontMatter:{title:"10. Pipeline - Setting",description:"",sidebar_position:10,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"9. Component - Environment",permalink:"/docs/kubeflow/advanced-environment"},next:{title:"11. Pipeline - Run Result",permalink:"/docs/kubeflow/advanced-run"}},s={},m=[{value:"Pipeline Setting",id:"pipeline-setting",level:2},{value:"Display Name",id:"display-name",level:2},{value:"set_display_name",id:"set_display_name",level:3},{value:"UI in Kubeflow",id:"ui-in-kubeflow",level:3},{value:"Resources",id:"resources",level:2},{value:"GPU",id:"gpu",level:3},{value:"CPU",id:"cpu",level:3},{value:"Memory",id:"memory",level:3}],_={toc:m},o="wrapper";function l(n){let{components:e,...a}=n;return(0,p.kt)(o,(0,t.Z)({},_,a,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"pipeline-setting"},"Pipeline Setting"),(0,p.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc124\uc815\ud560 \uc218 \uc788\ub294 \uac12\ub4e4\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"display-name"},"Display Name"),(0,p.kt)("p",null,"\uc0dd\uc131\ub41c \ud30c\uc774\ud504\ub77c\uc778 \ub0b4\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub450 \uac1c\uc758 \uc774\ub984\uc744 \uac16\uc2b5\ub2c8\ub2e4."),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},"task_name: \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud560 \ub54c \uc791\uc131\ud55c \ud568\uc218 \uc774\ub984"),(0,p.kt)("li",{parentName:"ul"},"display_name: kubeflow UI\uc0c1\uc5d0 \ubcf4\uc774\ub294 \uc774\ub984")),(0,p.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uacbd\uc6b0 \ub450 \ucef4\ud3ec\ub10c\ud2b8 \ubaa8\ub450 Print and return number\ub85c \uc124\uc815\ub418\uc5b4 \uc788\uc5b4\uc11c \uc5b4\ub5a4 \ucef4\ud3ec\ub10c\ud2b8\uac00 1\ubc88\uc778\uc9c0 2\ubc88\uc778\uc9c0 \ud655\uc778\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"run-7",src:r(1816).Z,width:"3408",height:"2156"})),(0,p.kt)("h3",{id:"set_display_name"},"set_display_name"),(0,p.kt)("p",null,"\uc774\ub97c \uc704\ud55c \uac83\uc774 \ubc14\ub85c display_name \uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc124\uc815\ud558\ub294 \ubc29\ubc95\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,p.kt)("inlineCode",{parentName:"p"},"set_display_name")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp.set_display_name"},"attribute"),"\ub97c \uc774\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \ub098\uc628 ",(0,p.kt)("inlineCode",{parentName:"p"},"example_pipeline.yaml"),"\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("details",null,(0,p.kt)("summary",null,"example_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: example-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9, pipelines.kubeflow.org/pipeline_compilation_time: \'2021-12-09T18:11:43.193190\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "number_1", "type":\n "Integer"}, {"name": "number_2", "type": "Integer"}], "name": "example_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9}\nspec:\n entrypoint: example-pipeline\n templates:\n - name: example-pipeline\n inputs:\n parameters:\n - {name: number_1}\n - {name: number_2}\n dag:\n tasks:\n - name: print-and-return-number\n template: print-and-return-number\n arguments:\n parameters:\n - {name: number_1, value: \'{{inputs.parameters.number_1}}\'}\n - name: print-and-return-number-2\n template: print-and-return-number-2\n arguments:\n parameters:\n - {name: number_2, value: \'{{inputs.parameters.number_2}}\'}\n - name: sum-and-print-numbers\n template: sum-and-print-numbers\n dependencies: [print-and-return-number, print-and-return-number-2]\n arguments:\n parameters:\n - {name: print-and-return-number-2-Output, value: \'{{tasks.print-and-return-number-2.outputs.parameters.print-and-return-number-2-Output}}\'}\n - {name: print-and-return-number-Output, value: \'{{tasks.print-and-return-number.outputs.parameters.print-and-return-number-Output}}\'}\n - name: print-and-return-number\n container:\n args: [--number, \'{{inputs.parameters.number_1}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(\n str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_1}\n outputs:\n parameters:\n - name: print-and-return-number-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-Output, path: /tmp/outputs/Output/data}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is number 1, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number", {"inputValue": "number"}, "----output-paths",\n {"outputPath": "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(\\n str(int_value),\n str(type(int_value))))\\n return str(int_value)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Print and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_1}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n - name: print-and-return-number-2\n container:\n args: [--number, \'{{inputs.parameters.number_2}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(\n str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_2}\n outputs:\n parameters:\n - name: print-and-return-number-2-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-2-Output, path: /tmp/outputs/Output/data}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is number 2, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number", {"inputValue": "number"}, "----output-paths",\n {"outputPath": "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(\\n str(int_value),\n str(type(int_value))))\\n return str(int_value)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Print and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_2}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: print-and-return-number-2-Output}\n - {name: print-and-return-number-Output}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is sum of number\n 1 and number 2, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number-1", {"inputValue": "number_1"}, "--number-2",\n {"inputValue": "number_2"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def sum_and_print_numbers(number_1, number_2):\\n print(number_1 + number_2)\\n\\nimport\n argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Sum and print numbers\'\',\n description=\'\'\'\')\\n_parser.add_argument(\\"--number-1\\", dest=\\"number_1\\",\n type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--number-2\\",\n dest=\\"number_2\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = sum_and_print_numbers(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number_1", "type": "Integer"},\n {"name": "number_2", "type": "Integer"}], "name": "Sum and print numbers"}\',\n pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number_1":\n "{{inputs.parameters.print-and-return-number-Output}}", "number_2": "{{inputs.parameters.print-and-return-number-2-Output}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n arguments:\n parameters:\n - {name: number_1}\n - {name: number_2}\n serviceAccountName: pipeline-runner\n')))),(0,p.kt)("p",null,"\uc774 \uc804\uc758 \ud30c\uc77c\uacfc \ube44\uad50\ud558\uba74 ",(0,p.kt)("inlineCode",{parentName:"p"},"pipelines.kubeflow.org/task_display_name")," key\uac00 \uc0c8\ub85c \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"ui-in-kubeflow"},"UI in Kubeflow"),(0,p.kt)("p",null,"\uc704\uc5d0\uc11c \ub9cc\ub4e0 \ud30c\uc77c\uc744 \uc774\uc6a9\ud574 \uc774\uc804\uc5d0 \uc0dd\uc131\ud55c ",(0,p.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-pipeline-upload#upload-pipeline-version"},"\ud30c\uc774\ud504\ub77c\uc778"),"\uc758 \ubc84\uc804\uc744 \uc62c\ub9ac\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"adv-pipeline-0.png",src:r(9072).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"\uadf8\ub7ec\uba74 \uc704\uc640 \uac19\uc774 \uc124\uc815\ud55c \uc774\ub984\uc774 \ub178\ucd9c\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"resources"},"Resources"),(0,p.kt)("h3",{id:"gpu"},"GPU"),(0,p.kt)("p",null,"\ud2b9\ubcc4\ud55c \uc124\uc815\uc774 \uc5c6\ub2e4\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud30c\ub4dc(pod)\ub85c \uc2e4\ud589\ud560 \ub54c, \uae30\ubcf8 \ub9ac\uc18c\uc2a4 \uc2a4\ud399\uc73c\ub85c \uc2e4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d GPU\ub97c \uc0ac\uc6a9\ud574 \ubaa8\ub378\uc744 \ud559\uc2b5\ud574\uc57c \ud560 \ub54c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc0c1\uc5d0\uc11c GPU\ub97c \ud560\ub2f9\ubc1b\uc9c0 \ubabb\ud574 \uc81c\ub300\ub85c \ud559\uc2b5\uc774 \uc774\ub8e8\uc5b4\uc9c0\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \uc704\ud574 ",(0,p.kt)("inlineCode",{parentName:"p"},"set_gpu_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.UserContainer.set_gpu_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1)\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc704\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \uc0dd\uc131\ub41c \ud30c\uc77c\uc5d0\uc11c ",(0,p.kt)("inlineCode",{parentName:"p"},"sum-and-print-numbers"),"\ub97c \uc790\uc138\ud788 \ubcf4\uba74 resources\uc5d0 ",(0,p.kt)("inlineCode",{parentName:"p"},"{nvidia.com/gpu: 1}")," \ub3c4 \ucd94\uac00\ub41c \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub97c \ud1b5\ud574 GPU\ub97c \ud560\ub2f9\ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},' - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n resources:\n limits: {nvidia.com/gpu: 1}\n')),(0,p.kt)("h3",{id:"cpu"},"CPU"),(0,p.kt)("p",null,"cpu\uc758 \uac1c\uc218\ub97c \uc815\ud558\uae30 \uc704\ud574\uc11c \uc774\uc6a9\ud558\ub294 \ud568\uc218\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},".set_cpu_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.Sidecar.set_cpu_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","gpu\uc640\ub294 \ub2e4\ub978 \uc810\uc740 int\uac00 \uc544\ub2cc string\uc73c\ub85c \uc785\ub825\ud574\uc57c \ud55c\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1).set_cpu_limit("16")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\ubc14\ub010 \ubd80\ubd84\ub9cc \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"}," resources:\n limits: {nvidia.com/gpu: 1, cpu: '16'}\n")),(0,p.kt)("h3",{id:"memory"},"Memory"),(0,p.kt)("p",null,"\uba54\ubaa8\ub9ac\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},".set_memory_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.Sidecar.set_memory_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1).set_memory_limit("1G")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n\n')),(0,p.kt)("p",null,"\ubc14\ub010 \ubd80\ubd84\ub9cc \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"}," resources:\n limits: {nvidia.com/gpu: 1, memory: 1G}\n")))}l.isMDXComponent=!0},9072:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/adv-pipeline-0-16dd5e9fed2f2d5c4a1d1b683a7a144d.png"},1816:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/run-7-53ba486fe934b320289bf98ddbf9a4b6.png"}}]); \ No newline at end of file diff --git a/assets/js/92059b0a.a67f6671.js b/assets/js/92059b0a.a67f6671.js new file mode 100644 index 00000000..693c7eb6 --- /dev/null +++ b/assets/js/92059b0a.a67f6671.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5658],{3905:(n,e,r)=>{r.d(e,{Zo:()=>_,kt:()=>b});var t=r(7294);function p(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function a(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,t)}return r}function u(n){for(var e=1;e=0||(p[r]=n[r]);return p}(n,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(p[r]=n[r])}return p}var s=t.createContext({}),m=function(n){var e=t.useContext(s),r=e;return n&&(r="function"==typeof n?n(e):u(u({},e),n)),r},_=function(n){var e=m(n.components);return t.createElement(s.Provider,{value:e},n.children)},o="mdxType",l={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(n,e){var r=n.components,p=n.mdxType,a=n.originalType,s=n.parentName,_=i(n,["components","mdxType","originalType","parentName"]),o=m(r),d=p,b=o["".concat(s,".").concat(d)]||o[d]||l[d]||a;return r?t.createElement(b,u(u({ref:e},_),{},{components:r})):t.createElement(b,u({ref:e},_))}));function b(n,e){var r=arguments,p=e&&e.mdxType;if("string"==typeof n||p){var a=r.length,u=new Array(a);u[0]=d;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=n,i[o]="string"==typeof n?n:p,u[1]=i;for(var m=2;m{r.r(e),r.d(e,{assets:()=>s,contentTitle:()=>u,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>m});var t=r(7462),p=(r(7294),r(3905));const a={title:"10. Pipeline - Setting",description:"",sidebar_position:10,contributors:["Jongseob Jeon"]},u=void 0,i={unversionedId:"kubeflow/advanced-pipeline",id:"kubeflow/advanced-pipeline",title:"10. Pipeline - Setting",description:"",source:"@site/docs/kubeflow/advanced-pipeline.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-pipeline",permalink:"/docs/kubeflow/advanced-pipeline",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-pipeline.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:10,frontMatter:{title:"10. Pipeline - Setting",description:"",sidebar_position:10,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"9. Component - Environment",permalink:"/docs/kubeflow/advanced-environment"},next:{title:"11. Pipeline - Run Result",permalink:"/docs/kubeflow/advanced-run"}},s={},m=[{value:"Pipeline Setting",id:"pipeline-setting",level:2},{value:"Display Name",id:"display-name",level:2},{value:"set_display_name",id:"set_display_name",level:3},{value:"UI in Kubeflow",id:"ui-in-kubeflow",level:3},{value:"Resources",id:"resources",level:2},{value:"GPU",id:"gpu",level:3},{value:"CPU",id:"cpu",level:3},{value:"Memory",id:"memory",level:3}],_={toc:m},o="wrapper";function l(n){let{components:e,...a}=n;return(0,p.kt)(o,(0,t.Z)({},_,a,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"pipeline-setting"},"Pipeline Setting"),(0,p.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc124\uc815\ud560 \uc218 \uc788\ub294 \uac12\ub4e4\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"display-name"},"Display Name"),(0,p.kt)("p",null,"\uc0dd\uc131\ub41c \ud30c\uc774\ud504\ub77c\uc778 \ub0b4\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub450 \uac1c\uc758 \uc774\ub984\uc744 \uac16\uc2b5\ub2c8\ub2e4."),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},"task_name: \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud560 \ub54c \uc791\uc131\ud55c \ud568\uc218 \uc774\ub984"),(0,p.kt)("li",{parentName:"ul"},"display_name: kubeflow UI\uc0c1\uc5d0 \ubcf4\uc774\ub294 \uc774\ub984")),(0,p.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 \uacbd\uc6b0 \ub450 \ucef4\ud3ec\ub10c\ud2b8 \ubaa8\ub450 Print and return number\ub85c \uc124\uc815\ub418\uc5b4 \uc788\uc5b4\uc11c \uc5b4\ub5a4 \ucef4\ud3ec\ub10c\ud2b8\uac00 1\ubc88\uc778\uc9c0 2\ubc88\uc778\uc9c0 \ud655\uc778\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"run-7",src:r(1816).Z,width:"3408",height:"2156"})),(0,p.kt)("h3",{id:"set_display_name"},"set_display_name"),(0,p.kt)("p",null,"\uc774\ub97c \uc704\ud55c \uac83\uc774 \ubc14\ub85c display_name \uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc124\uc815\ud558\ub294 \ubc29\ubc95\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,p.kt)("inlineCode",{parentName:"p"},"set_display_name")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html#kfp.dsl.ContainerOp.set_display_name"},"attribute"),"\ub97c \uc774\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \ub098\uc628 ",(0,p.kt)("inlineCode",{parentName:"p"},"example_pipeline.yaml"),"\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("details",null,(0,p.kt)("summary",null,"example_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: example-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9, pipelines.kubeflow.org/pipeline_compilation_time: \'2021-12-09T18:11:43.193190\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "number_1", "type":\n "Integer"}, {"name": "number_2", "type": "Integer"}], "name": "example_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9}\nspec:\n entrypoint: example-pipeline\n templates:\n - name: example-pipeline\n inputs:\n parameters:\n - {name: number_1}\n - {name: number_2}\n dag:\n tasks:\n - name: print-and-return-number\n template: print-and-return-number\n arguments:\n parameters:\n - {name: number_1, value: \'{{inputs.parameters.number_1}}\'}\n - name: print-and-return-number-2\n template: print-and-return-number-2\n arguments:\n parameters:\n - {name: number_2, value: \'{{inputs.parameters.number_2}}\'}\n - name: sum-and-print-numbers\n template: sum-and-print-numbers\n dependencies: [print-and-return-number, print-and-return-number-2]\n arguments:\n parameters:\n - {name: print-and-return-number-2-Output, value: \'{{tasks.print-and-return-number-2.outputs.parameters.print-and-return-number-2-Output}}\'}\n - {name: print-and-return-number-Output, value: \'{{tasks.print-and-return-number.outputs.parameters.print-and-return-number-Output}}\'}\n - name: print-and-return-number\n container:\n args: [--number, \'{{inputs.parameters.number_1}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(\n str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_1}\n outputs:\n parameters:\n - name: print-and-return-number-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-Output, path: /tmp/outputs/Output/data}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is number 1, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number", {"inputValue": "number"}, "----output-paths",\n {"outputPath": "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(\\n str(int_value),\n str(type(int_value))))\\n return str(int_value)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Print and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_1}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n - name: print-and-return-number-2\n container:\n args: [--number, \'{{inputs.parameters.number_2}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(\n str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_2}\n outputs:\n parameters:\n - name: print-and-return-number-2-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-2-Output, path: /tmp/outputs/Output/data}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is number 2, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number", {"inputValue": "number"}, "----output-paths",\n {"outputPath": "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(\\n str(int_value),\n str(type(int_value))))\\n return str(int_value)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Print and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_2}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: print-and-return-number-2-Output}\n - {name: print-and-return-number-Output}\n metadata:\n annotations: {pipelines.kubeflow.org/task_display_name: This is sum of number\n 1 and number 2, pipelines.kubeflow.org/component_spec: \'{"implementation":\n {"container": {"args": ["--number-1", {"inputValue": "number_1"}, "--number-2",\n {"inputValue": "number_2"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def sum_and_print_numbers(number_1, number_2):\\n print(number_1 + number_2)\\n\\nimport\n argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Sum and print numbers\'\',\n description=\'\'\'\')\\n_parser.add_argument(\\"--number-1\\", dest=\\"number_1\\",\n type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--number-2\\",\n dest=\\"number_2\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = sum_and_print_numbers(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number_1", "type": "Integer"},\n {"name": "number_2", "type": "Integer"}], "name": "Sum and print numbers"}\',\n pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number_1":\n "{{inputs.parameters.print-and-return-number-Output}}", "number_2": "{{inputs.parameters.print-and-return-number-2-Output}}"}\'}\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n arguments:\n parameters:\n - {name: number_1}\n - {name: number_2}\n serviceAccountName: pipeline-runner\n')))),(0,p.kt)("p",null,"\uc774 \uc804\uc758 \ud30c\uc77c\uacfc \ube44\uad50\ud558\uba74 ",(0,p.kt)("inlineCode",{parentName:"p"},"pipelines.kubeflow.org/task_display_name")," key\uac00 \uc0c8\ub85c \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"ui-in-kubeflow"},"UI in Kubeflow"),(0,p.kt)("p",null,"\uc704\uc5d0\uc11c \ub9cc\ub4e0 \ud30c\uc77c\uc744 \uc774\uc6a9\ud574 \uc774\uc804\uc5d0 \uc0dd\uc131\ud55c ",(0,p.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-pipeline-upload#upload-pipeline-version"},"\ud30c\uc774\ud504\ub77c\uc778"),"\uc758 \ubc84\uc804\uc744 \uc62c\ub9ac\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"adv-pipeline-0.png",src:r(9072).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"\uadf8\ub7ec\uba74 \uc704\uc640 \uac19\uc774 \uc124\uc815\ud55c \uc774\ub984\uc774 \ub178\ucd9c\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"resources"},"Resources"),(0,p.kt)("h3",{id:"gpu"},"GPU"),(0,p.kt)("p",null,"\ud2b9\ubcc4\ud55c \uc124\uc815\uc774 \uc5c6\ub2e4\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud30c\ub4dc(pod)\ub85c \uc2e4\ud589\ud560 \ub54c, \uae30\ubcf8 \ub9ac\uc18c\uc2a4 \uc2a4\ud399\uc73c\ub85c \uc2e4\ud589\ud558\uac8c \ub429\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d GPU\ub97c \uc0ac\uc6a9\ud574 \ubaa8\ub378\uc744 \ud559\uc2b5\ud574\uc57c \ud560 \ub54c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc0c1\uc5d0\uc11c GPU\ub97c \ud560\ub2f9\ubc1b\uc9c0 \ubabb\ud574 \uc81c\ub300\ub85c \ud559\uc2b5\uc774 \uc774\ub8e8\uc5b4\uc9c0\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \uc704\ud574 ",(0,p.kt)("inlineCode",{parentName:"p"},"set_gpu_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.UserContainer.set_gpu_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1)\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc704\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \uc0dd\uc131\ub41c \ud30c\uc77c\uc5d0\uc11c ",(0,p.kt)("inlineCode",{parentName:"p"},"sum-and-print-numbers"),"\ub97c \uc790\uc138\ud788 \ubcf4\uba74 resources\uc5d0 ",(0,p.kt)("inlineCode",{parentName:"p"},"{nvidia.com/gpu: 1}")," \ub3c4 \ucd94\uac00\ub41c \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub97c \ud1b5\ud574 GPU\ub97c \ud560\ub2f9\ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},' - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n resources:\n limits: {nvidia.com/gpu: 1}\n')),(0,p.kt)("h3",{id:"cpu"},"CPU"),(0,p.kt)("p",null,"cpu\uc758 \uac1c\uc218\ub97c \uc815\ud558\uae30 \uc704\ud574\uc11c \uc774\uc6a9\ud558\ub294 \ud568\uc218\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},".set_cpu_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.Sidecar.set_cpu_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","gpu\uc640\ub294 \ub2e4\ub978 \uc810\uc740 int\uac00 \uc544\ub2cc string\uc73c\ub85c \uc785\ub825\ud574\uc57c \ud55c\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1).set_cpu_limit("16")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\ubc14\ub010 \ubd80\ubd84\ub9cc \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"}," resources:\n limits: {nvidia.com/gpu: 1, cpu: '16'}\n")),(0,p.kt)("h3",{id:"memory"},"Memory"),(0,p.kt)("p",null,"\uba54\ubaa8\ub9ac\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},".set_memory_limit()")," ",(0,p.kt)("a",{parentName:"p",href:"https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html?highlight=set_gpu_limit#kfp.dsl.Sidecar.set_memory_limit"},"attribute"),"\uc744 \uc774\uc6a9\ud574 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1).set_display_name("This is number 1")\n number_2_result = print_and_return_number(number_2).set_display_name("This is number 2")\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n ).set_display_name("This is sum of number 1 and number 2").set_gpu_limit(1).set_memory_limit("1G")\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n\n')),(0,p.kt)("p",null,"\ubc14\ub010 \ubd80\ubd84\ub9cc \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"}," resources:\n limits: {nvidia.com/gpu: 1, memory: 1G}\n")))}l.isMDXComponent=!0},9072:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/adv-pipeline-0-16dd5e9fed2f2d5c4a1d1b683a7a144d.png"},1816:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/run-7-53ba486fe934b320289bf98ddbf9a4b6.png"}}]); \ No newline at end of file diff --git a/assets/js/97a152fd.b0555ee4.js b/assets/js/97a152fd.b0555ee4.js new file mode 100644 index 00000000..95772274 --- /dev/null +++ b/assets/js/97a152fd.b0555ee4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6012],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),o=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,m=c["".concat(u,".").concat(d)]||c[d]||k[d]||s;return n?r.createElement(m,l(l({ref:t},p),{},{components:n})):r.createElement(m,l({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,l=new Array(s);l[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[c]="string"==typeof e?e:a,l[1]=i;for(var o=2;o{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>s,metadata:()=>i,toc:()=>o});var r=n(7462),a=(n(7294),n(3905));const s={title:"4.1. K3s",description:"",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),draft:!1,weight:221,contributors:["Jongseob Jeon"],menu:{docs:'parent:../setup-kubernetes"'},images:[]},l=void 0,i={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-k3s",id:"setup-kubernetes/install-kubernetes/kubernetes-with-k3s",title:"4.1. K3s",description:"",source:"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"4.1. K3s",description:"",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",draft:!1,weight:221,contributors:["Jongseob Jeon"],menu:{docs:'parent:../setup-kubernetes"'},images:[]},sidebar:"tutorialSidebar",previous:{title:"3. Install Prerequisite",permalink:"/docs/setup-kubernetes/install-prerequisite"},next:{title:"4.3. Kubeadm",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm"}},u={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"6. References",id:"6-references",level:2}],p={toc:o},c="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"k3s \uc5d0\uc11c\ub294 \uae30\ubcf8\uac12\uc73c\ub85c containerd\ub97c \ubc31\uc5d4\ub4dc\ub85c \uc774\uc6a9\ud574 \uc124\uce58\ud569\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc \uc800\ud76c\ub294 GPU\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c docker\ub97c \ubc31\uc5d4\ub4dc\ub85c \uc0ac\uc6a9\ud574\uc57c \ud558\ubbc0\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"--docker")," \uc635\uc158\uc744 \ud1b5\ud574 \ubc31\uc5d4\ub4dc\ub97c docker\ub85c \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.21.7+k3s1 sh -s - server --disable traefik --disable servicelb --disable local-storage --docker\n")),(0,a.kt)("p",null,"k3s\ub97c \uc124\uce58 \ud6c4 k3s config\ub97c \ud655\uc778\ud569\ub2c8\ub2e4"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo cat /etc/rancher/k3s/k3s.yaml\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud56d\ubaa9\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","(\ubcf4\uc548 \ubb38\uc81c\uc640 \uad00\ub828\ub41c \ud0a4\ub4e4\uc740 <...>\ub85c \uac00\ub838\uc2b5\ub2c8\ub2e4.)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data:\n <...>\n server: https://127.0.0.1:6443\n name: default\ncontexts:\n- context:\n cluster: default\n user: default\n name: default\ncurrent-context: default\nkind: Config\npreferences: {}\nusers:\n- name: default\n user:\n client-certificate-data:\n <...>\n client-key-data:\n <...>\n")),(0,a.kt)("h2",{id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5"},"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5"),(0,a.kt)("p",null,"k3s config\ub97c \ud074\ub7ec\uc2a4\ud130\uc758 kubeconfig\ub85c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c \ubcf5\uc0ac\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir .kube\nsudo cp /etc/rancher/k3s/k3s.yaml .kube/config\n")),(0,a.kt)("p",null,"\ubcf5\uc0ac\ub41c config \ud30c\uc77c\uc5d0 user\uac00 \uc811\uadfc\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc744 \uc90d\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo chown $USER:$USER .kube/config\n")),(0,a.kt)("h2",{id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5"},"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5"),(0,a.kt)("p",null,"\uc774\uc81c \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc124\uc815\ud55c kubeconfig\ub97c \ub85c\uceec\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.\n\ub85c\uceec\uc5d0\uc11c\ub294 \uacbd\ub85c\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.kube/config"),"\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucc98\uc74c \ubcf5\uc0ac\ud55c config \ud30c\uc77c\uc5d0\ub294 server ip\uac00 ",(0,a.kt)("inlineCode",{parentName:"p"},"https://127.0.0.1:6443")," \uc73c\ub85c \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774 \uac12\uc744 \ud074\ub7ec\uc2a4\ud130\uc758 ip\uc5d0 \ub9de\uac8c \uc218\uc815\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","(\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud074\ub7ec\uc2a4\ud130\uc758 ip\uc5d0 \ub9de\ucdb0\uc11c ",(0,a.kt)("inlineCode",{parentName:"p"},"https://192.168.0.19:6443")," \uc73c\ub85c \uc218\uc815\ud588\uc2b5\ub2c8\ub2e4.)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data:\n <...>\n server: https://192.168.0.19:6443\n name: default\ncontexts:\n- context:\n cluster: default\n user: default\n name: default\ncurrent-context: default\nkind: Config\npreferences: {}\nusers:\n- name: default\n user:\n client-certificate-data:\n <...>\n client-key-data:\n <...>\n")),(0,a.kt)("h2",{id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58"},"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-kubernetes-module"},"Setup Kubernetes Modules"),"\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"helm"),(0,a.kt)("li",{parentName:"ul"},"kustomize"),(0,a.kt)("li",{parentName:"ul"},"CSI plugin"),(0,a.kt)("li",{parentName:"ul"},"[Optional]"," nvidia-docker, nvidia-device-plugin")),(0,a.kt)("h2",{id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,a.kt)("p",null,"\ucd5c\uc885\uc801\uc73c\ub85c node\uac00 Ready \uc778\uc9c0, OS, Docker, Kubernetes \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get nodes -o wide\n")),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nubuntu Ready control-plane,master 11m v1.21.7+k3s1 192.168.0.19 Ubuntu 20.04.3 LTS 5.4.0-91-generic docker://20.10.11\n")),(0,a.kt)("h2",{id:"6-references"},"6. References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://rancher.com/docs/k3s/latest/en/installation/install-options/"},"https://rancher.com/docs/k3s/latest/en/installation/install-options/"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/97a152fd.b093491d.js b/assets/js/97a152fd.b093491d.js deleted file mode 100644 index c7612459..00000000 --- a/assets/js/97a152fd.b093491d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6012],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),o=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,m=c["".concat(u,".").concat(d)]||c[d]||k[d]||s;return n?r.createElement(m,l(l({ref:t},p),{},{components:n})):r.createElement(m,l({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,l=new Array(s);l[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[c]="string"==typeof e?e:a,l[1]=i;for(var o=2;o{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>s,metadata:()=>i,toc:()=>o});var r=n(7462),a=(n(7294),n(3905));const s={title:"4.1. K3s",description:"",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),draft:!1,weight:221,contributors:["Jongseob Jeon"],menu:{docs:'parent:../setup-kubernetes"'},images:[]},l=void 0,i={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-k3s",id:"setup-kubernetes/install-kubernetes/kubernetes-with-k3s",title:"4.1. K3s",description:"",source:"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"4.1. K3s",description:"",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",draft:!1,weight:221,contributors:["Jongseob Jeon"],menu:{docs:'parent:../setup-kubernetes"'},images:[]},sidebar:"tutorialSidebar",previous:{title:"3. Install Prerequisite",permalink:"/docs/setup-kubernetes/install-prerequisite"},next:{title:"4.3. Kubeadm",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm"}},u={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"6. References",id:"6-references",level:2}],p={toc:o},c="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"k3s \uc5d0\uc11c\ub294 \uae30\ubcf8\uac12\uc73c\ub85c containerd\ub97c \ubc31\uc5d4\ub4dc\ub85c \uc774\uc6a9\ud574 \uc124\uce58\ud569\ub2c8\ub2e4.\n\ud558\uc9c0\ub9cc \uc800\ud76c\ub294 GPU\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c docker\ub97c \ubc31\uc5d4\ub4dc\ub85c \uc0ac\uc6a9\ud574\uc57c \ud558\ubbc0\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"--docker")," \uc635\uc158\uc744 \ud1b5\ud574 \ubc31\uc5d4\ub4dc\ub97c docker\ub85c \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.21.7+k3s1 sh -s - server --disable traefik --disable servicelb --disable local-storage --docker\n")),(0,a.kt)("p",null,"k3s\ub97c \uc124\uce58 \ud6c4 k3s config\ub97c \ud655\uc778\ud569\ub2c8\ub2e4"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo cat /etc/rancher/k3s/k3s.yaml\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud56d\ubaa9\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","(\ubcf4\uc548 \ubb38\uc81c\uc640 \uad00\ub828\ub41c \ud0a4\ub4e4\uc740 <...>\ub85c \uac00\ub838\uc2b5\ub2c8\ub2e4.)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data:\n <...>\n server: https://127.0.0.1:6443\n name: default\ncontexts:\n- context:\n cluster: default\n user: default\n name: default\ncurrent-context: default\nkind: Config\npreferences: {}\nusers:\n- name: default\n user:\n client-certificate-data:\n <...>\n client-key-data:\n <...>\n")),(0,a.kt)("h2",{id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5"},"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5"),(0,a.kt)("p",null,"k3s config\ub97c \ud074\ub7ec\uc2a4\ud130\uc758 kubeconfig\ub85c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c \ubcf5\uc0ac\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir .kube\nsudo cp /etc/rancher/k3s/k3s.yaml .kube/config\n")),(0,a.kt)("p",null,"\ubcf5\uc0ac\ub41c config \ud30c\uc77c\uc5d0 user\uac00 \uc811\uadfc\ud560 \uc218 \uc788\ub294 \uad8c\ud55c\uc744 \uc90d\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo chown $USER:$USER .kube/config\n")),(0,a.kt)("h2",{id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5"},"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5"),(0,a.kt)("p",null,"\uc774\uc81c \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc124\uc815\ud55c kubeconfig\ub97c \ub85c\uceec\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.\n\ub85c\uceec\uc5d0\uc11c\ub294 \uacbd\ub85c\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.kube/config"),"\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucc98\uc74c \ubcf5\uc0ac\ud55c config \ud30c\uc77c\uc5d0\ub294 server ip\uac00 ",(0,a.kt)("inlineCode",{parentName:"p"},"https://127.0.0.1:6443")," \uc73c\ub85c \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774 \uac12\uc744 \ud074\ub7ec\uc2a4\ud130\uc758 ip\uc5d0 \ub9de\uac8c \uc218\uc815\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","(\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud074\ub7ec\uc2a4\ud130\uc758 ip\uc5d0 \ub9de\ucdb0\uc11c ",(0,a.kt)("inlineCode",{parentName:"p"},"https://192.168.0.19:6443")," \uc73c\ub85c \uc218\uc815\ud588\uc2b5\ub2c8\ub2e4.)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data:\n <...>\n server: https://192.168.0.19:6443\n name: default\ncontexts:\n- context:\n cluster: default\n user: default\n name: default\ncurrent-context: default\nkind: Config\npreferences: {}\nusers:\n- name: default\n user:\n client-certificate-data:\n <...>\n client-key-data:\n <...>\n")),(0,a.kt)("h2",{id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58"},"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-kubernetes-module"},"Setup Kubernetes Modules"),"\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"helm"),(0,a.kt)("li",{parentName:"ul"},"kustomize"),(0,a.kt)("li",{parentName:"ul"},"CSI plugin"),(0,a.kt)("li",{parentName:"ul"},"[Optional]"," nvidia-docker, nvidia-device-plugin")),(0,a.kt)("h2",{id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,a.kt)("p",null,"\ucd5c\uc885\uc801\uc73c\ub85c node\uac00 Ready \uc778\uc9c0, OS, Docker, Kubernetes \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get nodes -o wide\n")),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nubuntu Ready control-plane,master 11m v1.21.7+k3s1 192.168.0.19 Ubuntu 20.04.3 LTS 5.4.0-91-generic docker://20.10.11\n")),(0,a.kt)("h2",{id:"6-references"},"6. References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://rancher.com/docs/k3s/latest/en/installation/install-options/"},"https://rancher.com/docs/k3s/latest/en/installation/install-options/"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9a73b948.2402c067.js b/assets/js/9a73b948.2402c067.js new file mode 100644 index 00000000..bc7da159 --- /dev/null +++ b/assets/js/9a73b948.2402c067.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1725],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),o=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,u=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),c=o(n),f=i,m=c["".concat(u,".").concat(f)]||c[f]||d[f]||a;return n?r.createElement(m,l(l({ref:t},s),{},{components:n})):r.createElement(m,l({ref:t},s))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,l=new Array(a);l[0]=f;var p={};for(var u in t)hasOwnProperty.call(t,u)&&(p[u]=t[u]);p.originalType=e,p[c]="string"==typeof e?e:i,l[1]=p;for(var o=2;o{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>p,toc:()=>o});var r=n(7462),i=(n(7294),n(3905));const a={title:"7. Pipeline - Run",description:"",sidebar_position:7,contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"kubeflow/basic-run",id:"kubeflow/basic-run",title:"7. Pipeline - Run",description:"",source:"@site/docs/kubeflow/basic-run.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-run",permalink:"/docs/kubeflow/basic-run",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-run.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:7,frontMatter:{title:"7. Pipeline - Run",description:"",sidebar_position:7,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"6. Pipeline - Upload",permalink:"/docs/kubeflow/basic-pipeline-upload"},next:{title:"8. Component - InputPath/OutputPath",permalink:"/docs/kubeflow/advanced-component"}},u={},o=[{value:"Run Pipeline",id:"run-pipeline",level:2},{value:"Before Run",id:"before-run",level:2},{value:"1. Create Experiment",id:"1-create-experiment",level:3},{value:"2. Name \uc785\ub825",id:"2-name-\uc785\ub825",level:3},{value:"Run Pipeline",id:"run-pipeline-1",level:2},{value:"1. Create Run \uc120\ud0dd",id:"1-create-run-\uc120\ud0dd",level:3},{value:"2. Experiment \uc120\ud0dd",id:"2-experiment-\uc120\ud0dd",level:3},{value:"3. Pipeline Config \uc785\ub825",id:"3-pipeline-config-\uc785\ub825",level:3},{value:"4. Start",id:"4-start",level:3},{value:"Run Result",id:"run-result",level:2}],s={toc:o},c="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(c,(0,r.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"run-pipeline"},"Run Pipeline"),(0,i.kt)("p",null,"\uc774\uc81c \uc5c5\ub85c\ub4dc\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\uc2dc\ucf1c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"before-run"},"Before Run"),(0,i.kt)("h3",{id:"1-create-experiment"},"1. Create Experiment"),(0,i.kt)("p",null,"Experiment\ub780 Kubeflow \uc5d0\uc11c \uc2e4\ud589\ub418\ub294 Run\uc744 \ub17c\ub9ac\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ub2e8\uc704\uc785\ub2c8\ub2e4. "),(0,i.kt)("p",null,"Kubeflow\uc5d0\uc11c namespace\ub97c \ucc98\uc74c \ub4e4\uc5b4\uc624\uba74 \uc0dd\uc131\ub418\uc5b4 \uc788\ub294 Experiment\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 \ubbf8\ub9ac Experiment\ub97c \uc0dd\uc131\ud574\ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4. Experiment\uc774 \uc788\ub2e4\uba74 ",(0,i.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-run#run-pipeline-1"},"Run Pipeline"),"\uc73c\ub85c \ub118\uc5b4\uac00\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"Experiment\ub294 Create Experiment \ubc84\ud2bc\uc744 \ud1b5\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-0.png",src:n(1880).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"2-name-\uc785\ub825"},"2. Name \uc785\ub825"),(0,i.kt)("p",null,"Experiment\ub85c \uc0ac\uc6a9\ud560 \uc774\ub984\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.\n",(0,i.kt)("img",{alt:"run-1.png",src:n(7220).Z,width:"3360",height:"2100"})),(0,i.kt)("h2",{id:"run-pipeline-1"},"Run Pipeline"),(0,i.kt)("h3",{id:"1-create-run-\uc120\ud0dd"},"1. Create Run \uc120\ud0dd"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-2.png",src:n(1721).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"2-experiment-\uc120\ud0dd"},"2. Experiment \uc120\ud0dd"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-9.png",src:n(5638).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-10.png",src:n(7740).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"3-pipeline-config-\uc785\ub825"},"3. Pipeline Config \uc785\ub825"),(0,i.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc0dd\uc131\ud560 \ub54c \uc785\ub825\ud55c Config \uac12\ub4e4\uc744 \ucc44\uc6cc \ub123\uc2b5\ub2c8\ub2e4.\n\uc5c5\ub85c\ub4dc\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc740 number_1\uacfc number_2\ub97c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-3.png",src:n(6038).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"4-start"},"4. Start"),(0,i.kt)("p",null,"\uc785\ub825 \ud6c4 Start \ubc84\ud2bc\uc744 \ub204\ub974\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-4.png",src:n(4378).Z,width:"3360",height:"2100"})),(0,i.kt)("h2",{id:"run-result"},"Run Result"),(0,i.kt)("p",null,"\uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\ub4e4\uc740 Runs \ud0ed\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nRun\uc744 \ud074\ub9ad\ud558\uba74 \uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\uacfc \uad00\ub828\ub41c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-5.png",src:n(9818).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,"\ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ub098\uc635\ub2c8\ub2e4. \uc544\uc9c1 \uc2e4\ud589\ub418\uc9c0 \uc54a\uc740 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ud68c\uc0c9 \ud45c\uc2dc\ub85c \ub098\uc635\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-6.png",src:n(6024).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\uc774 \uc644\ub8cc\ub418\uba74 \ucd08\ub85d\uc0c9 \uccb4\ud06c \ud45c\uc2dc\uac00 \ub098\uc635\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-7.png",src:n(1816).Z,width:"3408",height:"2156"})),(0,i.kt)("p",null,"\uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ubcf4\uba74 \uc785\ub825\ud55c Config\uc778 3\uacfc 5\uc758 \ud569\uc778 8\uc774 \ucd9c\ub825\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-8.png",src:n(8673).Z,width:"3360",height:"2100"})))}d.isMDXComponent=!0},1880:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-0-89a074cf253ad20e9315a21b2a3f0e9d.png"},7220:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-1-665e6047b848cee9383180a6a146a1a7.png"},7740:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-10-2177a6d36d33136d1b22445a2bfde87b.png"},1721:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-2-e1d4347b0c3974602d7f848dd39139a1.png"},6038:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-3-4d37c68448d8d5a8930ace230463e41e.png"},4378:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-4-b6f1160b622f53a449e9022b42a0969c.png"},9818:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-5-165361ea6e50ef9626ff848ca5901332.png"},6024:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-6-c0df9defda8fb66fd249cfe650168103.png"},1816:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-7-53ba486fe934b320289bf98ddbf9a4b6.png"},8673:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-8-ffde114f1b8e8f33c58e40927a2d28c6.png"},5638:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-9-845cae1b0883fa77fb58717001557edb.png"}}]); \ No newline at end of file diff --git a/assets/js/9a73b948.aaf21d11.js b/assets/js/9a73b948.aaf21d11.js deleted file mode 100644 index 325da551..00000000 --- a/assets/js/9a73b948.aaf21d11.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1725],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),o=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,u=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),c=o(n),f=i,m=c["".concat(u,".").concat(f)]||c[f]||d[f]||a;return n?r.createElement(m,l(l({ref:t},s),{},{components:n})):r.createElement(m,l({ref:t},s))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,l=new Array(a);l[0]=f;var p={};for(var u in t)hasOwnProperty.call(t,u)&&(p[u]=t[u]);p.originalType=e,p[c]="string"==typeof e?e:i,l[1]=p;for(var o=2;o{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>p,toc:()=>o});var r=n(7462),i=(n(7294),n(3905));const a={title:"7. Pipeline - Run",description:"",sidebar_position:7,contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"kubeflow/basic-run",id:"kubeflow/basic-run",title:"7. Pipeline - Run",description:"",source:"@site/docs/kubeflow/basic-run.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-run",permalink:"/docs/kubeflow/basic-run",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-run.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:7,frontMatter:{title:"7. Pipeline - Run",description:"",sidebar_position:7,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"6. Pipeline - Upload",permalink:"/docs/kubeflow/basic-pipeline-upload"},next:{title:"8. Component - InputPath/OutputPath",permalink:"/docs/kubeflow/advanced-component"}},u={},o=[{value:"Run Pipeline",id:"run-pipeline",level:2},{value:"Before Run",id:"before-run",level:2},{value:"1. Create Experiment",id:"1-create-experiment",level:3},{value:"2. Name \uc785\ub825",id:"2-name-\uc785\ub825",level:3},{value:"Run Pipeline",id:"run-pipeline-1",level:2},{value:"1. Create Run \uc120\ud0dd",id:"1-create-run-\uc120\ud0dd",level:3},{value:"2. Experiment \uc120\ud0dd",id:"2-experiment-\uc120\ud0dd",level:3},{value:"3. Pipeline Config \uc785\ub825",id:"3-pipeline-config-\uc785\ub825",level:3},{value:"4. Start",id:"4-start",level:3},{value:"Run Result",id:"run-result",level:2}],s={toc:o},c="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(c,(0,r.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"run-pipeline"},"Run Pipeline"),(0,i.kt)("p",null,"\uc774\uc81c \uc5c5\ub85c\ub4dc\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\uc2dc\ucf1c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"before-run"},"Before Run"),(0,i.kt)("h3",{id:"1-create-experiment"},"1. Create Experiment"),(0,i.kt)("p",null,"Experiment\ub780 Kubeflow \uc5d0\uc11c \uc2e4\ud589\ub418\ub294 Run\uc744 \ub17c\ub9ac\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ub2e8\uc704\uc785\ub2c8\ub2e4. "),(0,i.kt)("p",null,"Kubeflow\uc5d0\uc11c namespace\ub97c \ucc98\uc74c \ub4e4\uc5b4\uc624\uba74 \uc0dd\uc131\ub418\uc5b4 \uc788\ub294 Experiment\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 \ubbf8\ub9ac Experiment\ub97c \uc0dd\uc131\ud574\ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4. Experiment\uc774 \uc788\ub2e4\uba74 ",(0,i.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-run#run-pipeline-1"},"Run Pipeline"),"\uc73c\ub85c \ub118\uc5b4\uac00\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"Experiment\ub294 Create Experiment \ubc84\ud2bc\uc744 \ud1b5\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-0.png",src:n(1880).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"2-name-\uc785\ub825"},"2. Name \uc785\ub825"),(0,i.kt)("p",null,"Experiment\ub85c \uc0ac\uc6a9\ud560 \uc774\ub984\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.\n",(0,i.kt)("img",{alt:"run-1.png",src:n(7220).Z,width:"3360",height:"2100"})),(0,i.kt)("h2",{id:"run-pipeline-1"},"Run Pipeline"),(0,i.kt)("h3",{id:"1-create-run-\uc120\ud0dd"},"1. Create Run \uc120\ud0dd"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-2.png",src:n(1721).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"2-experiment-\uc120\ud0dd"},"2. Experiment \uc120\ud0dd"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-9.png",src:n(5638).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-10.png",src:n(7740).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"3-pipeline-config-\uc785\ub825"},"3. Pipeline Config \uc785\ub825"),(0,i.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc0dd\uc131\ud560 \ub54c \uc785\ub825\ud55c Config \uac12\ub4e4\uc744 \ucc44\uc6cc \ub123\uc2b5\ub2c8\ub2e4.\n\uc5c5\ub85c\ub4dc\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc740 number_1\uacfc number_2\ub97c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-3.png",src:n(6038).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"4-start"},"4. Start"),(0,i.kt)("p",null,"\uc785\ub825 \ud6c4 Start \ubc84\ud2bc\uc744 \ub204\ub974\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-4.png",src:n(4378).Z,width:"3360",height:"2100"})),(0,i.kt)("h2",{id:"run-result"},"Run Result"),(0,i.kt)("p",null,"\uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\ub4e4\uc740 Runs \ud0ed\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nRun\uc744 \ud074\ub9ad\ud558\uba74 \uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\uacfc \uad00\ub828\ub41c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-5.png",src:n(9818).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,"\ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ub098\uc635\ub2c8\ub2e4. \uc544\uc9c1 \uc2e4\ud589\ub418\uc9c0 \uc54a\uc740 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ud68c\uc0c9 \ud45c\uc2dc\ub85c \ub098\uc635\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-6.png",src:n(6024).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\uc774 \uc644\ub8cc\ub418\uba74 \ucd08\ub85d\uc0c9 \uccb4\ud06c \ud45c\uc2dc\uac00 \ub098\uc635\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-7.png",src:n(1816).Z,width:"3408",height:"2156"})),(0,i.kt)("p",null,"\uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ubcf4\uba74 \uc785\ub825\ud55c Config\uc778 3\uacfc 5\uc758 \ud569\uc778 8\uc774 \ucd9c\ub825\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-8.png",src:n(8673).Z,width:"3360",height:"2100"})))}d.isMDXComponent=!0},1880:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-0-89a074cf253ad20e9315a21b2a3f0e9d.png"},7220:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-1-665e6047b848cee9383180a6a146a1a7.png"},7740:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-10-2177a6d36d33136d1b22445a2bfde87b.png"},1721:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-2-e1d4347b0c3974602d7f848dd39139a1.png"},6038:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-3-4d37c68448d8d5a8930ace230463e41e.png"},4378:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-4-b6f1160b622f53a449e9022b42a0969c.png"},9818:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-5-165361ea6e50ef9626ff848ca5901332.png"},6024:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-6-c0df9defda8fb66fd249cfe650168103.png"},1816:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-7-53ba486fe934b320289bf98ddbf9a4b6.png"},8673:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-8-ffde114f1b8e8f33c58e40927a2d28c6.png"},5638:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-9-845cae1b0883fa77fb58717001557edb.png"}}]); \ No newline at end of file diff --git a/assets/js/9b54c487.e570a49a.js b/assets/js/9b54c487.2bbef88a.js similarity index 55% rename from assets/js/9b54c487.e570a49a.js rename to assets/js/9b54c487.2bbef88a.js index 1e281ce1..fc1522ef 100644 --- a/assets/js/9b54c487.e570a49a.js +++ b/assets/js/9b54c487.2bbef88a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1008],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),f=o,d=u["".concat(p,".").concat(f)]||u[f]||m[f]||a;return n?r.createElement(d,i(i({ref:t},c),{},{components:n})):r.createElement(d,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"3. Install Requirements",description:"",sidebar_position:3,contributors:["Jongseob Jeon"]},i=void 0,l={unversionedId:"kubeflow/basic-requirements",id:"version-1.0/kubeflow/basic-requirements",title:"3. Install Requirements",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-requirements.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-requirements",permalink:"/docs/1.0/kubeflow/basic-requirements",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-requirements.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Install Requirements",description:"",sidebar_position:3,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"2. Kubeflow Concepts",permalink:"/docs/1.0/kubeflow/kubeflow-concepts"},next:{title:"4. Component - Write",permalink:"/docs/1.0/kubeflow/basic-component"}},p={},s=[],c={toc:s},u="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\uc2e4\uc2b5\uc744 \uc704\ud574 \uad8c\uc7a5\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc740 python>=3.7\uc785\ub2c8\ub2e4. \ud30c\uc774\uc36c \ud658\uacbd\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\uc740 \ubd84\ub4e4\uc740 \ub2e4\uc74c ",(0,o.kt)("a",{parentName:"p",href:"../appendix/pyenv"},"Appendix 1. \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),"\uc744 \ucc38\uace0\ud558\uc5ec ",(0,o.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc"),"\uc5d0 \uc124\uce58\ud574\uc8fc\uc2e0 \ub4a4 \ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc9c4\ud589\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc2e4\uc2b5\uc744 \uc9c4\ud589\ud558\uae30\uc5d0\uc11c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uacfc \ubc84\uc804\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"requirements.txt"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kfp==1.8.9\nscikit-learn==1.0.1\nmlflow==1.21.0\npandas==1.3.4\ndill==0.3.4\n")))),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/appendix/pyenv#python-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EC%83%9D%EC%84%B1"},"\uc55e\uc5d0\uc11c \ub9cc\ub4e0 \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),"\uc744 \ud65c\uc131\ud654\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv activate demo\n")),(0,o.kt)("p",null,"\ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc9c4\ud589\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"pip3 install -U pip\npip3 install kfp==1.8.9 scikit-learn==1.0.1 mlflow==1.21.0 pandas==1.3.4 dill==0.3.4\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1008],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),f=o,d=u["".concat(p,".").concat(f)]||u[f]||m[f]||a;return n?r.createElement(d,i(i({ref:t},c),{},{components:n})):r.createElement(d,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"3. Install Requirements",description:"",sidebar_position:3,contributors:["Jongseob Jeon"]},i=void 0,l={unversionedId:"kubeflow/basic-requirements",id:"version-1.0/kubeflow/basic-requirements",title:"3. Install Requirements",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-requirements.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-requirements",permalink:"/docs/1.0/kubeflow/basic-requirements",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-requirements.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Install Requirements",description:"",sidebar_position:3,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"2. Kubeflow Concepts",permalink:"/docs/1.0/kubeflow/kubeflow-concepts"},next:{title:"4. Component - Write",permalink:"/docs/1.0/kubeflow/basic-component"}},p={},s=[],c={toc:s},u="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\uc2e4\uc2b5\uc744 \uc704\ud574 \uad8c\uc7a5\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc740 python>=3.7\uc785\ub2c8\ub2e4. \ud30c\uc774\uc36c \ud658\uacbd\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\uc740 \ubd84\ub4e4\uc740 \ub2e4\uc74c ",(0,o.kt)("a",{parentName:"p",href:"../appendix/pyenv"},"Appendix 1. \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),"\uc744 \ucc38\uace0\ud558\uc5ec ",(0,o.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc"),"\uc5d0 \uc124\uce58\ud574\uc8fc\uc2e0 \ub4a4 \ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc9c4\ud589\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc2e4\uc2b5\uc744 \uc9c4\ud589\ud558\uae30\uc5d0\uc11c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uacfc \ubc84\uc804\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"requirements.txt"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kfp==1.8.9\nscikit-learn==1.0.1\nmlflow==1.21.0\npandas==1.3.4\ndill==0.3.4\n")))),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/1.0/appendix/pyenv#python-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EC%83%9D%EC%84%B1"},"\uc55e\uc5d0\uc11c \ub9cc\ub4e0 \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),"\uc744 \ud65c\uc131\ud654\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv activate demo\n")),(0,o.kt)("p",null,"\ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc9c4\ud589\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"pip3 install -U pip\npip3 install kfp==1.8.9 scikit-learn==1.0.1 mlflow==1.21.0 pandas==1.3.4 dill==0.3.4\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9c5e90dd.b119e672.js b/assets/js/9c5e90dd.ac9c2ce0.js similarity index 90% rename from assets/js/9c5e90dd.b119e672.js rename to assets/js/9c5e90dd.ac9c2ce0.js index 7dd69560..9dcf4be0 100644 --- a/assets/js/9c5e90dd.b119e672.js +++ b/assets/js/9c5e90dd.ac9c2ce0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5867],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>b});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(n),p=o,b=u["".concat(c,".").concat(p)]||u[p]||d[p]||a;return n?r.createElement(b,i(i({ref:t},m),{},{components:n})):r.createElement(b,i({ref:t},m))}));function b(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=p;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>b,contentTitle:()=>d,default:()=>y,frontMatter:()=>u,metadata:()=>p,toc:()=>h});var r=n(7462),o=n(7294),a=n(3905),i=n(5999);function l(e){let{className:t,name:n,children:r,githubUrl:a,linkedinUrl:i,role:l}=e;return o.createElement("div",{className:t},o.createElement("div",{className:"card card--full-height"},o.createElement("div",{className:"card__header"},o.createElement("div",{className:"avatar avatar--vertical"},o.createElement("img",{className:"avatar__photo avatar__photo--xl",src:`${a}.png`,alt:`${n}'s avatar`}),o.createElement("div",{className:"avatar__intro"},o.createElement("h3",{className:"avatar__name"},n)),o.createElement("div",{className:"avatar__role"},o.createElement("h5",{className:"avatar__role"},l)))),o.createElement("div",{className:"card__body"},r),o.createElement("div",{className:"card__footer"},o.createElement("div",{className:"button-group button-group--block"},a&&o.createElement("a",{className:"button button--secondary",href:a},"GitHub"),i&&o.createElement("a",{className:"button button--secondary",href:i},"LinkedIn")))))}function c(e){return o.createElement(l,(0,r.Z)({},e,{className:"col col--6 margin-bottom--lg"}))}function s(){return o.createElement("div",{className:"row"},o.createElement(c,{name:"Jongseob Jeon",githubUrl:"https://github.com/aiden-jeon",linkedinUrl:"https://www.linkedin.com/in/jongseob-jeon/",role:"Project Leader"},o.createElement(i.Z,{id:"team.profile.Jongseob Jeon.body"},"\ub9c8\ud0a4\ub098\ub77d\uc2a4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ubaa8\ub450\uc758 \ub525\ub7ec\ub2dd\uc744 \ud1b5\ud574 \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc774 \ub525\ub7ec\ub2dd\uc744 \uc27d\uac8c \uc811\ud588\ub4ef\uc774 \ubaa8\ub450\uc758 MLOps\ub97c \ud1b5\ud574 \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc774 MLOps\uc5d0 \uc27d\uac8c \uc811\ud560\uc218 \uc788\uae38 \ubc14\ub78d\ub2c8\ub2e4.")),o.createElement(c,{name:"Jayeon Kim",githubUrl:"https://github.com/anencore94",linkedinUrl:"https://www.linkedin.com/in/anencore94",role:"Project Member"},o.createElement(i.Z,{id:"team.profile.Jaeyeon Kim.body"},"\ube44\ud6a8\uc728\uc801\uc778 \uc791\uc5c5\uc744 \uc790\ub3d9\ud654\ud558\ub294 \uac83\uc5d0 \uad00\uc2ec\uc774 \ub9ce\uc2b5\ub2c8\ub2e4.")),o.createElement(c,{name:"Youngchel Jang",githubUrl:"https://github.com/zamonia500",linkedinUrl:"https://www.linkedin.com/in/youngcheol-jang-b04a45187",role:"Project Member"},o.createElement(i.Z,{id:"team.profile.Youngchel Jang.body"},"\ub9c8\ud0a4\ub098\ub77d\uc2a4\uc5d0\uc11c MLOps Engineer\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8\uc21c\ud558\uac8c \uc0dd\uac01\ud558\ub294 \ub178\ub825\uc744 \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.")))}function m(){return o.createElement("div",{className:"row"},o.createElement(c,{name:"Jongsun Shinn",githubUrl:"https://github.com/jsshinn",linkedinUrl:"https://www.linkedin.com/in/jongsun-shinn-311b00140/"},o.createElement(i.Z,{id:"team.profile.Jongsun Shinn.body"},"\ub9c8\ud0a4\ub098\ub77d\uc2a4\uc5d0\uc11c ML Engineer\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.")),o.createElement(c,{name:"Sangwoo Shim",githubUrl:"https://github.com/borishim",linkedinUrl:"https://www.linkedin.com/in/sangwooshim/"},o.createElement(i.Z,{id:"team.profile.Sangwoo Shim.body"},"\ub9c8\ud0a4\ub098\ub77d\uc2a4\uc5d0\uc11c CTO\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\ud0a4\ub098\ub77d\uc2a4\ub294 \uba38\uc2e0\ub7ec\ub2dd \uae30\ubc18\uc758 \uc0b0\uc5c5\uc6a9 AI \uc194\ub8e8\uc158\uc744 \uac1c\ubc1c\ud558\ub294 \uc2a4\ud0c0\ud2b8\uc5c5\uc785\ub2c8\ub2e4. \uc0b0\uc5c5 \ud604\uc7a5\uc758 \ubb38\uc81c \ud574\uacb0\uc744 \ud1b5\ud574 \uc0ac\ub78c\uc774 \ubcf8\uc5f0\uc758 \uc77c\uc5d0 \uc9d1\uc911\ud560 \uc218 \uc788\uac8c \ub9cc\ub4dc\ub294 \uac83, \uadf8\uac83\uc774 \uc6b0\ub9ac\uac00 \ud558\ub294 \uc77c\uc785\ub2c8\ub2e4.")),o.createElement(c,{name:"Seunghyun Ko",githubUrl:"https://github.com/kosehy",linkedinUrl:"https://www.linkedin.com/in/seunghyunko/"},o.createElement(i.Z,{id:"team.profile.Seunghyun Ko.body"},"3i\uc5d0\uc11c MLOps Engineer\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. kubeflow\uc5d0 \uad00\uc2ec\uc774 \ub9ce\uc2b5\ub2c8\ub2e4.")),o.createElement(c,{name:"SeungTae Kim",githubUrl:"https://github.com/RyanKor",linkedinUrl:"https://www.linkedin.com/in/seung-tae-kim-3bb15715b/"},o.createElement(i.Z,{id:"team.profile.SeungTae Kim.body"},"Genesis Lab\uc774\ub77c\ub294 \uc2a4\ud0c0\ud2b8\uc5c5\uc5d0\uc11c Applied AI Engineer \uc778\ud134 \uc5c5\ubb34\ub97c \uc218\ud589\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd \uc0dd\ud0dc\uacc4\uac00 \uc6b0\ub9ac \uc0b0\uc5c5 \uc804\ubc18\uc5d0 \ud070 \ubcc0\ud654\uc744 \uac00\uc838\uc62c \uac83\uc774\ub77c \ubbff\uc73c\uba70, \ud55c \uac78\uc74c\uc529 \ub098\uc544\uac00\uace0 \uc788\uc2b5\ub2c8\ub2e4.")),o.createElement(c,{name:"Youngdon Tae",githubUrl:"https://github.com/taepd",linkedinUrl:"https://www.linkedin.com/in/taepd/"},o.createElement(i.Z,{id:"team.profile.Youngdon Tae.body"},"\ubc31\ud328\ucee4\uc5d0\uc11c ML \uc5d4\uc9c0\ub2c8\uc5b4\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc790\uc5f0\uc5b4\ucc98\ub9ac, \ucd94\ucc9c\uc2dc\uc2a4\ud15c, MLOps\uc5d0 \uad00\uc2ec\uc774 \ub9ce\uc2b5\ub2c8\ub2e4.")))}const u={sidebar_position:3},d="Contributors",p={unversionedId:"contributors",id:"contributors",title:"Contributors",description:"Main Authors",source:"@site/community/contributors.md",sourceDirName:".",slug:"/contributors",permalink:"/community/contributors",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/community/contributors.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"How to Contribute",permalink:"/community/how-to-contribute"}},b={},h=[{value:"Main Authors",id:"main-authors",level:2},{value:"Contributors",id:"contributors-1",level:2}],g={toc:h},f="wrapper";function y(e){let{components:t,...n}=e;return(0,a.kt)(f,(0,r.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"contributors"},"Contributors"),(0,a.kt)("h2",{id:"main-authors"},"Main Authors"),(0,a.kt)(s,{mdxType:"MainAuthorRow"}),(0,a.kt)("h2",{id:"contributors-1"},"Contributors"),(0,a.kt)("p",null,"Thank you for contributing our tutorials!"),(0,a.kt)(m,{mdxType:"ContributorsRow"}))}y.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5867],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>b});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(n),p=o,b=u["".concat(c,".").concat(p)]||u[p]||d[p]||a;return n?r.createElement(b,i(i({ref:t},m),{},{components:n})):r.createElement(b,i({ref:t},m))}));function b(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=p;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>b,contentTitle:()=>d,default:()=>y,frontMatter:()=>u,metadata:()=>p,toc:()=>h});var r=n(7462),o=n(7294),a=n(3905),i=n(5999);function l(e){let{className:t,name:n,children:r,githubUrl:a,linkedinUrl:i,role:l}=e;return o.createElement("div",{className:t},o.createElement("div",{className:"card card--full-height"},o.createElement("div",{className:"card__header"},o.createElement("div",{className:"avatar avatar--vertical"},o.createElement("img",{className:"avatar__photo avatar__photo--xl",src:`${a}.png`,alt:`${n}'s avatar`}),o.createElement("div",{className:"avatar__intro"},o.createElement("h3",{className:"avatar__name"},n)),o.createElement("div",{className:"avatar__role"},o.createElement("h5",{className:"avatar__role"},l)))),o.createElement("div",{className:"card__body"},r),o.createElement("div",{className:"card__footer"},o.createElement("div",{className:"button-group button-group--block"},a&&o.createElement("a",{className:"button button--secondary",href:a},"GitHub"),i&&o.createElement("a",{className:"button button--secondary",href:i},"LinkedIn")))))}function c(e){return o.createElement(l,(0,r.Z)({},e,{className:"col col--6 margin-bottom--lg"}))}function s(){return o.createElement("div",{className:"row"},o.createElement(c,{name:"Jongseob Jeon",githubUrl:"https://github.com/aiden-jeon",linkedinUrl:"https://www.linkedin.com/in/jongseob-jeon/",role:"Project Leader"},o.createElement(i.Z,{id:"team.profile.Jongseob Jeon.body"},"\ub9c8\ud0a4\ub098\ub77d\uc2a4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ubaa8\ub450\uc758 \ub525\ub7ec\ub2dd\uc744 \ud1b5\ud574 \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc774 \ub525\ub7ec\ub2dd\uc744 \uc27d\uac8c \uc811\ud588\ub4ef\uc774 \ubaa8\ub450\uc758 MLOps\ub97c \ud1b5\ud574 \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc774 MLOps\uc5d0 \uc27d\uac8c \uc811\ud560\uc218 \uc788\uae38 \ubc14\ub78d\ub2c8\ub2e4.")),o.createElement(c,{name:"Jayeon Kim",githubUrl:"https://github.com/anencore94",linkedinUrl:"https://www.linkedin.com/in/anencore94",role:"Project Member"},o.createElement(i.Z,{id:"team.profile.Jaeyeon Kim.body"},"\ube44\ud6a8\uc728\uc801\uc778 \uc791\uc5c5\uc744 \uc790\ub3d9\ud654\ud558\ub294 \uac83\uc5d0 \uad00\uc2ec\uc774 \ub9ce\uc2b5\ub2c8\ub2e4.")),o.createElement(c,{name:"Youngchel Jang",githubUrl:"https://github.com/zamonia500",linkedinUrl:"https://www.linkedin.com/in/youngcheol-jang-b04a45187",role:"Project Member"},o.createElement(i.Z,{id:"team.profile.Youngchel Jang.body"},"\ub9c8\ud0a4\ub098\ub77d\uc2a4\uc5d0\uc11c MLOps Engineer\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8\uc21c\ud558\uac8c \uc0dd\uac01\ud558\ub294 \ub178\ub825\uc744 \ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.")))}function m(){return o.createElement("div",{className:"row"},o.createElement(c,{name:"Jongsun Shinn",githubUrl:"https://github.com/jsshinn",linkedinUrl:"https://www.linkedin.com/in/jongsun-shinn-311b00140/"},o.createElement(i.Z,{id:"team.profile.Jongsun Shinn.body"},"\ub9c8\ud0a4\ub098\ub77d\uc2a4\uc5d0\uc11c ML Engineer\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.")),o.createElement(c,{name:"Sangwoo Shim",githubUrl:"https://github.com/borishim",linkedinUrl:"https://www.linkedin.com/in/sangwooshim/"},o.createElement(i.Z,{id:"team.profile.Sangwoo Shim.body"},"\ub9c8\ud0a4\ub098\ub77d\uc2a4\uc5d0\uc11c CTO\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\ud0a4\ub098\ub77d\uc2a4\ub294 \uba38\uc2e0\ub7ec\ub2dd \uae30\ubc18\uc758 \uc0b0\uc5c5\uc6a9 AI \uc194\ub8e8\uc158\uc744 \uac1c\ubc1c\ud558\ub294 \uc2a4\ud0c0\ud2b8\uc5c5\uc785\ub2c8\ub2e4. \uc0b0\uc5c5 \ud604\uc7a5\uc758 \ubb38\uc81c \ud574\uacb0\uc744 \ud1b5\ud574 \uc0ac\ub78c\uc774 \ubcf8\uc5f0\uc758 \uc77c\uc5d0 \uc9d1\uc911\ud560 \uc218 \uc788\uac8c \ub9cc\ub4dc\ub294 \uac83, \uadf8\uac83\uc774 \uc6b0\ub9ac\uac00 \ud558\ub294 \uc77c\uc785\ub2c8\ub2e4.")),o.createElement(c,{name:"Seunghyun Ko",githubUrl:"https://github.com/kosehy",linkedinUrl:"https://www.linkedin.com/in/seunghyunko/"},o.createElement(i.Z,{id:"team.profile.Seunghyun Ko.body"},"3i\uc5d0\uc11c MLOps Engineer\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. kubeflow\uc5d0 \uad00\uc2ec\uc774 \ub9ce\uc2b5\ub2c8\ub2e4.")),o.createElement(c,{name:"SeungTae Kim",githubUrl:"https://github.com/RyanKor",linkedinUrl:"https://www.linkedin.com/in/seung-tae-kim-3bb15715b/"},o.createElement(i.Z,{id:"team.profile.SeungTae Kim.body"},"Genesis Lab\uc774\ub77c\ub294 \uc2a4\ud0c0\ud2b8\uc5c5\uc5d0\uc11c Applied AI Engineer \uc778\ud134 \uc5c5\ubb34\ub97c \uc218\ud589\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uba38\uc2e0\ub7ec\ub2dd \uc0dd\ud0dc\uacc4\uac00 \uc6b0\ub9ac \uc0b0\uc5c5 \uc804\ubc18\uc5d0 \ud070 \ubcc0\ud654\uc744 \uac00\uc838\uc62c \uac83\uc774\ub77c \ubbff\uc73c\uba70, \ud55c \uac78\uc74c\uc529 \ub098\uc544\uac00\uace0 \uc788\uc2b5\ub2c8\ub2e4.")),o.createElement(c,{name:"Youngdon Tae",githubUrl:"https://github.com/taepd",linkedinUrl:"https://www.linkedin.com/in/taepd/"},o.createElement(i.Z,{id:"team.profile.Youngdon Tae.body"},"\ubc31\ud328\ucee4\uc5d0\uc11c ML \uc5d4\uc9c0\ub2c8\uc5b4\ub85c \uc77c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc790\uc5f0\uc5b4\ucc98\ub9ac, \ucd94\ucc9c\uc2dc\uc2a4\ud15c, MLOps\uc5d0 \uad00\uc2ec\uc774 \ub9ce\uc2b5\ub2c8\ub2e4.")))}const u={sidebar_position:3},d="Contributors",p={unversionedId:"contributors",id:"contributors",title:"Contributors",description:"Main Authors",source:"@site/community/contributors.md",sourceDirName:".",slug:"/contributors",permalink:"/community/contributors",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/community/contributors.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"How to Contribute",permalink:"/community/how-to-contribute"}},b={},h=[{value:"Main Authors",id:"main-authors",level:2},{value:"Contributors",id:"contributors-1",level:2}],g={toc:h},f="wrapper";function y(e){let{components:t,...n}=e;return(0,a.kt)(f,(0,r.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"contributors"},"Contributors"),(0,a.kt)("h2",{id:"main-authors"},"Main Authors"),(0,a.kt)(s,{mdxType:"MainAuthorRow"}),(0,a.kt)("h2",{id:"contributors-1"},"Contributors"),(0,a.kt)("p",null,"Thank you for contributing our tutorials!"),(0,a.kt)(m,{mdxType:"ContributorsRow"}))}y.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9f898b75.2d2436c6.js b/assets/js/9f898b75.2d2436c6.js new file mode 100644 index 00000000..6b7520eb --- /dev/null +++ b/assets/js/9f898b75.2d2436c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2157],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>c});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function p(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var i=n.createContext({}),m=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},d=function(t){var e=m(t.components);return n.createElement(i.Provider,{value:e},t.children)},s="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,i=t.parentName,d=o(t,["components","mdxType","originalType","parentName"]),s=m(a),k=r,c=s["".concat(i,".").concat(k)]||s[k]||u[k]||l;return a?n.createElement(c,p(p({ref:e},d),{},{components:a})):n.createElement(c,p({ref:e},d))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=k;var o={};for(var i in e)hasOwnProperty.call(e,i)&&(o[i]=e[i]);o.originalType=t,o[s]="string"==typeof t?t:r,p[1]=o;for(var m=2;m{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>p,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>m});var n=a(7462),r=(a(7294),a(3905));const l={title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",date:new Date("2021-12-21T00:00:00.000Z"),lastmod:new Date("2021-12-21T00:00:00.000Z")},p=void 0,o={unversionedId:"further-readings/info",id:"version-1.0/further-readings/info",title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",description:"MLOps Component",source:"@site/versioned_docs/version-1.0/further-readings/info.md",sourceDirName:"further-readings",slug:"/further-readings/info",permalink:"/docs/1.0/further-readings/info",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/further-readings/info.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",frontMatter:{title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",date:"2021-12-21T00:00:00.000Z",lastmod:"2021-12-21T00:00:00.000Z"},sidebar:"tutorialSidebar",previous:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",permalink:"/docs/1.0/appendix/metallb"}},i={},m=[{value:"MLOps Component",id:"mlops-component",level:2}],d={toc:m},s="wrapper";function u(t){let{components:e,...l}=t;return(0,r.kt)(s,(0,n.Z)({},d,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"mlops-component"},"MLOps Component"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/introduction/component"},"MLOps Concepts"),"\uc5d0\uc11c \ub2e4\ub8e8\uc5c8\ub358 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub3c4\uc2dd\ud654\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-0.png",src:a(6426).Z,width:"1600",height:"588"})),(0,r.kt)("p",null,"\uc774 \uc911 ",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \ub2e4\ub8ec \uae30\uc220 \uc2a4\ud0dd\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-1.png",src:a(608).Z,width:"1600",height:"594"})),(0,r.kt)("p",null,"\ubcf4\uc2dc\ub294 \uac83\ucc98\ub7fc \uc544\uc9c1 \uc6b0\ub9ac\uac00 \ub2e4\ub8e8\uc9c0 \ubabb\ud55c \ub9ce\uc740 MLOps \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4. "),(0,r.kt)("p",null,"\uc2dc\uac04 \uad00\uacc4\uc0c1 \uc774\ubc88\uc5d0 \ubaa8\ub450 \ub2e4\ub8e8\uc9c0\ub294 \ubabb\ud588\uc9c0\ub9cc, \ub9cc\uc57d \ud544\uc694\ud558\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4\ub4e4\uc744 \uba3c\uc800 \ucc38\uace0\ud574\ubcf4\uba74 \uc88b\uc744 \uac83 \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-2.png",src:a(7777).Z,width:"1616",height:"588"})),(0,r.kt)("p",null,"\uc138\ubd80 \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Mgmt."),(0,r.kt)("th",{parentName:"tr",align:null},"Component"),(0,r.kt)("th",{parentName:"tr",align:null},"Open Soruce"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Collection"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://kafka.apache.org/"},"Kafka"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Validation"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://beam.apache.org/"},"Beam"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Feature Store"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://flink.apache.org/"},"Flink"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ML Model Dev. & Experiment"),(0,r.kt)("td",{parentName:"tr",align:null},"Modeling"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://jupyter.org/"},"Jupyter"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Analysis & Experiment Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://mlflow.org/"},"MLflow"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"HPO Tuning & AutoML"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/kubeflow/katib"},"Katib"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Deploy Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Serving Framework"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.seldon.io/projects/seldon-core/en/latest/index.html"},"Seldon Core"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"A/B Test"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://iter8.tools/"},"Iter8"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Monitoring"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://grafana.com/oss/grafana/"},"Grafana"),", ",(0,r.kt)("a",{parentName:"td",href:"https://prometheus.io/"},"Prometheus"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Process Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"pipeline"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.kubeflow.org/"},"Kubeflow"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"CI/CD"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/actions"},"Github Action"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Continuous Training"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://argoproj.github.io/events/"},"Argo Events"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Platform Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Configuration Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.consul.io/"},"Consul"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Code Version Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/"},"Github"),", ",(0,r.kt)("a",{parentName:"td",href:"https://min.io/"},"Minio"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Logging"),(0,r.kt)("td",{parentName:"tr",align:null},"(EFK) ",(0,r.kt)("a",{parentName:"td",href:"https://www.elastic.co/kr/elasticsearch/"},"Elastic Search"),", ",(0,r.kt)("a",{parentName:"td",href:"https://www.fluentd.org/"},"Fluentd"),", ",(0,r.kt)("a",{parentName:"td",href:"https://www.elastic.co/kr/kibana/"},"Kibana"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Resource Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://kubernetes.io/"},"Kubernetes"))))))}u.isMDXComponent=!0},6426:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-0-75a5736738cbd950e04122e6252dc2c1.png"},608:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-1-1ab94bd3c5f055c056a4ffc84f4f03f4.png"},7777:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-2-32f97815a2c7d02a32f080a996712ca6.png"}}]); \ No newline at end of file diff --git a/assets/js/9f898b75.371866df.js b/assets/js/9f898b75.371866df.js deleted file mode 100644 index 5d630f5b..00000000 --- a/assets/js/9f898b75.371866df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2157],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>g});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function p(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var i=n.createContext({}),m=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},d=function(t){var e=m(t.components);return n.createElement(i.Provider,{value:e},t.children)},s="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,i=t.parentName,d=o(t,["components","mdxType","originalType","parentName"]),s=m(a),k=r,g=s["".concat(i,".").concat(k)]||s[k]||u[k]||l;return a?n.createElement(g,p(p({ref:e},d),{},{components:a})):n.createElement(g,p({ref:e},d))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=k;var o={};for(var i in e)hasOwnProperty.call(e,i)&&(o[i]=e[i]);o.originalType=t,o[s]="string"==typeof t?t:r,p[1]=o;for(var m=2;m{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>p,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>m});var n=a(7462),r=(a(7294),a(3905));const l={title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",date:new Date("2021-12-21T00:00:00.000Z"),lastmod:new Date("2021-12-21T00:00:00.000Z")},p=void 0,o={unversionedId:"further-readings/info",id:"version-1.0/further-readings/info",title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",description:"MLOps Component",source:"@site/versioned_docs/version-1.0/further-readings/info.md",sourceDirName:"further-readings",slug:"/further-readings/info",permalink:"/docs/1.0/further-readings/info",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/further-readings/info.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",frontMatter:{title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",date:"2021-12-21T00:00:00.000Z",lastmod:"2021-12-21T00:00:00.000Z"},sidebar:"tutorialSidebar",previous:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",permalink:"/docs/1.0/appendix/metallb"}},i={},m=[{value:"MLOps Component",id:"mlops-component",level:2}],d={toc:m},s="wrapper";function u(t){let{components:e,...l}=t;return(0,r.kt)(s,(0,n.Z)({},d,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"mlops-component"},"MLOps Component"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/introduction/component"},"MLOps Concepts"),"\uc5d0\uc11c \ub2e4\ub8e8\uc5c8\ub358 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub3c4\uc2dd\ud654\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-0.png",src:a(6426).Z,width:"1600",height:"588"})),(0,r.kt)("p",null,"\uc774 \uc911 ",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \ub2e4\ub8ec \uae30\uc220 \uc2a4\ud0dd\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-1.png",src:a(608).Z,width:"1600",height:"594"})),(0,r.kt)("p",null,"\ubcf4\uc2dc\ub294 \uac83\ucc98\ub7fc \uc544\uc9c1 \uc6b0\ub9ac\uac00 \ub2e4\ub8e8\uc9c0 \ubabb\ud55c \ub9ce\uc740 MLOps \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4. "),(0,r.kt)("p",null,"\uc2dc\uac04 \uad00\uacc4\uc0c1 \uc774\ubc88\uc5d0 \ubaa8\ub450 \ub2e4\ub8e8\uc9c0\ub294 \ubabb\ud588\uc9c0\ub9cc, \ub9cc\uc57d \ud544\uc694\ud558\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4\ub4e4\uc744 \uba3c\uc800 \ucc38\uace0\ud574\ubcf4\uba74 \uc88b\uc744 \uac83 \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-2.png",src:a(7777).Z,width:"1616",height:"588"})),(0,r.kt)("p",null,"\uc138\ubd80 \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Mgmt."),(0,r.kt)("th",{parentName:"tr",align:null},"Component"),(0,r.kt)("th",{parentName:"tr",align:null},"Open Soruce"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Collection"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://kafka.apache.org/"},"Kafka"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Validation"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://beam.apache.org/"},"Beam"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Feature Store"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://flink.apache.org/"},"Flink"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ML Model Dev. & Experiment"),(0,r.kt)("td",{parentName:"tr",align:null},"Modeling"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://jupyter.org/"},"Jupyter"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Analysis & Experiment Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://mlflow.org/"},"MLflow"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"HPO Tuning & AutoML"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/kubeflow/katib"},"Katib"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Deploy Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Serving Framework"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.seldon.io/projects/seldon-core/en/latest/index.html"},"Seldon Core"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"A/B Test"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://iter8.tools/"},"Iter8"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Monitoring"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://grafana.com/oss/grafana/"},"Grafana"),", ",(0,r.kt)("a",{parentName:"td",href:"https://prometheus.io/"},"Prometheus"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Process Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"pipeline"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.kubeflow.org/"},"Kubeflow"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"CI/CD"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/actions"},"Github Action"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Continuous Training"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://argoproj.github.io/events/"},"Argo Events"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Platform Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Configuration Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.consul.io/"},"Consul"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Code Version Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/"},"Github"),", ",(0,r.kt)("a",{parentName:"td",href:"https://min.io/"},"Minio"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Logging"),(0,r.kt)("td",{parentName:"tr",align:null},"(EFK) ",(0,r.kt)("a",{parentName:"td",href:"https://www.elastic.co/kr/elasticsearch/"},"Elastic Search"),", ",(0,r.kt)("a",{parentName:"td",href:"https://www.fluentd.org/"},"Fluentd"),", ",(0,r.kt)("a",{parentName:"td",href:"https://www.elastic.co/kr/kibana/"},"Kibana"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Resource Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://kubernetes.io/"},"Kubernetes"))))))}u.isMDXComponent=!0},6426:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-0-75a5736738cbd950e04122e6252dc2c1.png"},608:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-1-1ab94bd3c5f055c056a4ffc84f4f03f4.png"},7777:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-2-32f97815a2c7d02a32f080a996712ca6.png"}}]); \ No newline at end of file diff --git a/assets/js/a606c19a.23abfbb1.js b/assets/js/a606c19a.23abfbb1.js new file mode 100644 index 00000000..e68f32fa --- /dev/null +++ b/assets/js/a606c19a.23abfbb1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4555],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),u=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=o,f=c["".concat(i,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,s(s({ref:t},p),{},{components:r})):n.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,s=new Array(a);s[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const a={title:"4. Volumes",description:"",sidebar_position:4,contributors:["Jaeyeon Kim"]},s=void 0,l={unversionedId:"kubeflow-dashboard-guide/volumes",id:"kubeflow-dashboard-guide/volumes",title:"4. Volumes",description:"",source:"@site/docs/kubeflow-dashboard-guide/volumes.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/volumes",permalink:"/docs/kubeflow-dashboard-guide/volumes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/volumes.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Volumes",description:"",sidebar_position:4,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Tensorboards",permalink:"/docs/kubeflow-dashboard-guide/tensorboards"},next:{title:"5. Experiments(AutoML)",permalink:"/docs/kubeflow-dashboard-guide/experiments"}},i={},u=[{value:"Volumes",id:"volumes",level:2},{value:"\ubcfc\ub968 \uc0dd\uc131\ud558\uae30",id:"\ubcfc\ub968-\uc0dd\uc131\ud558\uae30",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"volumes"},"Volumes"),(0,o.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Volumes\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"volumes",src:r(4156).Z,width:"1386",height:"382"})),(0,o.kt)("p",null,"Volumes \ud0ed\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/volumes/"},"Kubernetes\uc758 \ubcfc\ub968(Volume)"),", \uc815\ud655\ud788\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/"},"\ud37c\uc2dc\uc2a4\ud134\ud2b8 \ubcfc\ub968 \ud074\ub808\uc784(Persistent Volume Claim, \uc774\ud558 pvc)")," \uc911 \ud604\uc7ac user\uc758 namespace\uc5d0 \uc18d\ud55c pvc\ub97c \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc704 \uc2a4\ud06c\ub9b0\uc0f7\uc744 \ubcf4\uba74, ",(0,o.kt)("a",{parentName:"p",href:"../kubeflow-dashboard-guide/notebooks"},"1. Notebooks")," \ud398\uc774\uc9c0\uc5d0\uc11c \uc0dd\uc131\ud55c Volume\uc758 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 Volume\uc758 Storage Class\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc124\uce58 \ub2f9\uc2dc \uc124\uce58\ud55c Default Storage Class\uc778 local-path\ub85c \uc124\uc815\ub418\uc5b4\uc788\uc74c\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\uc678\uc5d0\ub3c4 user namespace\uc5d0 \uc0c8\ub85c\uc6b4 \ubcfc\ub968\uc744 \uc0dd\uc131\ud558\uac70\ub098, \uc870\ud68c\ud558\uac70\ub098, \uc0ad\uc81c\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0 Volumes \ud398\uc774\uc9c0\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("hr",null),(0,o.kt)("h2",{id:"\ubcfc\ub968-\uc0dd\uc131\ud558\uae30"},"\ubcfc\ub968 \uc0dd\uc131\ud558\uae30"),(0,o.kt)("p",null,"\uc624\ub978\ucabd \uc704\uc758 ",(0,o.kt)("inlineCode",{parentName:"p"},"+ NEW VOLUME")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"new-volume",src:r(1037).Z,width:"1192",height:"934"})),(0,o.kt)("p",null,"name, size, storage class, access mode\ub97c \uc9c0\uc815\ud558\uc5ec \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc6d0\ud558\ub294 \ub9ac\uc18c\uc2a4 \uc2a4\ud399\uc744 \uc9c0\uc815\ud558\uc5ec \uc0dd\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc\ub968\uc758 Status\uac00 ",(0,o.kt)("inlineCode",{parentName:"p"},"Pending"),"\uc73c\ub85c \uc870\ud68c\ub429\ub2c8\ub2e4. ",(0,o.kt)("inlineCode",{parentName:"p"},"Status")," \uc544\uc774\ucf58\uc5d0 \ub9c8\uc6b0\uc2a4 \ucee4\uc11c\ub97c \uac00\uc838\ub2e4 \ub300\uba74 ",(0,o.kt)("em",{parentName:"p"},"\ud574\ub2f9 \ubcfc\ub968\uc740 mount\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 first consumer\uac00 \ub098\ud0c0\ub0a0 \ub54c \uc2e4\uc81c\ub85c \uc0dd\uc131\uc744 \uc9c4\ud589\ud55c\ub2e4(This volume will be bound when its first consumer is created.)"),"\ub294 \uba54\uc2dc\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud558\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/storage-classes/"},"StorageClass"),"\uc778 ",(0,o.kt)("inlineCode",{parentName:"p"},"local-path"),"\uc758 \ubcfc\ub968 \uc0dd\uc131 \uc815\ucc45\uc5d0 \ud574\ub2f9\ud558\uba70, ",(0,o.kt)("strong",{parentName:"p"},"\ubb38\uc81c \uc0c1\ud669\uc774 \uc544\ub2d9\ub2c8\ub2e4."),(0,o.kt)("br",{parentName:"p"}),"\n","\ud574\ub2f9 \ud398\uc774\uc9c0\uc5d0\uc11c Status\uac00 ",(0,o.kt)("inlineCode",{parentName:"p"},"Pending")," \uc73c\ub85c \ubcf4\uc774\ub354\ub77c\ub3c4 \ud574\ub2f9 \ubcfc\ub968\uc744 \uc0ac\uc6a9\ud558\uae38 \uc6d0\ud558\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84 \ud639\uc740 \ud30c\ub4dc(Pod)\uc5d0\uc11c\ub294 \ud574\ub2f9 \ubcfc\ub968\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\uba70, \uadf8\ub54c \uc2e4\uc81c\ub85c \ubcfc\ub968 \uc0dd\uc131\uc774 \uc9c4\ud589\ub429\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"creating-volume",src:r(4502).Z,width:"1572",height:"450"})))}d.isMDXComponent=!0},4502:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/creating-volume-38085f1d8dcc5f1a0f2df336a6ad99e7.png"},7511:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},1037:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/new-volume-b14c633d4f22b7948f111122da491ccd.png"},4156:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/volumes-8a47fc94771470514efa705ec8b6d0fe.png"}}]); \ No newline at end of file diff --git a/assets/js/a606c19a.3d0d4090.js b/assets/js/a606c19a.3d0d4090.js deleted file mode 100644 index ce525c06..00000000 --- a/assets/js/a606c19a.3d0d4090.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4555],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),u=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=o,f=c["".concat(i,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,s(s({ref:t},p),{},{components:r})):n.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,s=new Array(a);s[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const a={title:"4. Volumes",description:"",sidebar_position:4,contributors:["Jaeyeon Kim"]},s=void 0,l={unversionedId:"kubeflow-dashboard-guide/volumes",id:"kubeflow-dashboard-guide/volumes",title:"4. Volumes",description:"",source:"@site/docs/kubeflow-dashboard-guide/volumes.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/volumes",permalink:"/docs/kubeflow-dashboard-guide/volumes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/volumes.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Volumes",description:"",sidebar_position:4,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Tensorboards",permalink:"/docs/kubeflow-dashboard-guide/tensorboards"},next:{title:"5. Experiments(AutoML)",permalink:"/docs/kubeflow-dashboard-guide/experiments"}},i={},u=[{value:"Volumes",id:"volumes",level:2},{value:"\ubcfc\ub968 \uc0dd\uc131\ud558\uae30",id:"\ubcfc\ub968-\uc0dd\uc131\ud558\uae30",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"volumes"},"Volumes"),(0,o.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Volumes\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"volumes",src:r(4156).Z,width:"1386",height:"382"})),(0,o.kt)("p",null,"Volumes \ud0ed\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/volumes/"},"Kubernetes\uc758 \ubcfc\ub968(Volume)"),", \uc815\ud655\ud788\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/"},"\ud37c\uc2dc\uc2a4\ud134\ud2b8 \ubcfc\ub968 \ud074\ub808\uc784(Persistent Volume Claim, \uc774\ud558 pvc)")," \uc911 \ud604\uc7ac user\uc758 namespace\uc5d0 \uc18d\ud55c pvc\ub97c \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc704 \uc2a4\ud06c\ub9b0\uc0f7\uc744 \ubcf4\uba74, ",(0,o.kt)("a",{parentName:"p",href:"../kubeflow-dashboard-guide/notebooks"},"1. Notebooks")," \ud398\uc774\uc9c0\uc5d0\uc11c \uc0dd\uc131\ud55c Volume\uc758 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 Volume\uc758 Storage Class\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc124\uce58 \ub2f9\uc2dc \uc124\uce58\ud55c Default Storage Class\uc778 local-path\ub85c \uc124\uc815\ub418\uc5b4\uc788\uc74c\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\uc678\uc5d0\ub3c4 user namespace\uc5d0 \uc0c8\ub85c\uc6b4 \ubcfc\ub968\uc744 \uc0dd\uc131\ud558\uac70\ub098, \uc870\ud68c\ud558\uac70\ub098, \uc0ad\uc81c\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0 Volumes \ud398\uc774\uc9c0\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("hr",null),(0,o.kt)("h2",{id:"\ubcfc\ub968-\uc0dd\uc131\ud558\uae30"},"\ubcfc\ub968 \uc0dd\uc131\ud558\uae30"),(0,o.kt)("p",null,"\uc624\ub978\ucabd \uc704\uc758 ",(0,o.kt)("inlineCode",{parentName:"p"},"+ NEW VOLUME")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"new-volume",src:r(1037).Z,width:"1192",height:"934"})),(0,o.kt)("p",null,"name, size, storage class, access mode\ub97c \uc9c0\uc815\ud558\uc5ec \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc6d0\ud558\ub294 \ub9ac\uc18c\uc2a4 \uc2a4\ud399\uc744 \uc9c0\uc815\ud558\uc5ec \uc0dd\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc\ub968\uc758 Status\uac00 ",(0,o.kt)("inlineCode",{parentName:"p"},"Pending"),"\uc73c\ub85c \uc870\ud68c\ub429\ub2c8\ub2e4. ",(0,o.kt)("inlineCode",{parentName:"p"},"Status")," \uc544\uc774\ucf58\uc5d0 \ub9c8\uc6b0\uc2a4 \ucee4\uc11c\ub97c \uac00\uc838\ub2e4 \ub300\uba74 ",(0,o.kt)("em",{parentName:"p"},"\ud574\ub2f9 \ubcfc\ub968\uc740 mount\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 first consumer\uac00 \ub098\ud0c0\ub0a0 \ub54c \uc2e4\uc81c\ub85c \uc0dd\uc131\uc744 \uc9c4\ud589\ud55c\ub2e4(This volume will be bound when its first consumer is created.)"),"\ub294 \uba54\uc2dc\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud558\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/storage-classes/"},"StorageClass"),"\uc778 ",(0,o.kt)("inlineCode",{parentName:"p"},"local-path"),"\uc758 \ubcfc\ub968 \uc0dd\uc131 \uc815\ucc45\uc5d0 \ud574\ub2f9\ud558\uba70, ",(0,o.kt)("strong",{parentName:"p"},"\ubb38\uc81c \uc0c1\ud669\uc774 \uc544\ub2d9\ub2c8\ub2e4."),(0,o.kt)("br",{parentName:"p"}),"\n","\ud574\ub2f9 \ud398\uc774\uc9c0\uc5d0\uc11c Status\uac00 ",(0,o.kt)("inlineCode",{parentName:"p"},"Pending")," \uc73c\ub85c \ubcf4\uc774\ub354\ub77c\ub3c4 \ud574\ub2f9 \ubcfc\ub968\uc744 \uc0ac\uc6a9\ud558\uae38 \uc6d0\ud558\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84 \ud639\uc740 \ud30c\ub4dc(Pod)\uc5d0\uc11c\ub294 \ud574\ub2f9 \ubcfc\ub968\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\uba70, \uadf8\ub54c \uc2e4\uc81c\ub85c \ubcfc\ub968 \uc0dd\uc131\uc774 \uc9c4\ud589\ub429\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"creating-volume",src:r(4502).Z,width:"1572",height:"450"})))}d.isMDXComponent=!0},4502:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/creating-volume-38085f1d8dcc5f1a0f2df336a6ad99e7.png"},7511:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},1037:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/new-volume-b14c633d4f22b7948f111122da491ccd.png"},4156:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/volumes-8a47fc94771470514efa705ec8b6d0fe.png"}}]); \ No newline at end of file diff --git a/assets/js/a7958b24.a8bc8b06.js b/assets/js/a7958b24.a8bc8b06.js deleted file mode 100644 index 0ce5e0ce..00000000 --- a/assets/js/a7958b24.a8bc8b06.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3255],{3905:(n,e,t)=>{t.d(e,{Zo:()=>m,kt:()=>c});var a=t(7294);function r(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function p(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,a)}return t}function i(n){for(var e=1;e=0||(r[t]=n[t]);return r}(n,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(n);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(r[t]=n[t])}return r}var o=a.createContext({}),s=function(n){var e=a.useContext(o),t=e;return n&&(t="function"==typeof n?n(e):i(i({},e),n)),t},m=function(n){var e=s(n.components);return a.createElement(o.Provider,{value:e},n.children)},d="mdxType",_={inlineCode:"code",wrapper:function(n){var e=n.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(n,e){var t=n.components,r=n.mdxType,p=n.originalType,o=n.parentName,m=l(n,["components","mdxType","originalType","parentName"]),d=s(t),u=r,c=d["".concat(o,".").concat(u)]||d[u]||_[u]||p;return t?a.createElement(c,i(i({ref:e},m),{},{components:t})):a.createElement(c,i({ref:e},m))}));function c(n,e){var t=arguments,r=e&&e.mdxType;if("string"==typeof n||r){var p=t.length,i=new Array(p);i[0]=u;var l={};for(var o in e)hasOwnProperty.call(e,o)&&(l[o]=e[o]);l.originalType=n,l[d]="string"==typeof n?n:r,i[1]=l;for(var s=2;s{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>_,frontMatter:()=>p,metadata:()=>l,toc:()=>s});var a=t(7462),r=(t(7294),t(3905));const p={title:"9. Component - Environment",description:"",sidebar_position:9,contributors:["Jongseob Jeon"]},i=void 0,l={unversionedId:"kubeflow/advanced-environment",id:"kubeflow/advanced-environment",title:"9. Component - Environment",description:"",source:"@site/docs/kubeflow/advanced-environment.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-environment",permalink:"/docs/kubeflow/advanced-environment",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-environment.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:9,frontMatter:{title:"9. Component - Environment",description:"",sidebar_position:9,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"8. Component - InputPath/OutputPath",permalink:"/docs/kubeflow/advanced-component"},next:{title:"10. Pipeline - Setting",permalink:"/docs/kubeflow/advanced-pipeline"}},o={},s=[{value:"Component Environment",id:"component-environment",level:2},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"\ud328\ud0a4\uc9c0 \ucd94\uac00 \ubc29\ubc95",id:"\ud328\ud0a4\uc9c0-\ucd94\uac00-\ubc29\ubc95",level:2},{value:"1. base_image",id:"1-base_image",level:3},{value:"2. packages_to_install",id:"2-packages_to_install",level:3}],m={toc:s},d="wrapper";function _(n){let{components:e,...t}=n;return(0,r.kt)(d,(0,a.Z)({},m,t,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"component-environment"},"Component Environment"),(0,r.kt)("p",null,"\uc55e\uc11c ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-component"},"8. Component - InputPath/OutputPath"),"\uc5d0\uc11c \uc791\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uba74 \uc2e4\ud328\ud558\uac8c \ub429\ub2c8\ub2e4. \uc65c \uc2e4\ud328\ud558\ub294\uc9c0 \uc54c\uc544\ubcf4\uace0 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub420 \uc218 \uc788\ub3c4\ub85d \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-component#convert-to-kubeflow-format"},"\uc55e\uc5d0\uc11c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8"),"\ub97c yaml\ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc704\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \ud30c\uc77c\uc744 \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: model, type: dill}\n- {name: kernel, type: String}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --model\n - {inputPath: model}\n - --kernel\n - {inputValue: kernel}\n')),(0,r.kt)("p",null,"\uc55e\uc11c ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-component#convert-to-kubeflow-format"},"Basic Usage Component"),"\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc5d0 \ub530\ub974\uba74 \uc774 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\ud558\uc9c0\ub9cc \uc704\uc5d0\uc11c \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uac8c \ub429\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8 \uc774\uc720\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \uc2e4\ud589\ub418\ub294 \ubc29\uc2dd\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","Kubeflow\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub294 \uac01\uac01 \ub3c5\ub9bd\ub41c \ucee8\ud14c\uc774\ub108 \uc704\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc790\uc138\ud788 \ubcf4\uba74 \uc0dd\uc131\ub41c \ub9cc\ub4e0 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \uc5d0\uc11c \uc815\ud574\uc9c4 \uc774\ubbf8\uc9c0\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"image: python:3.7")," \uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc5b4\ub5a4 \uc774\uc720 \ub54c\ubb38\uc5d0 \uc2e4\ud589\uc774 \uc548 \ub418\ub294\uc9c0 \ub208\uce58\ucc44\uc2e0 \ubd84\ub4e4\ub3c4 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"python:3.7")," \uc774\ubbf8\uc9c0\uc5d0\ub294 \uc6b0\ub9ac\uac00 \uc0ac\uc6a9\ud558\uace0\uc790 \ud558\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"dill"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pandas"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sklearn")," \uc774 \uc124\uce58\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub7ec\ubbc0\ub85c \uc2e4\ud589\ud560 \ub54c \ud574\ub2f9 \ud328\ud0a4\uc9c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \uc5d0\ub7ec\uc640 \ud568\uaed8 \uc2e4\ud589\uc774 \uc548 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uadf8\ub7fc \uc5b4\ub5bb\uac8c \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc744\uae4c\uc694?"),(0,r.kt)("h2",{id:"\ud328\ud0a4\uc9c0-\ucd94\uac00-\ubc29\ubc95"},"\ud328\ud0a4\uc9c0 \ucd94\uac00 \ubc29\ubc95"),(0,r.kt)("p",null,"Kubeflow\ub97c \ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ub450 \uac00\uc9c0 \ubc29\ubc95\uc744 \ud1b5\ud574 \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"base_image")," \uc0ac\uc6a9"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"package_to_install")," \uc0ac\uc6a9")),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \ucef4\ud30c\uc77c\ud560 \ub54c \uc0ac\uc6a9\ud588\ub358 \ud568\uc218 ",(0,r.kt)("inlineCode",{parentName:"p"},"create_component_from_func")," \uac00 \uc5b4\ub5a4 argument\ub4e4\uc744 \ubc1b\uc744 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"def create_component_from_func(\n func: Callable,\n output_component_file: Optional[str] = None,\n base_image: Optional[str] = None,\n packages_to_install: List[str] = None,\n annotations: Optional[Mapping[str, str]] = None,\n):\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"func"),": \ucef4\ud3ec\ub10c\ud2b8\ub85c \ub9cc\ub4e4 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c \ud568\uc218"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"base_image"),": \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \uc2e4\ud589\ud560 \uc774\ubbf8\uc9c0"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"packages_to_install"),": \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc11c \ucd94\uac00\ub85c \uc124\uce58\ud574\uc57c \ud558\ub294 \ud328\ud0a4\uc9c0")),(0,r.kt)("h3",{id:"1-base_image"},"1. base_image"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub97c \uc880 \ub354 \uc790\uc138\ud788 \ub4e4\uc5ec\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull base_image")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"pip install packages_to_install")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\ub9cc\uc57d \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc0ac\uc6a9\ud558\ub294 base_image\uc5d0 \ud328\ud0a4\uc9c0\ub4e4\uc774 \uc804\ubd80 \uc124\uce58\ub418\uc5b4 \uc788\ub2e4\uba74 \ucd94\uac00\uc801\uc778 \ud328\ud0a4\uc9c0 \uc124\uce58 \uc5c6\uc774 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 Dockerfile\uc744 \uc791\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-dockerfile"},"FROM python:3.7\n\nRUN pip install dill pandas scikit-learn\n")),(0,r.kt)("p",null,"\uc704\uc758 Dockerfile\uc744 \uc774\uc6a9\ud574 \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc2e4\uc2b5\uc5d0\uc11c \uc0ac\uc6a9\ud574\ubcfc \ub3c4\ucee4 \ud5c8\ube0c\ub294 ghcr\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uac01\uc790 \ud658\uacbd\uc5d0 \ub9de\ucd94\uc5b4\uc11c \ub3c4\ucee4 \ud5c8\ube0c\ub97c \uc120\ud0dd \ud6c4 \uc5c5\ub85c\ub4dc\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker build . -f Dockerfile -t ghcr.io/mlops-for-all/base-image\ndocker push ghcr.io/mlops-for-all/base-image\n")),(0,r.kt)("p",null,"\uc774\uc81c base_image\ub97c \uc785\ub825\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n base_image="ghcr.io/mlops-for-all/base-image:latest",\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc774\uc81c \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucef4\ud30c\uc77c\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: kernel, type: String}\noutputs:\n- {name: model, type: dill}\nimplementation:\n container:\n image: ghcr.io/mlops-for-all/base-image:latest\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --kernel\n - {inputValue: kernel}\n - --model\n - {outputPath: model}\n')),(0,r.kt)("p",null,"base_image\uac00 \uc6b0\ub9ac\uac00 \uc124\uc815\ud55c \uac12\uc73c\ub85c \ubc14\ub010 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"2-packages_to_install"},"2. packages_to_install"),(0,r.kt)("p",null,"\ud558\uc9c0\ub9cc \ud328\ud0a4\uc9c0\uac00 \ucd94\uac00\ub420 \ub54c\ub9c8\ub2e4 docker \uc774\ubbf8\uc9c0\ub97c \uacc4\uc18d\ud574\uc11c \uc0c8\ub85c \uc0dd\uc131\ud558\ub294 \uc791\uc5c5\uc740 \ub9ce\uc740 \uc2dc\uac04\uc774 \uc18c\uc694\ub429\ub2c8\ub2e4.\n\uc774 \ub54c, ",(0,r.kt)("inlineCode",{parentName:"p"},"packages_to_install")," argument \ub97c \uc0ac\uc6a9\ud558\uba74 \ud328\ud0a4\uc9c0\ub97c \ucee8\ud14c\uc774\ub108\uc5d0 \uc27d\uac8c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill==0.3.4", "pandas==1.3.4", "scikit-learn==1.0.1"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: kernel, type: String}\noutputs:\n- {name: model, type: dill}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill==0.3.4\' \'pandas==1.3.4\' \'scikit-learn==1.0.1\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill==0.3.4\' \'pandas==1.3.4\'\n \'scikit-learn==1.0.1\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --kernel\n - {inputValue: kernel}\n - --model\n - {outputPath: model}\n')),(0,r.kt)("p",null,"\uc704\uc5d0 \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub97c \uc880 \ub354 \uc790\uc138\ud788 \ub4e4\uc5ec\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"pip install dill==0.3.4 pandas==1.3.4 scikit-learn==1.0.1")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\uc0dd\uc131\ub41c yaml \ud30c\uc77c\uc744 \uc790\uc138\ud788 \ubcf4\uba74, \ub2e4\uc74c\uacfc \uac19\uc740 \uc904\uc774 \uc790\ub3d9\uc73c\ub85c \ucd94\uac00\ub418\uc5b4 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub418\uae30 \ub54c\ubb38\uc5d0 \uc624\ub958 \uc5c6\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"}," command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n 'dill==0.3.4' 'pandas==1.3.4' 'scikit-learn==1.0.1' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location 'dill==0.3.4' 'pandas==1.3.4'\n 'scikit-learn==1.0.1' --user) && \"$0\" \"$@\"\n")))}_.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a7958b24.daecbc7a.js b/assets/js/a7958b24.daecbc7a.js new file mode 100644 index 00000000..1ccf85e9 --- /dev/null +++ b/assets/js/a7958b24.daecbc7a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3255],{3905:(n,e,t)=>{t.d(e,{Zo:()=>m,kt:()=>c});var a=t(7294);function r(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function p(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,a)}return t}function i(n){for(var e=1;e=0||(r[t]=n[t]);return r}(n,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(n);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(r[t]=n[t])}return r}var o=a.createContext({}),s=function(n){var e=a.useContext(o),t=e;return n&&(t="function"==typeof n?n(e):i(i({},e),n)),t},m=function(n){var e=s(n.components);return a.createElement(o.Provider,{value:e},n.children)},d="mdxType",_={inlineCode:"code",wrapper:function(n){var e=n.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(n,e){var t=n.components,r=n.mdxType,p=n.originalType,o=n.parentName,m=l(n,["components","mdxType","originalType","parentName"]),d=s(t),u=r,c=d["".concat(o,".").concat(u)]||d[u]||_[u]||p;return t?a.createElement(c,i(i({ref:e},m),{},{components:t})):a.createElement(c,i({ref:e},m))}));function c(n,e){var t=arguments,r=e&&e.mdxType;if("string"==typeof n||r){var p=t.length,i=new Array(p);i[0]=u;var l={};for(var o in e)hasOwnProperty.call(e,o)&&(l[o]=e[o]);l.originalType=n,l[d]="string"==typeof n?n:r,i[1]=l;for(var s=2;s{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>_,frontMatter:()=>p,metadata:()=>l,toc:()=>s});var a=t(7462),r=(t(7294),t(3905));const p={title:"9. Component - Environment",description:"",sidebar_position:9,contributors:["Jongseob Jeon"]},i=void 0,l={unversionedId:"kubeflow/advanced-environment",id:"kubeflow/advanced-environment",title:"9. Component - Environment",description:"",source:"@site/docs/kubeflow/advanced-environment.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-environment",permalink:"/docs/kubeflow/advanced-environment",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-environment.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:9,frontMatter:{title:"9. Component - Environment",description:"",sidebar_position:9,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"8. Component - InputPath/OutputPath",permalink:"/docs/kubeflow/advanced-component"},next:{title:"10. Pipeline - Setting",permalink:"/docs/kubeflow/advanced-pipeline"}},o={},s=[{value:"Component Environment",id:"component-environment",level:2},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:3},{value:"\ud328\ud0a4\uc9c0 \ucd94\uac00 \ubc29\ubc95",id:"\ud328\ud0a4\uc9c0-\ucd94\uac00-\ubc29\ubc95",level:2},{value:"1. base_image",id:"1-base_image",level:3},{value:"2. packages_to_install",id:"2-packages_to_install",level:3}],m={toc:s},d="wrapper";function _(n){let{components:e,...t}=n;return(0,r.kt)(d,(0,a.Z)({},m,t,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"component-environment"},"Component Environment"),(0,r.kt)("p",null,"\uc55e\uc11c ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-component"},"8. Component - InputPath/OutputPath"),"\uc5d0\uc11c \uc791\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uba74 \uc2e4\ud328\ud558\uac8c \ub429\ub2c8\ub2e4. \uc65c \uc2e4\ud328\ud558\ub294\uc9c0 \uc54c\uc544\ubcf4\uace0 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub420 \uc218 \uc788\ub3c4\ub85d \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-component#convert-to-kubeflow-format"},"\uc55e\uc5d0\uc11c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8"),"\ub97c yaml\ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@create_component_from_func\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc704\uc758 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \ud30c\uc77c\uc744 \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: model, type: dill}\n- {name: kernel, type: String}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --model\n - {inputPath: model}\n - --kernel\n - {inputValue: kernel}\n')),(0,r.kt)("p",null,"\uc55e\uc11c ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-component#convert-to-kubeflow-format"},"Basic Usage Component"),"\uc5d0\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc5d0 \ub530\ub974\uba74 \uc774 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\ud558\uc9c0\ub9cc \uc704\uc5d0\uc11c \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uac8c \ub429\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8 \uc774\uc720\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \uc2e4\ud589\ub418\ub294 \ubc29\uc2dd\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","Kubeflow\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub294 \uac01\uac01 \ub3c5\ub9bd\ub41c \ucee8\ud14c\uc774\ub108 \uc704\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc790\uc138\ud788 \ubcf4\uba74 \uc0dd\uc131\ub41c \ub9cc\ub4e0 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \uc5d0\uc11c \uc815\ud574\uc9c4 \uc774\ubbf8\uc9c0\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"image: python:3.7")," \uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\uc81c \uc5b4\ub5a4 \uc774\uc720 \ub54c\ubb38\uc5d0 \uc2e4\ud589\uc774 \uc548 \ub418\ub294\uc9c0 \ub208\uce58\ucc44\uc2e0 \ubd84\ub4e4\ub3c4 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"python:3.7")," \uc774\ubbf8\uc9c0\uc5d0\ub294 \uc6b0\ub9ac\uac00 \uc0ac\uc6a9\ud558\uace0\uc790 \ud558\ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"dill"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"pandas"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"sklearn")," \uc774 \uc124\uce58\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub7ec\ubbc0\ub85c \uc2e4\ud589\ud560 \ub54c \ud574\ub2f9 \ud328\ud0a4\uc9c0\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294\ub2e4\ub294 \uc5d0\ub7ec\uc640 \ud568\uaed8 \uc2e4\ud589\uc774 \uc548 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uadf8\ub7fc \uc5b4\ub5bb\uac8c \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc744\uae4c\uc694?"),(0,r.kt)("h2",{id:"\ud328\ud0a4\uc9c0-\ucd94\uac00-\ubc29\ubc95"},"\ud328\ud0a4\uc9c0 \ucd94\uac00 \ubc29\ubc95"),(0,r.kt)("p",null,"Kubeflow\ub97c \ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ub450 \uac00\uc9c0 \ubc29\ubc95\uc744 \ud1b5\ud574 \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"base_image")," \uc0ac\uc6a9"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"package_to_install")," \uc0ac\uc6a9")),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \ucef4\ud30c\uc77c\ud560 \ub54c \uc0ac\uc6a9\ud588\ub358 \ud568\uc218 ",(0,r.kt)("inlineCode",{parentName:"p"},"create_component_from_func")," \uac00 \uc5b4\ub5a4 argument\ub4e4\uc744 \ubc1b\uc744 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"def create_component_from_func(\n func: Callable,\n output_component_file: Optional[str] = None,\n base_image: Optional[str] = None,\n packages_to_install: List[str] = None,\n annotations: Optional[Mapping[str, str]] = None,\n):\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"func"),": \ucef4\ud3ec\ub10c\ud2b8\ub85c \ub9cc\ub4e4 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c \ud568\uc218"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"base_image"),": \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \uc2e4\ud589\ud560 \uc774\ubbf8\uc9c0"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"packages_to_install"),": \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc11c \ucd94\uac00\ub85c \uc124\uce58\ud574\uc57c \ud558\ub294 \ud328\ud0a4\uc9c0")),(0,r.kt)("h3",{id:"1-base_image"},"1. base_image"),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub97c \uc880 \ub354 \uc790\uc138\ud788 \ub4e4\uc5ec\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull base_image")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"pip install packages_to_install")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\ub9cc\uc57d \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc0ac\uc6a9\ud558\ub294 base_image\uc5d0 \ud328\ud0a4\uc9c0\ub4e4\uc774 \uc804\ubd80 \uc124\uce58\ub418\uc5b4 \uc788\ub2e4\uba74 \ucd94\uac00\uc801\uc778 \ud328\ud0a4\uc9c0 \uc124\uce58 \uc5c6\uc774 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 Dockerfile\uc744 \uc791\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-dockerfile"},"FROM python:3.7\n\nRUN pip install dill pandas scikit-learn\n")),(0,r.kt)("p",null,"\uc704\uc758 Dockerfile\uc744 \uc774\uc6a9\ud574 \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc2e4\uc2b5\uc5d0\uc11c \uc0ac\uc6a9\ud574\ubcfc \ub3c4\ucee4 \ud5c8\ube0c\ub294 ghcr\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uac01\uc790 \ud658\uacbd\uc5d0 \ub9de\ucd94\uc5b4\uc11c \ub3c4\ucee4 \ud5c8\ube0c\ub97c \uc120\ud0dd \ud6c4 \uc5c5\ub85c\ub4dc\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker build . -f Dockerfile -t ghcr.io/mlops-for-all/base-image\ndocker push ghcr.io/mlops-for-all/base-image\n")),(0,r.kt)("p",null,"\uc774\uc81c base_image\ub97c \uc785\ub825\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n base_image="ghcr.io/mlops-for-all/base-image:latest",\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc774\uc81c \uc0dd\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ucef4\ud30c\uc77c\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: kernel, type: String}\noutputs:\n- {name: model, type: dill}\nimplementation:\n container:\n image: ghcr.io/mlops-for-all/base-image:latest\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --kernel\n - {inputValue: kernel}\n - --model\n - {outputPath: model}\n')),(0,r.kt)("p",null,"base_image\uac00 \uc6b0\ub9ac\uac00 \uc124\uc815\ud55c \uac12\uc73c\ub85c \ubc14\ub010 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"2-packages_to_install"},"2. packages_to_install"),(0,r.kt)("p",null,"\ud558\uc9c0\ub9cc \ud328\ud0a4\uc9c0\uac00 \ucd94\uac00\ub420 \ub54c\ub9c8\ub2e4 docker \uc774\ubbf8\uc9c0\ub97c \uacc4\uc18d\ud574\uc11c \uc0c8\ub85c \uc0dd\uc131\ud558\ub294 \uc791\uc5c5\uc740 \ub9ce\uc740 \uc2dc\uac04\uc774 \uc18c\uc694\ub429\ub2c8\ub2e4.\n\uc774 \ub54c, ",(0,r.kt)("inlineCode",{parentName:"p"},"packages_to_install")," argument \ub97c \uc0ac\uc6a9\ud558\uba74 \ud328\ud0a4\uc9c0\ub97c \ucee8\ud14c\uc774\ub108\uc5d0 \uc27d\uac8c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill==0.3.4", "pandas==1.3.4", "scikit-learn==1.0.1"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\nif __name__ == "__main__":\n train_from_csv.component_spec.save("train_from_csv.yaml")\n')),(0,r.kt)("p",null,"\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,r.kt)("inlineCode",{parentName:"p"},"train_from_csv.yaml")," \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'name: Train from csv\ninputs:\n- {name: train_data, type: csv}\n- {name: train_target, type: csv}\n- {name: kernel, type: String}\noutputs:\n- {name: model, type: dill}\nimplementation:\n container:\n image: python:3.7\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill==0.3.4\' \'pandas==1.3.4\' \'scikit-learn==1.0.1\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill==0.3.4\' \'pandas==1.3.4\'\n \'scikit-learn==1.0.1\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n kernel,\n ):\n import dill\n import pandas as pd\n\n from sklearn.svm import SVC\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n args:\n - --train-data\n - {inputPath: train_data}\n - --train-target\n - {inputPath: train_target}\n - --kernel\n - {inputValue: kernel}\n - --model\n - {outputPath: model}\n')),(0,r.kt)("p",null,"\uc704\uc5d0 \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\ub418\ub294 \uc21c\uc11c\ub97c \uc880 \ub354 \uc790\uc138\ud788 \ub4e4\uc5ec\ub2e4\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"docker pull python:3.7")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"pip install dill==0.3.4 pandas==1.3.4 scikit-learn==1.0.1")),(0,r.kt)("li",{parentName:"ol"},"run ",(0,r.kt)("inlineCode",{parentName:"li"},"command"))),(0,r.kt)("p",null,"\uc0dd\uc131\ub41c yaml \ud30c\uc77c\uc744 \uc790\uc138\ud788 \ubcf4\uba74, \ub2e4\uc74c\uacfc \uac19\uc740 \uc904\uc774 \uc790\ub3d9\uc73c\ub85c \ucd94\uac00\ub418\uc5b4 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub418\uae30 \ub54c\ubb38\uc5d0 \uc624\ub958 \uc5c6\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"}," command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n 'dill==0.3.4' 'pandas==1.3.4' 'scikit-learn==1.0.1' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location 'dill==0.3.4' 'pandas==1.3.4'\n 'scikit-learn==1.0.1' --user) && \"$0\" \"$@\"\n")))}_.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/affd256f.0694919a.js b/assets/js/affd256f.0694919a.js new file mode 100644 index 00000000..7d451ba0 --- /dev/null +++ b/assets/js/affd256f.0694919a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3457],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},k="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),k=s(a),c=r,d=k["".concat(p,".").concat(c)]||k[c]||m[c]||o;return a?n.createElement(d,l(l({ref:t},u),{},{components:a})):n.createElement(d,l({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[k]="string"==typeof e?e:r,l[1]=i;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const o={title:"2. Notebooks",description:"",sidebar_position:2,contributors:["Jaeyeon Kim"]},l=void 0,i={unversionedId:"kubeflow-dashboard-guide/notebooks",id:"kubeflow-dashboard-guide/notebooks",title:"2. Notebooks",description:"",source:"@site/docs/kubeflow-dashboard-guide/notebooks.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/notebooks",permalink:"/docs/kubeflow-dashboard-guide/notebooks",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/notebooks.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Notebooks",description:"",sidebar_position:2,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Central Dashboard",permalink:"/docs/kubeflow-dashboard-guide/intro"},next:{title:"3. Tensorboards",permalink:"/docs/kubeflow-dashboard-guide/tensorboards"}},p={},s=[{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84(Notebook Server) \uc0dd\uc131\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84notebook-server-\uc0dd\uc131\ud558\uae30",level:2},{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc811\uc18d\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc811\uc18d\ud558\uae30",level:2},{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc911\ub2e8\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc911\ub2e8\ud558\uae30",level:2}],u={toc:s},k="wrapper";function m(e){let{components:t,...o}=e;return(0,r.kt)(k,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84notebook-server-\uc0dd\uc131\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84(Notebook Server) \uc0dd\uc131\ud558\uae30"),(0,r.kt)("p",null,"\ub2e4\uc74c Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Notebooks\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"left-tabs",src:a(7511).Z,width:"3940",height:"1278"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"Notebooks \ud0ed\uc740 JupyterHub\uc640 \ube44\uc2b7\ud558\uac8c \uc720\uc800\ubcc4\ub85c jupyter notebook \ubc0f code server \ud658\uacbd(\uc774\ud558 \ub178\ud2b8\ubd81 \uc11c\ubc84)\uc744 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc0dd\uc131\ud558\uace0 \uc811\uc18d\ud560 \uc218 \uc788\ub294 \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-home",src:a(1288).Z,width:"5008",height:"2682"})),(0,r.kt)("p",null,"\uc624\ub978\ucabd \uc704\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"+ NEW NOTEBOOK")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"new-notebook",src:a(8666).Z,width:"1900",height:"312"})),(0,r.kt)("p",null,"\uc544\ub798\uc640 \uac19\uc740 \ud654\uba74\uc774 \ub098\ud0c0\ub098\uba74, \uc774\uc81c \uc0dd\uc131\ud560 \ub178\ud2b8\ubd81 \uc11c\ubc84\uc758 \uc2a4\ud399(Spec)\uc744 \uba85\uc2dc\ud558\uc5ec \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"create",src:a(4164).Z,width:"1738",height:"1674"})),(0,r.kt)("details",null,(0,r.kt)("summary",null,"\uac01 \uc2a4\ud399\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"name"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uad6c\ubd84\ud560 \uc218 \uc788\ub294 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"namespace")," :",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub530\ub85c \ubcc0\uacbd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. (\ud604\uc7ac \ub85c\uadf8\uc778\ud55c user \uacc4\uc815\uc758 namespace\uc774 \uc790\ub3d9\uc73c\ub85c \uc9c0\uc815\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.)"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Image"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"sklearn, pytorch, tensorflow \ub4f1\uc758 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0\uac00 \ubbf8\ub9ac \uc124\uce58\ub41c jupyter lab \uc774\ubbf8\uc9c0 \uc911 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc5d0\uc11c GPU\ub97c \uc0ac\uc6a9\ud558\uc5ec tensorflow-cuda, pytorch-cuda \ub4f1\uc758 \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, ",(0,r.kt)("strong",{parentName:"li"},"\ud558\ub2e8\uc758 GPUs")," \ubd80\ubd84\uc744 \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},"\ucd94\uac00\uc801\uc778 \ud328\ud0a4\uc9c0\ub098 \uc18c\uc2a4\ucf54\ub4dc \ub4f1\uc744 \ud3ec\ud568\ud55c \ucee4\uc2a4\ud140(Custom) \ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 \ucee4\uc2a4\ud140 \uc774\ubbf8\uc9c0(Custom Image)\ub97c \ub9cc\ub4e4\uace0 \ubc30\ud3ec \ud6c4 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"CPU / RAM"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ud544\uc694\ud55c \uc790\uc6d0 \uc0ac\uc6a9\ub7c9\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"cpu : core \ub2e8\uc704",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uac00\uc0c1 core \uac1c\uc218 \ub2e8\uc704\ub97c \uc758\ubbf8\ud558\uba70, int \ud615\uc2dd\uc774 \uc544\ub2cc ",(0,r.kt)("inlineCode",{parentName:"li"},"1.5"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"2.7")," \ub4f1\uc758 float \ud615\uc2dd\ub3c4 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},"memory : Gi \ub2e8\uc704"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"GPUs"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc5d0 \ud560\ub2f9\ud560 GPU \uac1c\uc218\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"None"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"GPU \uc790\uc6d0\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uc0c1\ud669"))),(0,r.kt)("li",{parentName:"ul"},"1, 2, 4",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"GPU 1, 2, 4 \uac1c \ud560\ub2f9"))))),(0,r.kt)("li",{parentName:"ul"},"GPU Vendor",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc55e\uc758 ",(0,r.kt)("a",{parentName:"li",href:"/docs/setup-kubernetes/setup-nvidia-gpu"},"(Optional) Setup GPU")," \ub97c \ub530\ub77c nvidia gpu plugin\uc744 \uc124\uce58\ud558\uc600\ub2e4\uba74 NVIDIA\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Workspace Volume"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc5d0\uc11c \ud544\uc694\ud55c \ub9cc\ud07c\uc758 \ub514\uc2a4\ud06c \uc6a9\ub7c9\uc744 \uc785\ub825\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"Type \uacfc Name \uc740 \ubcc0\uacbd\ud558\uc9c0 \uc54a\uace0, ",(0,r.kt)("strong",{parentName:"li"},"\ub514\uc2a4\ud06c \uc6a9\ub7c9\uc744 \ub298\ub9ac\uace0 \uc2f6\uac70\ub098")," ",(0,r.kt)("strong",{parentName:"li"},"AccessMode \ub97c \ubcc0\uacbd\ud558\uace0 \uc2f6\uc744")," \ub54c\uc5d0\ub9cc \ubcc0\uacbd\ud574\uc11c \uc0ac\uc6a9\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\"Don't use Persistent Storage for User's home\"")," \uccb4\ud06c\ubc15\uc2a4\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84\uc758 \uc791\uc5c5 \ub0b4\uc6a9\uc744 \uc800\uc7a5\ud558\uc9c0 \uc54a\uc544\ub3c4 \uc0c1\uad00\uc5c6\uc744 \ub54c\uc5d0\ub9cc \ud074\ub9ad\ud569\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"li"},"\uc77c\ubc18\uc801\uc73c\ub85c\ub294 \ub204\ub974\uc9c0 \uc54a\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.")),(0,r.kt)("li",{parentName:"ul"},'\uae30\uc874\uc5d0 \ubbf8\ub9ac \uc0dd\uc131\ud574\ub450\uc5c8\ub358 PVC\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \ub54c\uc5d0\ub294, Type\uc744 "Existing" \uc73c\ub85c \uc785\ub825\ud558\uc5ec \ud574\ub2f9 PVC\uc758 \uc774\ub984\uc744 \uc785\ub825\ud558\uc5ec \uc0ac\uc6a9\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.'))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Data Volumes"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucd94\uac00\uc801\uc778 \uc2a4\ud1a0\ub9ac\uc9c0 \uc790\uc6d0\uc774 \ud544\uc694\ud558\ub2e4\uba74 ",(0,r.kt)("strong",{parentName:"li"},'"+ ADD VOLUME"')," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("del",{parentName:"li"},"Configurations, Affinity/Tolerations, Miscellaneous Settings"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc73c\ub85c\ub294 \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c ",(0,r.kt)("em",{parentName:"li"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc790\uc138\ud55c \uc124\uba85\uc744 \uc0dd\ub7b5\ud569\ub2c8\ub2e4."))))),(0,r.kt)("p",null,"\ubaa8\ub450 \uc815\uc0c1\uc801\uc73c\ub85c \uc785\ub825\ud558\uc600\ub2e4\uba74 \ud558\ub2e8\uc758 ",(0,r.kt)("strong",{parentName:"p"},"LAUNCH")," \ubc84\ud2bc\uc774 \ud65c\uc131\ud654\ub418\uba70, \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131\uc774 \uc2dc\uc791\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"creating",src:a(8290).Z,width:"1928",height:"400"})),(0,r.kt)("p",null,"\uc0dd\uc131 \ud6c4 \uc544\ub798\uc640 \uac19\uc774 ",(0,r.kt)("strong",{parentName:"p"},"Status")," \uac00 \ucd08\ub85d\uc0c9 \uccb4\ud06c \ud45c\uc2dc \uc544\uc774\ucf58\uc73c\ub85c \ubcc0\ud558\uba70, ",(0,r.kt)("strong",{parentName:"p"},"CONNECT \ubc84\ud2bc"),"\uc774 \ud65c\uc131\ud654\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"created",src:a(2519).Z,width:"1852",height:"352"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc811\uc18d\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc811\uc18d\ud558\uae30"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"CONNECT \ubc84\ud2bc"),"\uc744 \ud074\ub9ad\ud558\uba74 \ube0c\ub77c\uc6b0\uc800\uc5d0 \uc0c8 \ucc3d\uc774 \uc5f4\ub9ac\uba70, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ubcf4\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-access",src:a(5675).Z,width:"2898",height:"1990"})),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Launcher"),"\uc758 Notebook, Console, Terminal \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null," \uc0dd\uc131\ub41c Notebook \ud654\uba74"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-console",src:a(4831).Z,width:"2850",height:"736"})),(0,r.kt)("p",null," \uc0dd\uc131\ub41c Terminal \ud654\uba74"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"terminal-console",src:a(4155).Z,width:"2834",height:"806"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc911\ub2e8\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc911\ub2e8\ud558\uae30"),(0,r.kt)("p",null,"\ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc624\ub79c \uc2dc\uac04 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0, \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc758 \ud6a8\uc728\uc801\uc778 \ub9ac\uc18c\uc2a4 \uc0ac\uc6a9\uc744 \uc704\ud574\uc11c \ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc911\ub2e8(Stop)\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"p"},"\ub2e8, \uc774 \uacbd\uc6b0 \ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131 \uc2dc Workspace Volume \ub610\ub294 Data Volume\uc73c\ub85c \uc9c0\uc815\ud574\ub193\uc740 \uacbd\ub85c \uc678\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub294 \ubaa8\ub450 \ucd08\uae30\ud654\ub418\ub294 \uac83\uc5d0 \uc8fc\uc758\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("br",{parentName:"p"}),"\n","\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131 \ub2f9\uc2dc \uacbd\ub85c\ub97c \ubcc0\uacbd\ud558\uc9c0 \uc54a\uc558\ub2e4\uba74, \ub514\ud3f4\ud2b8(Default) Workspace Volume\uc758 \uacbd\ub85c\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"/home/jovyan")," \uc774\ubbc0\ub85c, ",(0,r.kt)("inlineCode",{parentName:"p"},"/home/jovyan")," \uc758 \ud558\uc704 \uacbd\ub85c \uc774\uc678\uc758 \uacbd\ub85c\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub294 \ubaa8\ub450 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"STOP")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub178\ud2b8\ubd81 \uc11c\ubc84\uac00 \uc911\ub2e8\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-stop",src:a(1970).Z,width:"1832",height:"1014"})),(0,r.kt)("p",null,"\uc911\ub2e8\uc774 \uc644\ub8cc\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"CONNECT")," \ubc84\ud2bc\uc774 \ube44\ud65c\uc131\ud654\ub418\uba70, ",(0,r.kt)("inlineCode",{parentName:"p"},"PLAY")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc2dc \uc815\uc0c1\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-restart",src:a(8586).Z,width:"1888",height:"932"})))}m.isMDXComponent=!0},4164:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/create-b349ef65d07ce46d18eb743995e83328.png"},2519:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/created-ea0c6e5b069a3bf68ec30dd2d9c8fda9.png"},8290:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/creating-fea15b81993043e41562213ce27be9c8.png"},7511:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},8666:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/new-notebook-f462329837ba1224dad0fdd5065aa161.png"},5675:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-access-04af482a0de3bf472671bb8106d2124d.png"},4831:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-console-57b91be5611c7bc685da1b29c792a45c.png"},1288:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-home-bc23928c112e027b46359aad251a8b69.png"},8586:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-restart-6550d536547af1c9e19f8ab05946ee9d.png"},1970:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-stop-bcc860736062b5cfb5831bab545dc60c.png"},4155:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/terminal-console-7fb950f9bf731144081feb0afb245bed.png"}}]); \ No newline at end of file diff --git a/assets/js/affd256f.adb28670.js b/assets/js/affd256f.adb28670.js deleted file mode 100644 index daa9b6cf..00000000 --- a/assets/js/affd256f.adb28670.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3457],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},k="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),k=s(a),c=r,d=k["".concat(p,".").concat(c)]||k[c]||m[c]||o;return a?n.createElement(d,l(l({ref:t},u),{},{components:a})):n.createElement(d,l({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[k]="string"==typeof e?e:r,l[1]=i;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const o={title:"2. Notebooks",description:"",sidebar_position:2,contributors:["Jaeyeon Kim"]},l=void 0,i={unversionedId:"kubeflow-dashboard-guide/notebooks",id:"kubeflow-dashboard-guide/notebooks",title:"2. Notebooks",description:"",source:"@site/docs/kubeflow-dashboard-guide/notebooks.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/notebooks",permalink:"/docs/kubeflow-dashboard-guide/notebooks",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/notebooks.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Notebooks",description:"",sidebar_position:2,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Central Dashboard",permalink:"/docs/kubeflow-dashboard-guide/intro"},next:{title:"3. Tensorboards",permalink:"/docs/kubeflow-dashboard-guide/tensorboards"}},p={},s=[{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84(Notebook Server) \uc0dd\uc131\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84notebook-server-\uc0dd\uc131\ud558\uae30",level:2},{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc811\uc18d\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc811\uc18d\ud558\uae30",level:2},{value:"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc911\ub2e8\ud558\uae30",id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc911\ub2e8\ud558\uae30",level:2}],u={toc:s},k="wrapper";function m(e){let{components:t,...o}=e;return(0,r.kt)(k,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84notebook-server-\uc0dd\uc131\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84(Notebook Server) \uc0dd\uc131\ud558\uae30"),(0,r.kt)("p",null,"\ub2e4\uc74c Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Notebooks\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"left-tabs",src:a(7511).Z,width:"3940",height:"1278"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"Notebooks \ud0ed\uc740 JupyterHub\uc640 \ube44\uc2b7\ud558\uac8c \uc720\uc800\ubcc4\ub85c jupyter notebook \ubc0f code server \ud658\uacbd(\uc774\ud558 \ub178\ud2b8\ubd81 \uc11c\ubc84)\uc744 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc0dd\uc131\ud558\uace0 \uc811\uc18d\ud560 \uc218 \uc788\ub294 \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-home",src:a(1288).Z,width:"5008",height:"2682"})),(0,r.kt)("p",null,"\uc624\ub978\ucabd \uc704\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"+ NEW NOTEBOOK")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"new-notebook",src:a(8666).Z,width:"1900",height:"312"})),(0,r.kt)("p",null,"\uc544\ub798\uc640 \uac19\uc740 \ud654\uba74\uc774 \ub098\ud0c0\ub098\uba74, \uc774\uc81c \uc0dd\uc131\ud560 \ub178\ud2b8\ubd81 \uc11c\ubc84\uc758 \uc2a4\ud399(Spec)\uc744 \uba85\uc2dc\ud558\uc5ec \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"create",src:a(4164).Z,width:"1738",height:"1674"})),(0,r.kt)("details",null,(0,r.kt)("summary",null,"\uac01 \uc2a4\ud399\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"name"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uad6c\ubd84\ud560 \uc218 \uc788\ub294 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"namespace")," :",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub530\ub85c \ubcc0\uacbd\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. (\ud604\uc7ac \ub85c\uadf8\uc778\ud55c user \uacc4\uc815\uc758 namespace\uc774 \uc790\ub3d9\uc73c\ub85c \uc9c0\uc815\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.)"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Image"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"sklearn, pytorch, tensorflow \ub4f1\uc758 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0\uac00 \ubbf8\ub9ac \uc124\uce58\ub41c jupyter lab \uc774\ubbf8\uc9c0 \uc911 \uc0ac\uc6a9\ud560 \uc774\ubbf8\uc9c0\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc5d0\uc11c GPU\ub97c \uc0ac\uc6a9\ud558\uc5ec tensorflow-cuda, pytorch-cuda \ub4f1\uc758 \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, ",(0,r.kt)("strong",{parentName:"li"},"\ud558\ub2e8\uc758 GPUs")," \ubd80\ubd84\uc744 \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},"\ucd94\uac00\uc801\uc778 \ud328\ud0a4\uc9c0\ub098 \uc18c\uc2a4\ucf54\ub4dc \ub4f1\uc744 \ud3ec\ud568\ud55c \ucee4\uc2a4\ud140(Custom) \ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 \ucee4\uc2a4\ud140 \uc774\ubbf8\uc9c0(Custom Image)\ub97c \ub9cc\ub4e4\uace0 \ubc30\ud3ec \ud6c4 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"CPU / RAM"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ud544\uc694\ud55c \uc790\uc6d0 \uc0ac\uc6a9\ub7c9\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"cpu : core \ub2e8\uc704",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uac00\uc0c1 core \uac1c\uc218 \ub2e8\uc704\ub97c \uc758\ubbf8\ud558\uba70, int \ud615\uc2dd\uc774 \uc544\ub2cc ",(0,r.kt)("inlineCode",{parentName:"li"},"1.5"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"2.7")," \ub4f1\uc758 float \ud615\uc2dd\ub3c4 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},"memory : Gi \ub2e8\uc704"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"GPUs"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc5d0 \ud560\ub2f9\ud560 GPU \uac1c\uc218\ub97c \uc785\ub825\ud569\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"None"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"GPU \uc790\uc6d0\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uc0c1\ud669"))),(0,r.kt)("li",{parentName:"ul"},"1, 2, 4",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"GPU 1, 2, 4 \uac1c \ud560\ub2f9"))))),(0,r.kt)("li",{parentName:"ul"},"GPU Vendor",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc55e\uc758 ",(0,r.kt)("a",{parentName:"li",href:"/docs/setup-kubernetes/setup-nvidia-gpu"},"(Optional) Setup GPU")," \ub97c \ub530\ub77c nvidia gpu plugin\uc744 \uc124\uce58\ud558\uc600\ub2e4\uba74 NVIDIA\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Workspace Volume"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc5d0\uc11c \ud544\uc694\ud55c \ub9cc\ud07c\uc758 \ub514\uc2a4\ud06c \uc6a9\ub7c9\uc744 \uc785\ub825\ud569\ub2c8\ub2e4."),(0,r.kt)("li",{parentName:"ul"},"Type \uacfc Name \uc740 \ubcc0\uacbd\ud558\uc9c0 \uc54a\uace0, ",(0,r.kt)("strong",{parentName:"li"},"\ub514\uc2a4\ud06c \uc6a9\ub7c9\uc744 \ub298\ub9ac\uace0 \uc2f6\uac70\ub098")," ",(0,r.kt)("strong",{parentName:"li"},"AccessMode \ub97c \ubcc0\uacbd\ud558\uace0 \uc2f6\uc744")," \ub54c\uc5d0\ub9cc \ubcc0\uacbd\ud574\uc11c \uc0ac\uc6a9\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\"Don't use Persistent Storage for User's home\"")," \uccb4\ud06c\ubc15\uc2a4\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84\uc758 \uc791\uc5c5 \ub0b4\uc6a9\uc744 \uc800\uc7a5\ud558\uc9c0 \uc54a\uc544\ub3c4 \uc0c1\uad00\uc5c6\uc744 \ub54c\uc5d0\ub9cc \ud074\ub9ad\ud569\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"li"},"\uc77c\ubc18\uc801\uc73c\ub85c\ub294 \ub204\ub974\uc9c0 \uc54a\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.")),(0,r.kt)("li",{parentName:"ul"},'\uae30\uc874\uc5d0 \ubbf8\ub9ac \uc0dd\uc131\ud574\ub450\uc5c8\ub358 PVC\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \ub54c\uc5d0\ub294, Type\uc744 "Existing" \uc73c\ub85c \uc785\ub825\ud558\uc5ec \ud574\ub2f9 PVC\uc758 \uc774\ub984\uc744 \uc785\ub825\ud558\uc5ec \uc0ac\uc6a9\ud558\uc2dc\uba74 \ub429\ub2c8\ub2e4.'))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Data Volumes"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\ucd94\uac00\uc801\uc778 \uc2a4\ud1a0\ub9ac\uc9c0 \uc790\uc6d0\uc774 \ud544\uc694\ud558\ub2e4\uba74 ",(0,r.kt)("strong",{parentName:"li"},'"+ ADD VOLUME"')," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("del",{parentName:"li"},"Configurations, Affinity/Tolerations, Miscellaneous Settings"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc73c\ub85c\ub294 \ud544\uc694\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c ",(0,r.kt)("em",{parentName:"li"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc790\uc138\ud55c \uc124\uba85\uc744 \uc0dd\ub7b5\ud569\ub2c8\ub2e4."))))),(0,r.kt)("p",null,"\ubaa8\ub450 \uc815\uc0c1\uc801\uc73c\ub85c \uc785\ub825\ud558\uc600\ub2e4\uba74 \ud558\ub2e8\uc758 ",(0,r.kt)("strong",{parentName:"p"},"LAUNCH")," \ubc84\ud2bc\uc774 \ud65c\uc131\ud654\ub418\uba70, \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131\uc774 \uc2dc\uc791\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"creating",src:a(8290).Z,width:"1928",height:"400"})),(0,r.kt)("p",null,"\uc0dd\uc131 \ud6c4 \uc544\ub798\uc640 \uac19\uc774 ",(0,r.kt)("strong",{parentName:"p"},"Status")," \uac00 \ucd08\ub85d\uc0c9 \uccb4\ud06c \ud45c\uc2dc \uc544\uc774\ucf58\uc73c\ub85c \ubcc0\ud558\uba70, ",(0,r.kt)("strong",{parentName:"p"},"CONNECT \ubc84\ud2bc"),"\uc774 \ud65c\uc131\ud654\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"created",src:a(2519).Z,width:"1852",height:"352"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc811\uc18d\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc811\uc18d\ud558\uae30"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"CONNECT \ubc84\ud2bc"),"\uc744 \ud074\ub9ad\ud558\uba74 \ube0c\ub77c\uc6b0\uc800\uc5d0 \uc0c8 \ucc3d\uc774 \uc5f4\ub9ac\uba70, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ubcf4\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-access",src:a(5675).Z,width:"2898",height:"1990"})),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Launcher"),"\uc758 Notebook, Console, Terminal \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null," \uc0dd\uc131\ub41c Notebook \ud654\uba74"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-console",src:a(4831).Z,width:"2850",height:"736"})),(0,r.kt)("p",null," \uc0dd\uc131\ub41c Terminal \ud654\uba74"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"terminal-console",src:a(4155).Z,width:"2834",height:"806"})),(0,r.kt)("hr",null),(0,r.kt)("h2",{id:"\ub178\ud2b8\ubd81-\uc11c\ubc84-\uc911\ub2e8\ud558\uae30"},"\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc911\ub2e8\ud558\uae30"),(0,r.kt)("p",null,"\ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc624\ub79c \uc2dc\uac04 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0, \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc758 \ud6a8\uc728\uc801\uc778 \ub9ac\uc18c\uc2a4 \uc0ac\uc6a9\uc744 \uc704\ud574\uc11c \ub178\ud2b8\ubd81 \uc11c\ubc84\ub97c \uc911\ub2e8(Stop)\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"p"},"\ub2e8, \uc774 \uacbd\uc6b0 \ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131 \uc2dc Workspace Volume \ub610\ub294 Data Volume\uc73c\ub85c \uc9c0\uc815\ud574\ub193\uc740 \uacbd\ub85c \uc678\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub294 \ubaa8\ub450 \ucd08\uae30\ud654\ub418\ub294 \uac83\uc5d0 \uc8fc\uc758\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("br",{parentName:"p"}),"\n","\ub178\ud2b8\ubd81 \uc11c\ubc84 \uc0dd\uc131 \ub2f9\uc2dc \uacbd\ub85c\ub97c \ubcc0\uacbd\ud558\uc9c0 \uc54a\uc558\ub2e4\uba74, \ub514\ud3f4\ud2b8(Default) Workspace Volume\uc758 \uacbd\ub85c\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84 \ub0b4\uc758 ",(0,r.kt)("inlineCode",{parentName:"p"},"/home/jovyan")," \uc774\ubbc0\ub85c, ",(0,r.kt)("inlineCode",{parentName:"p"},"/home/jovyan")," \uc758 \ud558\uc704 \uacbd\ub85c \uc774\uc678\uc758 \uacbd\ub85c\uc5d0 \uc800\uc7a5\ub41c \ub370\uc774\ud130\ub294 \ubaa8\ub450 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"STOP")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub178\ud2b8\ubd81 \uc11c\ubc84\uac00 \uc911\ub2e8\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-stop",src:a(1970).Z,width:"1832",height:"1014"})),(0,r.kt)("p",null,"\uc911\ub2e8\uc774 \uc644\ub8cc\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,r.kt)("inlineCode",{parentName:"p"},"CONNECT")," \ubc84\ud2bc\uc774 \ube44\ud65c\uc131\ud654\ub418\uba70, ",(0,r.kt)("inlineCode",{parentName:"p"},"PLAY")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc2dc \uc815\uc0c1\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"notebook-restart",src:a(8586).Z,width:"1888",height:"932"})))}m.isMDXComponent=!0},4164:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/create-b349ef65d07ce46d18eb743995e83328.png"},2519:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/created-ea0c6e5b069a3bf68ec30dd2d9c8fda9.png"},8290:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/creating-fea15b81993043e41562213ce27be9c8.png"},7511:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},8666:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/new-notebook-f462329837ba1224dad0fdd5065aa161.png"},5675:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-access-04af482a0de3bf472671bb8106d2124d.png"},4831:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-console-57b91be5611c7bc685da1b29c792a45c.png"},1288:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-home-bc23928c112e027b46359aad251a8b69.png"},8586:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-restart-6550d536547af1c9e19f8ab05946ee9d.png"},1970:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/notebook-stop-bcc860736062b5cfb5831bab545dc60c.png"},4155:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/terminal-console-7fb950f9bf731144081feb0afb245bed.png"}}]); \ No newline at end of file diff --git a/assets/js/b0207dc0.10d77d65.js b/assets/js/b0207dc0.10d77d65.js new file mode 100644 index 00000000..9455accd --- /dev/null +++ b/assets/js/b0207dc0.10d77d65.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5597],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),m=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=m(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=m(n),k=a,d=c["".concat(p,".").concat(k)]||c[k]||s[k]||o;return n?r.createElement(d,l(l({ref:t},u),{},{components:n})):r.createElement(d,l({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=k;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:a,l[1]=i;for(var m=2;m{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>s,frontMatter:()=>o,metadata:()=>i,toc:()=>m});var r=n(7462),a=(n(7294),n(3905));const o={title:"How to Contribute",sidebar_position:2},l=void 0,i={unversionedId:"how-to-contribute",id:"how-to-contribute",title:"How to Contribute",description:"How to Start",source:"@site/community/how-to-contribute.md",sourceDirName:".",slug:"/how-to-contribute",permalink:"/community/how-to-contribute",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/community/how-to-contribute.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"How to Contribute",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Community",permalink:"/community/community"},next:{title:"Contributors",permalink:"/community/contributors"}},p={},m=[{value:"How to Start",id:"how-to-start",level:2},{value:"Git Repo \uc900\ube44",id:"git-repo-\uc900\ube44",level:3},{value:"\ud658\uacbd \uc124\uc815",id:"\ud658\uacbd-\uc124\uc815",level:3},{value:"How to Contribute",id:"how-to-contribute",level:2},{value:"1. \uc0c8\ub85c\uc6b4 \ud3ec\uc2a4\ud2b8\ub97c \uc791\uc131\ud560 \ub54c",id:"1-\uc0c8\ub85c\uc6b4-\ud3ec\uc2a4\ud2b8\ub97c-\uc791\uc131\ud560-\ub54c",level:3},{value:"2. \uae30\uc874\uc758 \ud3ec\uc2a4\ud2b8\ub97c \uc218\uc815\ud560 \ub54c",id:"2-\uae30\uc874\uc758-\ud3ec\uc2a4\ud2b8\ub97c-\uc218\uc815\ud560-\ub54c",level:3},{value:"3. \ud504\ub85c\uc81d\ud2b8\uc5d0 \ucc98\uc74c \uae30\uc5ec\ud560 \ub54c",id:"3-\ud504\ub85c\uc81d\ud2b8\uc5d0-\ucc98\uc74c-\uae30\uc5ec\ud560-\ub54c",level:3},{value:"After Pull Request",id:"after-pull-request",level:2}],u={toc:m},c="wrapper";function s(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"how-to-start"},"How to Start"),(0,a.kt)("h3",{id:"git-repo-\uc900\ube44"},"Git Repo \uc900\ube44"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"https://github.com/mlops-for-all/mlops-for-all.github.io"},(0,a.kt)("em",{parentName:"a"},"\ubaa8\ub450\uc758 MLOps")," GitHub Repository"),"\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc5ec\ub7ec\ubd84\uc758 \uac1c\uc778 Repository\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"Fork"),"\ud569\ub2c8\ub2e4.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Forked Repository\ub97c \uc5ec\ub7ec\ubd84\uc758 \uc791\uc5c5 \ud658\uacbd\uc73c\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"git clone"),"\ud569\ub2c8\ub2e4."))),(0,a.kt)("h3",{id:"\ud658\uacbd-\uc124\uc815"},"\ud658\uacbd \uc124\uc815"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\ubaa8\ub450\uc758 MLOps\ub294 Hugo \uc640 Node\ub97c \uc774\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"li"}),"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"node & npm"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm --version\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"hugo"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"hugo version\n")))),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\ud544\uc694\ud55c node module\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm install\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \uac01 \uae00\uc758 \uc77c\uad00\uc131\uc744 \uc704\ud574\uc11c \uc5ec\ub7ec markdown lint\ub97c \uc801\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud574 test\ub97c \uc9c4\ud589\ud55c \ud6c4 \ucee4\ubc0b\ud569\ub2c8\ub2e4.\ub0b4\uc6a9 \uc218\uc815 \ubc0f \ucd94\uac00 \ud6c4 lint\uac00 \ub9de\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm test\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"lint \ud655\uc778 \uc644\ub8cc \ud6c4 ci \ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm ci\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\ub85c\uceec\uc5d0\uc11c \uc2e4\ud589 \ud6c4 \uc218\uc815\ud55c \uae00\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub098\uc624\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm run start\n")))),(0,a.kt)("h2",{id:"how-to-contribute"},"How to Contribute"),(0,a.kt)("h3",{id:"1-\uc0c8\ub85c\uc6b4-\ud3ec\uc2a4\ud2b8\ub97c-\uc791\uc131\ud560-\ub54c"},"1. \uc0c8\ub85c\uc6b4 \ud3ec\uc2a4\ud2b8\ub97c \uc791\uc131\ud560 \ub54c"),(0,a.kt)("p",null,"\uc0c8\ub85c\uc6b4 \ud3ec\uc2a4\ud2b8\ub294 \uac01 \ucc55\ud130\uc640 \ud3ec\uc2a4\ud2b8\uc758 \uc704\uce58\uc5d0 \ub9de\ub294 weight\ub97c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Introduction: 1xx"),(0,a.kt)("li",{parentName:"ul"},"Setup: 2xx"),(0,a.kt)("li",{parentName:"ul"},"Kubeflow: 3xx"),(0,a.kt)("li",{parentName:"ul"},"API Deployment: 4xx"),(0,a.kt)("li",{parentName:"ul"},"Help: 10xx")),(0,a.kt)("h3",{id:"2-\uae30\uc874\uc758-\ud3ec\uc2a4\ud2b8\ub97c-\uc218\uc815\ud560-\ub54c"},"2. \uae30\uc874\uc758 \ud3ec\uc2a4\ud2b8\ub97c \uc218\uc815\ud560 \ub54c"),(0,a.kt)("p",null,"\uae30\uc874\uc758 \ud3ec\uc2a4\ud2b8\ub97c \uc218\uc815\ud560 \ub54c Contributor\uc5d0 \ubcf8\uc778\uc758 \uc774\ub984\uc744 \uc785\ub825\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-markdown"},'contributors: ["John Doe", "Adam Smith"]\n')),(0,a.kt)("h3",{id:"3-\ud504\ub85c\uc81d\ud2b8\uc5d0-\ucc98\uc74c-\uae30\uc5ec\ud560-\ub54c"},"3. \ud504\ub85c\uc81d\ud2b8\uc5d0 \ucc98\uc74c \uae30\uc5ec\ud560 \ub54c"),(0,a.kt)("p",null,"\ub9cc\uc57d \ud504\ub85c\uc81d\ud2b8\uc5d0 \ucc98\uc74c \uae30\uc5ec \ud560 \ub54c ",(0,a.kt)("inlineCode",{parentName:"p"},"content/kor/contributors"),"\uc5d0 \ubcf8\uc778\uc758 \uc774\ub984\uc73c\ub85c \ud3f4\ub354\ub97c \uc0dd\uc131\ud55c \ud6c4, ",(0,a.kt)("inlineCode",{parentName:"p"},"_index.md"),"\ub77c\ub294 \ud30c\uc77c\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, ",(0,a.kt)("inlineCode",{parentName:"p"},"minsoo kim"),"\uc774 \ubcf8\uc778\uc758 \uc601\uc5b4 \uc774\ub984\uc774\ub77c\uba74, \ud3f4\ub354\uba85\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"minsoo-kim"),"\uc73c\ub85c \ud558\uc5ec \ud574\ub2f9 \ud3f4\ub354 \ub0b4\ubd80\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"_index.md"),"\ud30c\uc77c\uc5d0 \ub2e4\uc74c\uc758 \ub0b4\uc6a9\uc744 \uc791\uc131\ud569\ub2c8\ub2e4.\n\ud3f4\ub354\uba85\uc740 \ud558\uc774\ud508(-)\uc73c\ub85c \uc5f0\uacb0\ud55c \uc18c\ubb38\uc790\ub85c, title\uc740 \ub744\uc5b4\uc4f0\uae30\ub97c \ud3ec\ud568\ud55c CamelCase\ub85c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-markdown"},'---\ntitle: "John Doe"\ndraft: false\n---\n')),(0,a.kt)("h2",{id:"after-pull-request"},"After Pull Request"),(0,a.kt)("p",null,"Pull Request\ub97c \uc0dd\uc131\ud558\uba74 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \uc790\ub3d9\uc73c\ub85c ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc6b4\uc601\uc9c4\uc5d0\uac8c \ub9ac\ubdf0 \uc694\uccad\uc774 \uc804\ud574\uc9d1\ub2c8\ub2e4. \ucd5c\ub300 \uc77c\uc8fc\uc77c \uc774\ub0b4\ub85c \ud655\uc778 \ud6c4 Comment\ub97c \ub4dc\ub9b4 \uc608\uc815\uc785\ub2c8\ub2e4."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b0207dc0.b2d6de63.js b/assets/js/b0207dc0.b2d6de63.js deleted file mode 100644 index 82a08308..00000000 --- a/assets/js/b0207dc0.b2d6de63.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5597],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),m=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=m(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=m(n),k=a,d=c["".concat(p,".").concat(k)]||c[k]||s[k]||o;return n?r.createElement(d,l(l({ref:t},u),{},{components:n})):r.createElement(d,l({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=k;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:a,l[1]=i;for(var m=2;m{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>s,frontMatter:()=>o,metadata:()=>i,toc:()=>m});var r=n(7462),a=(n(7294),n(3905));const o={title:"How to Contribute",sidebar_position:2},l=void 0,i={unversionedId:"how-to-contribute",id:"how-to-contribute",title:"How to Contribute",description:"How to Start",source:"@site/community/how-to-contribute.md",sourceDirName:".",slug:"/how-to-contribute",permalink:"/community/how-to-contribute",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/community/how-to-contribute.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"How to Contribute",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Community",permalink:"/community/community"},next:{title:"Contributors",permalink:"/community/contributors"}},p={},m=[{value:"How to Start",id:"how-to-start",level:2},{value:"Git Repo \uc900\ube44",id:"git-repo-\uc900\ube44",level:3},{value:"\ud658\uacbd \uc124\uc815",id:"\ud658\uacbd-\uc124\uc815",level:3},{value:"How to Contribute",id:"how-to-contribute",level:2},{value:"1. \uc0c8\ub85c\uc6b4 \ud3ec\uc2a4\ud2b8\ub97c \uc791\uc131\ud560 \ub54c",id:"1-\uc0c8\ub85c\uc6b4-\ud3ec\uc2a4\ud2b8\ub97c-\uc791\uc131\ud560-\ub54c",level:3},{value:"2. \uae30\uc874\uc758 \ud3ec\uc2a4\ud2b8\ub97c \uc218\uc815\ud560 \ub54c",id:"2-\uae30\uc874\uc758-\ud3ec\uc2a4\ud2b8\ub97c-\uc218\uc815\ud560-\ub54c",level:3},{value:"3. \ud504\ub85c\uc81d\ud2b8\uc5d0 \ucc98\uc74c \uae30\uc5ec\ud560 \ub54c",id:"3-\ud504\ub85c\uc81d\ud2b8\uc5d0-\ucc98\uc74c-\uae30\uc5ec\ud560-\ub54c",level:3},{value:"After Pull Request",id:"after-pull-request",level:2}],u={toc:m},c="wrapper";function s(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"how-to-start"},"How to Start"),(0,a.kt)("h3",{id:"git-repo-\uc900\ube44"},"Git Repo \uc900\ube44"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"https://github.com/mlops-for-all/mlops-for-all.github.io"},(0,a.kt)("em",{parentName:"a"},"\ubaa8\ub450\uc758 MLOps")," GitHub Repository"),"\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc5ec\ub7ec\ubd84\uc758 \uac1c\uc778 Repository\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"Fork"),"\ud569\ub2c8\ub2e4.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Forked Repository\ub97c \uc5ec\ub7ec\ubd84\uc758 \uc791\uc5c5 \ud658\uacbd\uc73c\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"git clone"),"\ud569\ub2c8\ub2e4."))),(0,a.kt)("h3",{id:"\ud658\uacbd-\uc124\uc815"},"\ud658\uacbd \uc124\uc815"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\ubaa8\ub450\uc758 MLOps\ub294 Hugo \uc640 Node\ub97c \uc774\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"li"}),"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"node & npm"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm --version\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"hugo"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"hugo version\n")))),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\ud544\uc694\ud55c node module\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm install\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \uac01 \uae00\uc758 \uc77c\uad00\uc131\uc744 \uc704\ud574\uc11c \uc5ec\ub7ec markdown lint\ub97c \uc801\uc6a9\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud574 test\ub97c \uc9c4\ud589\ud55c \ud6c4 \ucee4\ubc0b\ud569\ub2c8\ub2e4.\ub0b4\uc6a9 \uc218\uc815 \ubc0f \ucd94\uac00 \ud6c4 lint\uac00 \ub9de\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm test\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"lint \ud655\uc778 \uc644\ub8cc \ud6c4 ci \ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm ci\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\ub85c\uceec\uc5d0\uc11c \uc2e4\ud589 \ud6c4 \uc218\uc815\ud55c \uae00\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub098\uc624\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"npm run start\n")))),(0,a.kt)("h2",{id:"how-to-contribute"},"How to Contribute"),(0,a.kt)("h3",{id:"1-\uc0c8\ub85c\uc6b4-\ud3ec\uc2a4\ud2b8\ub97c-\uc791\uc131\ud560-\ub54c"},"1. \uc0c8\ub85c\uc6b4 \ud3ec\uc2a4\ud2b8\ub97c \uc791\uc131\ud560 \ub54c"),(0,a.kt)("p",null,"\uc0c8\ub85c\uc6b4 \ud3ec\uc2a4\ud2b8\ub294 \uac01 \ucc55\ud130\uc640 \ud3ec\uc2a4\ud2b8\uc758 \uc704\uce58\uc5d0 \ub9de\ub294 weight\ub97c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Introduction: 1xx"),(0,a.kt)("li",{parentName:"ul"},"Setup: 2xx"),(0,a.kt)("li",{parentName:"ul"},"Kubeflow: 3xx"),(0,a.kt)("li",{parentName:"ul"},"API Deployment: 4xx"),(0,a.kt)("li",{parentName:"ul"},"Help: 10xx")),(0,a.kt)("h3",{id:"2-\uae30\uc874\uc758-\ud3ec\uc2a4\ud2b8\ub97c-\uc218\uc815\ud560-\ub54c"},"2. \uae30\uc874\uc758 \ud3ec\uc2a4\ud2b8\ub97c \uc218\uc815\ud560 \ub54c"),(0,a.kt)("p",null,"\uae30\uc874\uc758 \ud3ec\uc2a4\ud2b8\ub97c \uc218\uc815\ud560 \ub54c Contributor\uc5d0 \ubcf8\uc778\uc758 \uc774\ub984\uc744 \uc785\ub825\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-markdown"},'contributors: ["John Doe", "Adam Smith"]\n')),(0,a.kt)("h3",{id:"3-\ud504\ub85c\uc81d\ud2b8\uc5d0-\ucc98\uc74c-\uae30\uc5ec\ud560-\ub54c"},"3. \ud504\ub85c\uc81d\ud2b8\uc5d0 \ucc98\uc74c \uae30\uc5ec\ud560 \ub54c"),(0,a.kt)("p",null,"\ub9cc\uc57d \ud504\ub85c\uc81d\ud2b8\uc5d0 \ucc98\uc74c \uae30\uc5ec \ud560 \ub54c ",(0,a.kt)("inlineCode",{parentName:"p"},"content/kor/contributors"),"\uc5d0 \ubcf8\uc778\uc758 \uc774\ub984\uc73c\ub85c \ud3f4\ub354\ub97c \uc0dd\uc131\ud55c \ud6c4, ",(0,a.kt)("inlineCode",{parentName:"p"},"_index.md"),"\ub77c\ub294 \ud30c\uc77c\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, ",(0,a.kt)("inlineCode",{parentName:"p"},"minsoo kim"),"\uc774 \ubcf8\uc778\uc758 \uc601\uc5b4 \uc774\ub984\uc774\ub77c\uba74, \ud3f4\ub354\uba85\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"minsoo-kim"),"\uc73c\ub85c \ud558\uc5ec \ud574\ub2f9 \ud3f4\ub354 \ub0b4\ubd80\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"_index.md"),"\ud30c\uc77c\uc5d0 \ub2e4\uc74c\uc758 \ub0b4\uc6a9\uc744 \uc791\uc131\ud569\ub2c8\ub2e4.\n\ud3f4\ub354\uba85\uc740 \ud558\uc774\ud508(-)\uc73c\ub85c \uc5f0\uacb0\ud55c \uc18c\ubb38\uc790\ub85c, title\uc740 \ub744\uc5b4\uc4f0\uae30\ub97c \ud3ec\ud568\ud55c CamelCase\ub85c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-markdown"},'---\ntitle: "John Doe"\ndraft: false\n---\n')),(0,a.kt)("h2",{id:"after-pull-request"},"After Pull Request"),(0,a.kt)("p",null,"Pull Request\ub97c \uc0dd\uc131\ud558\uba74 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \uc790\ub3d9\uc73c\ub85c ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc6b4\uc601\uc9c4\uc5d0\uac8c \ub9ac\ubdf0 \uc694\uccad\uc774 \uc804\ud574\uc9d1\ub2c8\ub2e4. \ucd5c\ub300 \uc77c\uc8fc\uc77c \uc774\ub0b4\ub85c \ud655\uc778 \ud6c4 Comment\ub97c \ub4dc\ub9b4 \uc608\uc815\uc785\ub2c8\ub2e4."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b0739f8c.1da7ac78.js b/assets/js/b0739f8c.fcbd72ad.js similarity index 64% rename from assets/js/b0739f8c.1da7ac78.js rename to assets/js/b0739f8c.fcbd72ad.js index 50df22dc..9b84b1d9 100644 --- a/assets/js/b0739f8c.1da7ac78.js +++ b/assets/js/b0739f8c.fcbd72ad.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1948],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(r),f=o,b=c["".concat(s,".").concat(f)]||c[f]||d[f]||i;return r?n.createElement(b,a(a({ref:t},u),{},{components:r})):n.createElement(b,a({ref:t},u))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:o,a[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const i={title:"6. Kubeflow Pipeline \uad00\ub828",description:"",sidebar_position:6,contributors:["Jaeyeon Kim"]},a=void 0,l={unversionedId:"kubeflow-dashboard-guide/experiments-and-others",id:"version-1.0/kubeflow-dashboard-guide/experiments-and-others",title:"6. Kubeflow Pipeline \uad00\ub828",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments-and-others.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/experiments-and-others",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments-and-others",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments-and-others.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"6. Kubeflow Pipeline \uad00\ub828",description:"",sidebar_position:6,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"5. Experiments(AutoML)",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments"},next:{title:"1. Kubeflow Introduction",permalink:"/docs/1.0/kubeflow/kubeflow-intro"}},s={},p=[],u={toc:p},c="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(c,(0,n.Z)({},u,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Experiments(KFP), Pipelines, Runs, Recurring Runs, Artifacts, Executions \ud398\uc774\uc9c0\ub4e4\uc5d0\uc11c\ub294 Kubeflow Pipeline\uacfc Pipeline\uc758 \uc2e4\ud589 \uadf8\ub9ac\uace0 Pipeline Run\uc758 \uacb0\uacfc\ub97c \uad00\ub9ac\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,"Kubeflow Pipeline\uc774 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c Kubeflow\ub97c \uc0ac\uc6a9\ud558\ub294 \uc8fc\ub41c \uc774\uc720\uc774\uba70, Kubeflow Pipeline\uc744 \ub9cc\ub4dc\ub294 \ubc29\ubc95, \uc2e4\ud589\ud558\ub294 \ubc29\ubc95, \uacb0\uacfc\ub97c \ud655\uc778\ud558\ub294 \ubc29\ubc95 \ub4f1 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,o.kt)("a",{parentName:"p",href:"../kubeflow/kubeflow-intro"},"3.Kubeflow"),"\uc5d0\uc11c \ub2e4\ub8f9\ub2c8\ub2e4."))}d.isMDXComponent=!0},6316:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1948],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(r),f=o,b=c["".concat(s,".").concat(f)]||c[f]||d[f]||i;return r?n.createElement(b,a(a({ref:t},u),{},{components:r})):n.createElement(b,a({ref:t},u))}));function b(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:o,a[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const i={title:"6. Kubeflow Pipeline \uad00\ub828",description:"",sidebar_position:6,contributors:["Jaeyeon Kim"]},a=void 0,l={unversionedId:"kubeflow-dashboard-guide/experiments-and-others",id:"version-1.0/kubeflow-dashboard-guide/experiments-and-others",title:"6. Kubeflow Pipeline \uad00\ub828",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments-and-others.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/experiments-and-others",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments-and-others",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments-and-others.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"6. Kubeflow Pipeline \uad00\ub828",description:"",sidebar_position:6,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"5. Experiments(AutoML)",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments"},next:{title:"1. Kubeflow Introduction",permalink:"/docs/1.0/kubeflow/kubeflow-intro"}},s={},p=[],u={toc:p},c="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(c,(0,n.Z)({},u,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Experiments(KFP), Pipelines, Runs, Recurring Runs, Artifacts, Executions \ud398\uc774\uc9c0\ub4e4\uc5d0\uc11c\ub294 Kubeflow Pipeline\uacfc Pipeline\uc758 \uc2e4\ud589 \uadf8\ub9ac\uace0 Pipeline Run\uc758 \uacb0\uacfc\ub97c \uad00\ub9ac\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,"Kubeflow Pipeline\uc774 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c Kubeflow\ub97c \uc0ac\uc6a9\ud558\ub294 \uc8fc\ub41c \uc774\uc720\uc774\uba70, Kubeflow Pipeline\uc744 \ub9cc\ub4dc\ub294 \ubc29\ubc95, \uc2e4\ud589\ud558\ub294 \ubc29\ubc95, \uacb0\uacfc\ub97c \ud655\uc778\ud558\ub294 \ubc29\ubc95 \ub4f1 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,o.kt)("a",{parentName:"p",href:"../kubeflow/kubeflow-intro"},"3.Kubeflow"),"\uc5d0\uc11c \ub2e4\ub8f9\ub2c8\ub2e4."))}d.isMDXComponent=!0},6316:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file diff --git a/assets/js/b1ad0a9e.0e650516.js b/assets/js/b1ad0a9e.0e650516.js new file mode 100644 index 00000000..175b3b59 --- /dev/null +++ b/assets/js/b1ad0a9e.0e650516.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[956],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>b});var r=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=r.createContext({}),c=function(e){var a=r.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},p=function(e){var a=c(e.components);return r.createElement(l.Provider,{value:a},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},k=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(t),k=n,b=u["".concat(l,".").concat(k)]||u[k]||d[k]||o;return t?r.createElement(b,i(i({ref:a},p),{},{components:t})):r.createElement(b,i({ref:a},p))}));function b(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var o=t.length,i=new Array(o);i[0]=k;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=t(7462),n=(t(7294),t(3905));const o={title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim","SeungTae Kim"]},i=void 0,s={unversionedId:"setup-components/install-components-kf",id:"setup-components/install-components-kf",title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",source:"@site/docs/setup-components/install-components-kf.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-kf",permalink:"/docs/setup-components/install-components-kf",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-components/install-components-kf.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"6. (Optional) Setup GPU",permalink:"/docs/setup-kubernetes/setup-nvidia-gpu"},next:{title:"2. MLflow Tracking Server",permalink:"/docs/setup-components/install-components-mlflow"}},l={},c=[{value:"\uc124\uce58 \ud30c\uc77c \uc900\ube44",id:"\uc124\uce58-\ud30c\uc77c-\uc900\ube44",level:2},{value:"\uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58",id:"\uac01-\uad6c\uc131-\uc694\uc18c\ubcc4-\uc124\uce58",level:2},{value:"Cert-manager",id:"cert-manager",level:3},{value:"Istio",id:"istio",level:3},{value:"Dex",id:"dex",level:3},{value:"OIDC AuthService",id:"oidc-authservice",level:3},{value:"Kubeflow Namespace",id:"kubeflow-namespace",level:3},{value:"Kubeflow Roles",id:"kubeflow-roles",level:3},{value:"Kubeflow Istio Resources",id:"kubeflow-istio-resources",level:3},{value:"Kubeflow Pipelines",id:"kubeflow-pipelines",level:3},{value:"Katib",id:"katib",level:3},{value:"Central Dashboard",id:"central-dashboard",level:3},{value:"Admission Webhook",id:"admission-webhook",level:3},{value:"Notebooks & Jupyter Web App",id:"notebooks--jupyter-web-app",level:3},{value:"Profiles + KFAM",id:"profiles--kfam",level:3},{value:"Volumes Web App",id:"volumes-web-app",level:3},{value:"Tensorboard & Tensorboard Web App",id:"tensorboard--tensorboard-web-app",level:3},{value:"Training Operator",id:"training-operator",level:3},{value:"User Namespace",id:"user-namespace",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2}],p={toc:c},u="wrapper";function d(e){let{components:a,...o}=e;return(0,n.kt)(u,(0,r.Z)({},p,o,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"\uc124\uce58-\ud30c\uc77c-\uc900\ube44"},"\uc124\uce58 \ud30c\uc77c \uc900\ube44"),(0,n.kt)("p",null,"Kubeflow ",(0,n.kt)("strong",{parentName:"p"},"v1.4.0")," \ubc84\uc804\uc744 \uc124\uce58\ud558\uae30 \uc704\ud574\uc11c, \uc124\uce58\uc5d0 \ud544\uc694\ud55c manifests \ud30c\uc77c\ub4e4\uc744 \uc900\ube44\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/kubeflow/manifests"},"kubeflow/manifests Repository")," \ub97c ",(0,n.kt)("strong",{parentName:"p"},"v1.4.0")," \ud0dc\uadf8\ub85c \uae43 \ud074\ub860\ud55c \ub4a4, \ud574\ub2f9 \ud3f4\ub354\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"git clone -b v1.4.0 https://github.com/kubeflow/manifests.git\ncd manifests\n")),(0,n.kt)("h2",{id:"\uac01-\uad6c\uc131-\uc694\uc18c\ubcc4-\uc124\uce58"},"\uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58"),(0,n.kt)("p",null,"kubeflow/manifests Repository \uc5d0 \uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58 \ucee4\ub9e8\ub4dc\uac00 \uc801\ud600\uc838 \uc788\uc9c0\ub9cc, \uc124\uce58\ud558\uba70 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \uc774\uc288 \ud639\uc740 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc774 \uc801\ud600\uc838 \uc788\uc9c0 \uc54a\uc544 \ucc98\uc74c \uc124\uce58\ud558\ub294 \uacbd\uc6b0 \uc5b4\ub824\uc6c0\uc744 \uacaa\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c, \uac01 \uad6c\uc131 \uc694\uc18c\ubcc4\ub85c \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc744 \ud568\uaed8 \uc791\uc131\ud569\ub2c8\ub2e4. "),(0,n.kt)("p",null,"\ub610\ud55c, \ubcf8 \ubb38\uc11c\uc5d0\uc11c\ub294 ",(0,n.kt)("strong",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \ub2e4\ub8e8\uc9c0 \uc54a\ub294 \uad6c\uc131\uc694\uc18c\uc778 Knative, KFServing, MPI Operator \uc758 \uc124\uce58\ub294 \ub9ac\uc18c\uc2a4\uc758 \ud6a8\uc728\uc801 \uc0ac\uc6a9\uc744 \uc704\ud574 \ub530\ub85c \uc124\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),(0,n.kt)("h3",{id:"cert-manager"},"Cert-manager"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"cert-manager \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/cert-manager/cert-manager/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/cert-manager created\ncustomresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created\nserviceaccount/cert-manager created\nserviceaccount/cert-manager-cainjector created\nserviceaccount/cert-manager-webhook created\nrole.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created\nrole.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created\nrole.rbac.authorization.k8s.io/cert-manager:leaderelection created\nclusterrole.rbac.authorization.k8s.io/cert-manager-cainjector created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificates created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-challenges created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-issuers created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-orders created\nclusterrole.rbac.authorization.k8s.io/cert-manager-edit created\nclusterrole.rbac.authorization.k8s.io/cert-manager-view created\nclusterrole.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created\nrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created\nrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created\nrolebinding.rbac.authorization.k8s.io/cert-manager:leaderelection created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificates created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-challenges created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-issuers created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-orders created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created\nservice/cert-manager created\nservice/cert-manager-webhook created\ndeployment.apps/cert-manager created\ndeployment.apps/cert-manager-cainjector created\ndeployment.apps/cert-manager-webhook created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created\n")),(0,n.kt)("p",{parentName:"li"},"cert-manager namespace \uc758 3 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n cert-manager\n")),(0,n.kt)("p",{parentName:"li"},"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncert-manager-7dd5854bb4-7nmpd 1/1 Running 0 2m10s\ncert-manager-cainjector-64c949654c-2scxr 1/1 Running 0 2m10s\ncert-manager-webhook-6b57b9b886-7q6g2 1/1 Running 0 2m10s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"kubeflow-issuer \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/cert-manager/kubeflow-issuer/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterissuer.cert-manager.io/kubeflow-self-signing-issuer created\n")))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"cert-manager-webhook \uc774\uc288"),(0,n.kt)("p",{parentName:"li"},"cert-manager-webhook deployment \uac00 Running \uc774 \uc544\ub2cc \uacbd\uc6b0, \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud558\uba70 kubeflow-issuer\uac00 \uc124\uce58\ub418\uc9c0 \uc54a\uc744 \uc218 \uc788\uc74c\uc5d0 \uc8fc\uc758\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ud574\ub2f9 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c \uacbd\uc6b0, cert-manager \uc758 3\uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub418\ub294 \uac83\uc744 \ud655\uc778\ud55c \uc774\ud6c4 \ub2e4\uc2dc \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'Error from server: error when retrieving current configuration of:\nResource: "cert-manager.io/v1alpha2, Resource=clusterissuers", GroupVersionKind: "cert-manager.io/v1alpha2, Kind=ClusterIssuer"\nName: "kubeflow-self-signing-issuer", Namespace: ""\nfrom server for: "STDIN": conversion webhook for cert-manager.io/v1, Kind=ClusterIssuer failed: Post "https://cert-manager-webhook.cert-manager.svc:443/convert?timeout=30s": dial tcp 10.101.177.157:443: connect: connection refused\n')))),(0,n.kt)("h3",{id:"istio"},"Istio"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio \uad00\ub828 Custom Resource Definition(CRD) \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-crds/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/authorizationpolicies.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/destinationrules.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/envoyfilters.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/gateways.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/istiooperators.install.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/peerauthentications.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/requestauthentications.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/serviceentries.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/sidecars.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/virtualservices.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/workloadentries.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/workloadgroups.networking.istio.io created\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio namespace \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/istio-system created\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-install/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/istio-ingressgateway-service-account created\nserviceaccount/istio-reader-service-account created\nserviceaccount/istiod-service-account created\nrole.rbac.authorization.k8s.io/istio-ingressgateway-sds created\nrole.rbac.authorization.k8s.io/istiod-istio-system created\nclusterrole.rbac.authorization.k8s.io/istio-reader-istio-system created\nclusterrole.rbac.authorization.k8s.io/istiod-istio-system created\nrolebinding.rbac.authorization.k8s.io/istio-ingressgateway-sds created\nrolebinding.rbac.authorization.k8s.io/istiod-istio-system created\nclusterrolebinding.rbac.authorization.k8s.io/istio-reader-istio-system created\nclusterrolebinding.rbac.authorization.k8s.io/istiod-istio-system created\nconfigmap/istio created\nconfigmap/istio-sidecar-injector created\nservice/istio-ingressgateway created\nservice/istiod created\ndeployment.apps/istio-ingressgateway created\ndeployment.apps/istiod created\nenvoyfilter.networking.istio.io/metadata-exchange-1.8 created\nenvoyfilter.networking.istio.io/metadata-exchange-1.9 created\nenvoyfilter.networking.istio.io/stats-filter-1.8 created\nenvoyfilter.networking.istio.io/stats-filter-1.9 created\nenvoyfilter.networking.istio.io/tcp-metadata-exchange-1.8 created\nenvoyfilter.networking.istio.io/tcp-metadata-exchange-1.9 created\nenvoyfilter.networking.istio.io/tcp-stats-filter-1.8 created\nenvoyfilter.networking.istio.io/tcp-stats-filter-1.9 created\nenvoyfilter.networking.istio.io/x-forwarded-host created\ngateway.networking.istio.io/istio-ingressgateway created\nauthorizationpolicy.security.istio.io/global-deny-all created\nauthorizationpolicy.security.istio.io/istio-ingressgateway created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/istio-sidecar-injector created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/istiod-istio-system created\n")),(0,n.kt)("p",{parentName:"li"},"istio-system namespace \uc758 2 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n istio-system\n")),(0,n.kt)("p",{parentName:"li"},"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nistio-ingressgateway-79b665c95-xm22l 1/1 Running 0 16s\nistiod-86457659bb-5h58w 1/1 Running 0 16s\n")))),(0,n.kt)("h3",{id:"dex"},"Dex"),(0,n.kt)("p",null,"dex \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/dex/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/auth created\ncustomresourcedefinition.apiextensions.k8s.io/authcodes.dex.coreos.com created\nserviceaccount/dex created\nclusterrole.rbac.authorization.k8s.io/dex created\nclusterrolebinding.rbac.authorization.k8s.io/dex created\nconfigmap/dex created\nsecret/dex-oidc-client created\nservice/dex created\ndeployment.apps/dex created\nvirtualservice.networking.istio.io/dex created\n")),(0,n.kt)("p",null,"auth namespace \uc758 1 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n auth\n")),(0,n.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ndex-5ddf47d88d-458cs 1/1 Running 1 12s\n")),(0,n.kt)("h3",{id:"oidc-authservice"},"OIDC AuthService"),(0,n.kt)("p",null,"OIDC AuthService \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/oidc-authservice/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"configmap/oidc-authservice-parameters created\nsecret/oidc-authservice-client created\nservice/authservice created\npersistentvolumeclaim/authservice-pvc created\nstatefulset.apps/authservice created\nenvoyfilter.networking.istio.io/authn-filter created\n")),(0,n.kt)("p",null,"istio-system namespace \uc5d0 authservice-0 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n istio-system -w\n")),(0,n.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nauthservice-0 1/1 Running 0 14s\nistio-ingressgateway-79b665c95-xm22l 1/1 Running 0 2m37s\nistiod-86457659bb-5h58w 1/1 Running 0 2m37s\n")),(0,n.kt)("h3",{id:"kubeflow-namespace"},"Kubeflow Namespace"),(0,n.kt)("p",null,"kubeflow namespace \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/kubeflow-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/kubeflow created\n")),(0,n.kt)("p",null,"kubeflow namespace \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get ns kubeflow\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS AGE\nkubeflow Active 8s\n")),(0,n.kt)("h3",{id:"kubeflow-roles"},"Kubeflow Roles"),(0,n.kt)("p",null,"kubeflow-roles \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/kubeflow-roles/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterrole.rbac.authorization.k8s.io/kubeflow-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-view created\nclusterrole.rbac.authorization.k8s.io/kubeflow-view created\n")),(0,n.kt)("p",null,"\ubc29\uae08 \uc0dd\uc131\ud55c kubeflow roles \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get clusterrole | grep kubeflow\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 6\uac1c\uc758 clusterrole \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-admin 2021-12-03T08:51:36Z\nkubeflow-edit 2021-12-03T08:51:36Z\nkubeflow-kubernetes-admin 2021-12-03T08:51:36Z\nkubeflow-kubernetes-edit 2021-12-03T08:51:36Z\nkubeflow-kubernetes-view 2021-12-03T08:51:36Z\nkubeflow-view 2021-12-03T08:51:36Z\n")),(0,n.kt)("h3",{id:"kubeflow-istio-resources"},"Kubeflow Istio Resources"),(0,n.kt)("p",null,"kubeflow-istio-resources \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterrole.rbac.authorization.k8s.io/kubeflow-istio-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-istio-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-istio-view created\ngateway.networking.istio.io/kubeflow-gateway created\n")),(0,n.kt)("p",null,"\ubc29\uae08 \uc0dd\uc131\ud55c kubeflow roles \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get clusterrole | grep kubeflow-istio\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 3\uac1c\uc758 clusterrole \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-istio-admin 2021-12-03T08:53:17Z\nkubeflow-istio-edit 2021-12-03T08:53:17Z\nkubeflow-istio-view 2021-12-03T08:53:17Z\n")),(0,n.kt)("p",null,"Kubeflow namespace \uc5d0 gateway \uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get gateway -n kubeflow\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME AGE\nkubeflow-gateway 31s\n")),(0,n.kt)("h3",{id:"kubeflow-pipelines"},"Kubeflow Pipelines"),(0,n.kt)("p",null,"kubeflow pipelines \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/clusterworkflowtemplates.argoproj.io created\ncustomresourcedefinition.apiextensions.k8s.io/cronworkflows.argoproj.io created\ncustomresourcedefinition.apiextensions.k8s.io/workfloweventbindings.argoproj.io created\n...(\uc0dd\ub7b5)\nauthorizationpolicy.security.istio.io/ml-pipeline-visualizationserver created\nauthorizationpolicy.security.istio.io/mysql created\nauthorizationpolicy.security.istio.io/service-cache-server created\n")),(0,n.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub294 \uc5ec\ub7ec resources \ub97c \ud55c \ubc88\uc5d0 \uc124\uce58\ud558\uace0 \uc788\uc9c0\ub9cc, \uc124\uce58 \uc21c\uc11c\uc758 \uc758\uc874\uc131\uc774 \uc788\ub294 \ub9ac\uc18c\uc2a4\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \ub54c\uc5d0 \ub530\ub77c \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'"error: unable to recognize "STDIN": no matches for kind "CompositeController" in version "metacontroller.k8s.io/v1alpha1"" \n')),(0,n.kt)("p",null,"\uc704\uc640 \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c\ub2e4\uba74, 10 \ucd08 \uc815\ub3c4 \uae30\ub2e4\ub9b0 \ub4a4 \ub2e4\uc2dc \uc704\uc758 \uba85\ub839\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 16\uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncache-deployer-deployment-79fdf9c5c9-bjnbg 2/2 Running 1 5m3s\ncache-server-5bdf4f4457-48gbp 2/2 Running 0 5m3s\nkubeflow-pipelines-profile-controller-7b947f4748-8d26b 1/1 Running 0 5m3s\nmetacontroller-0 1/1 Running 0 5m3s\nmetadata-envoy-deployment-5b4856dd5-xtlkd 1/1 Running 0 5m3s\nmetadata-grpc-deployment-6b5685488-kwvv7 2/2 Running 3 5m3s\nmetadata-writer-548bd879bb-zjkcn 2/2 Running 1 5m3s\nminio-5b65df66c9-k5gzg 2/2 Running 0 5m3s\nml-pipeline-8c4b99589-85jw6 2/2 Running 1 5m3s\nml-pipeline-persistenceagent-d6bdc77bd-ssxrv 2/2 Running 0 5m3s\nml-pipeline-scheduledworkflow-5db54d75c5-zk2cw 2/2 Running 0 5m2s\nml-pipeline-ui-5bd8d6dc84-j7wqr 2/2 Running 0 5m2s\nml-pipeline-viewer-crd-68fb5f4d58-mbcbg 2/2 Running 1 5m2s\nml-pipeline-visualizationserver-8476b5c645-wljfm 2/2 Running 0 5m2s\nmysql-f7b9b7dd4-xfnw4 2/2 Running 0 5m2s\nworkflow-controller-5cbbb49bd8-5zrwx 2/2 Running 1 5m2s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c ml-pipeline UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/ml-pipeline-ui -n kubeflow 8888:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8888/#/pipelines/"},"http://localhost:8888/#/pipelines/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pipeline-ui",src:t(484).Z,width:"2868",height:"970"})),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"localhost \uc5f0\uacb0 \uac70\ubd80 \uc774\uc288")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"localhost-reject",src:t(9129).Z,width:"626",height:"406"})),(0,n.kt)("p",null,"\ub9cc\uc57d \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,n.kt)("inlineCode",{parentName:"p"},"localhost\uc5d0\uc11c \uc5f0\uacb0\uc744 \uac70\ubd80\ud588\uc2b5\ub2c8\ub2e4")," \ub77c\ub294 \uc5d0\ub7ec\uac00 \ucd9c\ub825\ub420 \uacbd\uc6b0, \ucee4\ub9e8\ub4dc\ub85c address \uc124\uc815\uc744 \ud1b5\ud574 \uc811\uadfc\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\ubcf4\uc548\uc0c1\uc758 \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4\uba74,")," \uc544\ub798\uc640 \uac19\uc774 ",(0,n.kt)("inlineCode",{parentName:"p"},"0.0.0.0")," \ub85c \ubaa8\ub4e0 \uc8fc\uc18c\uc758 bind\ub97c \uc5f4\uc5b4\uc8fc\ub294 \ubc29\ud5a5\uc73c\ub85c ml-pipeline UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward --address 0.0.0.0 svc/ml-pipeline-ui -n kubeflow 8888:80\n")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\uc704\uc758 \uc635\uc158\uc73c\ub85c \uc2e4\ud589\ud588\uc74c\uc5d0\ub3c4 \uc5ec\uc804\ud788 \uc5f0\uacb0 \uac70\ubd80 \uc774\uc288\uac00 \ubc1c\uc0dd\ud560 \uacbd\uc6b0")),(0,n.kt)("p",null,"\ubc29\ud654\ubcbd \uc124\uc815\uc73c\ub85c \uc811\uc18d\ud574 \ubaa8\ub4e0 tcp \ud504\ub85c\ud1a0\ucf5c\uc758 \ud3ec\ud2b8\uc5d0 \ub300\ud55c \uc811\uc18d\uc744 \ud5c8\uac00 \ub610\ub294 8888\ubc88 \ud3ec\ud2b8\uc758 \uc811\uc18d \ud5c8\uac00\ub97c \ucd94\uac00\ud574 \uc811\uadfc \uad8c\ud55c\uc744 \ud5c8\uac00\ud574\uc90d\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("inlineCode",{parentName:"p"},"http://<\ub2f9\uc2e0\uc758 \uac00\uc0c1 \uc778\uc2a4\ud134\uc2a4 \uacf5\uc778 ip \uc8fc\uc18c>:8888/#/pipelines/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud558\uba74, ml-pipeline UI \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ud558\ub2e8\uc5d0\uc11c \uc9c4\ud589\ub418\ub294 \ub2e4\ub978 \ud3ec\ud2b8\uc758 \uacbd\ub85c\uc5d0 \uc811\uc18d\ud560 \ub54c\ub3c4 \uc704\uc758 \uc808\ucc28\uc640 \ub3d9\uc77c\ud558\uac8c \ucee4\ub9e8\ub4dc\ub97c \uc2e4\ud589\ud558\uace0, \ubc29\ud654\ubcbd\uc5d0 \ud3ec\ud2b8 \ubc88\ud638\ub97c \ucd94\uac00\ud574\uc8fc\uba74 \uc2e4\ud589\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4."),(0,n.kt)("h3",{id:"katib"},"Katib"),(0,n.kt)("p",null,"Katib \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/experiments.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/suggestions.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/trials.kubeflow.org created\nserviceaccount/katib-controller created\nserviceaccount/katib-ui created\nclusterrole.rbac.authorization.k8s.io/katib-controller created\nclusterrole.rbac.authorization.k8s.io/katib-ui created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-view created\nclusterrolebinding.rbac.authorization.k8s.io/katib-controller created\nclusterrolebinding.rbac.authorization.k8s.io/katib-ui created\nconfigmap/katib-config created\nconfigmap/trial-templates created\nsecret/katib-mysql-secrets created\nservice/katib-controller created\nservice/katib-db-manager created\nservice/katib-mysql created\nservice/katib-ui created\npersistentvolumeclaim/katib-mysql created\ndeployment.apps/katib-controller created\ndeployment.apps/katib-db-manager created\ndeployment.apps/katib-mysql created\ndeployment.apps/katib-ui created\ncertificate.cert-manager.io/katib-webhook-cert created\nissuer.cert-manager.io/katib-selfsigned-issuer created\nvirtualservice.networking.istio.io/katib-ui created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/katib.kubeflow.org created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/katib.kubeflow.org created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep katib\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 4 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"katib-controller-68c47fbf8b-b985z 1/1 Running 0 82s\nkatib-db-manager-6c948b6b76-2d9gr 1/1 Running 0 82s\nkatib-mysql-7894994f88-scs62 1/1 Running 0 82s\nkatib-ui-64bb96d5bf-d89kp 1/1 Running 0 82s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c katib UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/katib-ui -n kubeflow 8081:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8081/katib/"},"http://localhost:8081/katib/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"katib-ui",src:t(5052).Z,width:"2146",height:"620"})),(0,n.kt)("h3",{id:"central-dashboard"},"Central Dashboard"),(0,n.kt)("p",null,"Dashboard \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/centraldashboard created\nrole.rbac.authorization.k8s.io/centraldashboard created\nclusterrole.rbac.authorization.k8s.io/centraldashboard created\nrolebinding.rbac.authorization.k8s.io/centraldashboard created\nclusterrolebinding.rbac.authorization.k8s.io/centraldashboard created\nconfigmap/centraldashboard-config created\nconfigmap/centraldashboard-parameters created\nservice/centraldashboard created\ndeployment.apps/centraldashboard created\nvirtualservice.networking.istio.io/centraldashboard created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep centraldashboard\n")),(0,n.kt)("p",null,"kubeflow namespace \uc5d0 centraldashboard \uad00\ub828 1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"centraldashboard-8fc7d8cc-xl7ts 1/1 Running 0 52s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c Central Dashboard UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/centraldashboard -n kubeflow 8082:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8082/"},"http://localhost:8082/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"central-dashboard",src:t(3680).Z,width:"4982",height:"1548"})),(0,n.kt)("h3",{id:"admission-webhook"},"Admission Webhook"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/poddefaults.kubeflow.org created\nserviceaccount/admission-webhook-service-account created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-cluster-role created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-admin created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-edit created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-view created\nclusterrolebinding.rbac.authorization.k8s.io/admission-webhook-cluster-role-binding created\nservice/admission-webhook-service created\ndeployment.apps/admission-webhook-deployment created\ncertificate.cert-manager.io/admission-webhook-cert created\nissuer.cert-manager.io/admission-webhook-selfsigned-issuer created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/admission-webhook-mutating-webhook-configuration created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep admission-webhook\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"admission-webhook-deployment-667bd68d94-2hhrx 1/1 Running 0 11s\n")),(0,n.kt)("h3",{id:"notebooks--jupyter-web-app"},"Notebooks & Jupyter Web App"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Notebook controller \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/notebooks.kubeflow.org created\nserviceaccount/notebook-controller-service-account created\nrole.rbac.authorization.k8s.io/notebook-controller-leader-election-role created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-admin created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-edit created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-view created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-role created\nrolebinding.rbac.authorization.k8s.io/notebook-controller-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/notebook-controller-role-binding created\nconfigmap/notebook-controller-config-m44cmb547t created\nservice/notebook-controller-service created\ndeployment.apps/notebook-controller-deployment created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep notebook-controller\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"notebook-controller-deployment-75b4f7b578-w4d4l 1/1 Running 0 105s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Jupyter Web App \uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/jupyter-web-app-service-account created\nrole.rbac.authorization.k8s.io/jupyter-web-app-jupyter-notebook-role created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-admin created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-edit created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-view created\nrolebinding.rbac.authorization.k8s.io/jupyter-web-app-jupyter-notebook-role-binding created\nclusterrolebinding.rbac.authorization.k8s.io/jupyter-web-app-cluster-role-binding created\nconfigmap/jupyter-web-app-config-76844k4cd7 created\nconfigmap/jupyter-web-app-logos created\nconfigmap/jupyter-web-app-parameters-chmg88cm48 created\nservice/jupyter-web-app-service created\ndeployment.apps/jupyter-web-app-deployment created\nvirtualservice.networking.istio.io/jupyter-web-app-jupyter-web-app created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep jupyter-web-app\n")),(0,n.kt)("p",{parentName:"li"},"1\uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"jupyter-web-app-deployment-6f744fbc54-p27ts 1/1 Running 0 2m\n")))),(0,n.kt)("h3",{id:"profiles--kfam"},"Profiles + KFAM"),(0,n.kt)("p",null,"Profile Controller\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/profiles.kubeflow.org created\nserviceaccount/profiles-controller-service-account created\nrole.rbac.authorization.k8s.io/profiles-leader-election-role created\nrolebinding.rbac.authorization.k8s.io/profiles-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/profiles-cluster-role-binding created\nconfigmap/namespace-labels-data-48h7kd55mc created\nconfigmap/profiles-config-46c7tgh6fd created\nservice/profiles-kfam created\ndeployment.apps/profiles-deployment created\nvirtualservice.networking.istio.io/profiles-kfam created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep profiles-deployment\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"profiles-deployment-89f7d88b-qsnrd 2/2 Running 0 42s\n")),(0,n.kt)("h3",{id:"volumes-web-app"},"Volumes Web App"),(0,n.kt)("p",null,"Volumes Web App \uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/volumes-web-app-service-account created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-admin created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-edit created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-view created\nclusterrolebinding.rbac.authorization.k8s.io/volumes-web-app-cluster-role-binding created\nconfigmap/volumes-web-app-parameters-4gg8cm2gmk created\nservice/volumes-web-app-service created\ndeployment.apps/volumes-web-app-deployment created\nvirtualservice.networking.istio.io/volumes-web-app-volumes-web-app created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep volumes-web-app\n")),(0,n.kt)("p",null,"1\uac1c\uc758 pod\uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"volumes-web-app-deployment-8589d664cc-62svl 1/1 Running 0 27s\n")),(0,n.kt)("h3",{id:"tensorboard--tensorboard-web-app"},"Tensorboard & Tensorboard Web App"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Tensorboard Web App \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/tensorboards-web-app-service-account created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-admin created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-edit created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-view created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboards-web-app-cluster-role-binding created\nconfigmap/tensorboards-web-app-parameters-g28fbd6cch created\nservice/tensorboards-web-app-service created\ndeployment.apps/tensorboards-web-app-deployment created\nvirtualservice.networking.istio.io/tensorboards-web-app-tensorboards-web-app created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep tensorboards-web-app\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tensorboards-web-app-deployment-6ff79b7f44-qbzmw 1/1 Running 0 22s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Tensorboard Controller \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/tensorboards.tensorboard.kubeflow.org created\nserviceaccount/tensorboard-controller created\nrole.rbac.authorization.k8s.io/tensorboard-controller-leader-election-role created\nclusterrole.rbac.authorization.k8s.io/tensorboard-controller-manager-role created\nclusterrole.rbac.authorization.k8s.io/tensorboard-controller-proxy-role created\nrolebinding.rbac.authorization.k8s.io/tensorboard-controller-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboard-controller-manager-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboard-controller-proxy-rolebinding created\nconfigmap/tensorboard-controller-config-bf88mm96c8 created\nservice/tensorboard-controller-controller-manager-metrics-service created\ndeployment.apps/tensorboard-controller-controller-manager created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep tensorboard-controller\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tensorboard-controller-controller-manager-954b7c544-vjpzj 3/3 Running 1 73s\n")))),(0,n.kt)("h3",{id:"training-operator"},"Training Operator"),(0,n.kt)("p",null,"Training Operator \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/mxjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/pytorchjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/tfjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/xgboostjobs.kubeflow.org created\nserviceaccount/training-operator created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-view created\nclusterrole.rbac.authorization.k8s.io/training-operator created\nclusterrolebinding.rbac.authorization.k8s.io/training-operator created\nservice/training-operator created\ndeployment.apps/training-operator created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep training-operator\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"training-operator-7d98f9dd88-6887f 1/1 Running 0 28s\n")),(0,n.kt)("h3",{id:"user-namespace"},"User Namespace"),(0,n.kt)("p",null,"Kubeflow \uc0ac\uc6a9\uc744 \uc704\ud574, \uc0ac\uc6a9\ud560 User\uc758 Kubeflow Profile \uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/user-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"configmap/default-install-config-9h2h2b6hbk created\nprofile.kubeflow.org/kubeflow-user-example-com created\n")),(0,n.kt)("p",null,"kubeflow-user-example-com profile \uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get profile\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-user-example-com 37s\n")),(0,n.kt)("h2",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,n.kt)("p",null,"Kubeflow central dashboard\uc5d0 web browser\ub85c \uc811\uc18d\ud558\uae30 \uc704\ud574 \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,n.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8080"},"http://localhost:8080")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"login-ui",src:t(1982).Z,width:"2554",height:"1202"})),(0,n.kt)("p",null,"\ub2e4\uc74c \uc811\uc18d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Email Address: ",(0,n.kt)("inlineCode",{parentName:"li"},"user@example.com")),(0,n.kt)("li",{parentName:"ul"},"Password: ",(0,n.kt)("inlineCode",{parentName:"li"},"12341234"))),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"central-dashboard",src:t(9150).Z,width:"4008",height:"1266"})))}d.isMDXComponent=!0},9150:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/after-login-4b41daca6d9a97824552770b832d59b0.png"},3680:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/central-dashboard-ddf80e24ff9066a7e3fdbfd0d58b5721.png"},5052:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/katib-ui-f10efe0ffd3bb57b1de7bdc2ff2aa880.png"},9129:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/localhost-reject-8d0b59ff30048e97d5721f786f25c857.png"},1982:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/login-after-install-a3e252f02dc4f4988686d6ae97ddd41f.png"},484:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/pipeline-ui-796868a1ebeabfd6d1b6eb9b54c389aa.png"}}]); \ No newline at end of file diff --git a/assets/js/b1ad0a9e.68b88abd.js b/assets/js/b1ad0a9e.68b88abd.js deleted file mode 100644 index 5c0e285b..00000000 --- a/assets/js/b1ad0a9e.68b88abd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[956],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>b});var r=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=r.createContext({}),c=function(e){var a=r.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},p=function(e){var a=c(e.components);return r.createElement(l.Provider,{value:a},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},k=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(t),k=n,b=u["".concat(l,".").concat(k)]||u[k]||d[k]||o;return t?r.createElement(b,i(i({ref:a},p),{},{components:t})):r.createElement(b,i({ref:a},p))}));function b(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var o=t.length,i=new Array(o);i[0]=k;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=t(7462),n=(t(7294),t(3905));const o={title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim","SeungTae Kim"]},i=void 0,s={unversionedId:"setup-components/install-components-kf",id:"setup-components/install-components-kf",title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",source:"@site/docs/setup-components/install-components-kf.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-kf",permalink:"/docs/setup-components/install-components-kf",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-components/install-components-kf.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Kubeflow",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Kubeflow",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"6. (Optional) Setup GPU",permalink:"/docs/setup-kubernetes/setup-nvidia-gpu"},next:{title:"2. MLflow Tracking Server",permalink:"/docs/setup-components/install-components-mlflow"}},l={},c=[{value:"\uc124\uce58 \ud30c\uc77c \uc900\ube44",id:"\uc124\uce58-\ud30c\uc77c-\uc900\ube44",level:2},{value:"\uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58",id:"\uac01-\uad6c\uc131-\uc694\uc18c\ubcc4-\uc124\uce58",level:2},{value:"Cert-manager",id:"cert-manager",level:3},{value:"Istio",id:"istio",level:3},{value:"Dex",id:"dex",level:3},{value:"OIDC AuthService",id:"oidc-authservice",level:3},{value:"Kubeflow Namespace",id:"kubeflow-namespace",level:3},{value:"Kubeflow Roles",id:"kubeflow-roles",level:3},{value:"Kubeflow Istio Resources",id:"kubeflow-istio-resources",level:3},{value:"Kubeflow Pipelines",id:"kubeflow-pipelines",level:3},{value:"Katib",id:"katib",level:3},{value:"Central Dashboard",id:"central-dashboard",level:3},{value:"Admission Webhook",id:"admission-webhook",level:3},{value:"Notebooks & Jupyter Web App",id:"notebooks--jupyter-web-app",level:3},{value:"Profiles + KFAM",id:"profiles--kfam",level:3},{value:"Volumes Web App",id:"volumes-web-app",level:3},{value:"Tensorboard & Tensorboard Web App",id:"tensorboard--tensorboard-web-app",level:3},{value:"Training Operator",id:"training-operator",level:3},{value:"User Namespace",id:"user-namespace",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2}],p={toc:c},u="wrapper";function d(e){let{components:a,...o}=e;return(0,n.kt)(u,(0,r.Z)({},p,o,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"\uc124\uce58-\ud30c\uc77c-\uc900\ube44"},"\uc124\uce58 \ud30c\uc77c \uc900\ube44"),(0,n.kt)("p",null,"Kubeflow ",(0,n.kt)("strong",{parentName:"p"},"v1.4.0")," \ubc84\uc804\uc744 \uc124\uce58\ud558\uae30 \uc704\ud574\uc11c, \uc124\uce58\uc5d0 \ud544\uc694\ud55c manifests \ud30c\uc77c\ub4e4\uc744 \uc900\ube44\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://github.com/kubeflow/manifests"},"kubeflow/manifests Repository")," \ub97c ",(0,n.kt)("strong",{parentName:"p"},"v1.4.0")," \ud0dc\uadf8\ub85c \uae43 \ud074\ub860\ud55c \ub4a4, \ud574\ub2f9 \ud3f4\ub354\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"git clone -b v1.4.0 https://github.com/kubeflow/manifests.git\ncd manifests\n")),(0,n.kt)("h2",{id:"\uac01-\uad6c\uc131-\uc694\uc18c\ubcc4-\uc124\uce58"},"\uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58"),(0,n.kt)("p",null,"kubeflow/manifests Repository \uc5d0 \uac01 \uad6c\uc131 \uc694\uc18c\ubcc4 \uc124\uce58 \ucee4\ub9e8\ub4dc\uac00 \uc801\ud600\uc838 \uc788\uc9c0\ub9cc, \uc124\uce58\ud558\uba70 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \uc774\uc288 \ud639\uc740 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc774 \uc801\ud600\uc838 \uc788\uc9c0 \uc54a\uc544 \ucc98\uc74c \uc124\uce58\ud558\ub294 \uacbd\uc6b0 \uc5b4\ub824\uc6c0\uc744 \uacaa\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c, \uac01 \uad6c\uc131 \uc694\uc18c\ubcc4\ub85c \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub294 \ubc29\ubc95\uc744 \ud568\uaed8 \uc791\uc131\ud569\ub2c8\ub2e4. "),(0,n.kt)("p",null,"\ub610\ud55c, \ubcf8 \ubb38\uc11c\uc5d0\uc11c\ub294 ",(0,n.kt)("strong",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \ub2e4\ub8e8\uc9c0 \uc54a\ub294 \uad6c\uc131\uc694\uc18c\uc778 Knative, KFServing, MPI Operator \uc758 \uc124\uce58\ub294 \ub9ac\uc18c\uc2a4\uc758 \ud6a8\uc728\uc801 \uc0ac\uc6a9\uc744 \uc704\ud574 \ub530\ub85c \uc124\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),(0,n.kt)("h3",{id:"cert-manager"},"Cert-manager"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"cert-manager \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/cert-manager/cert-manager/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/cert-manager created\ncustomresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created\ncustomresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io created\nserviceaccount/cert-manager created\nserviceaccount/cert-manager-cainjector created\nserviceaccount/cert-manager-webhook created\nrole.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created\nrole.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created\nrole.rbac.authorization.k8s.io/cert-manager:leaderelection created\nclusterrole.rbac.authorization.k8s.io/cert-manager-cainjector created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-certificates created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-challenges created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-issuers created\nclusterrole.rbac.authorization.k8s.io/cert-manager-controller-orders created\nclusterrole.rbac.authorization.k8s.io/cert-manager-edit created\nclusterrole.rbac.authorization.k8s.io/cert-manager-view created\nclusterrole.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created\nrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:dynamic-serving created\nrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector:leaderelection created\nrolebinding.rbac.authorization.k8s.io/cert-manager:leaderelection created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-cainjector created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-approve:cert-manager-io created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-certificates created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-challenges created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-clusterissuers created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-ingress-shim created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-issuers created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-controller-orders created\nclusterrolebinding.rbac.authorization.k8s.io/cert-manager-webhook:subjectaccessreviews created\nservice/cert-manager created\nservice/cert-manager-webhook created\ndeployment.apps/cert-manager created\ndeployment.apps/cert-manager-cainjector created\ndeployment.apps/cert-manager-webhook created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created\n")),(0,n.kt)("p",{parentName:"li"},"cert-manager namespace \uc758 3 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n cert-manager\n")),(0,n.kt)("p",{parentName:"li"},"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncert-manager-7dd5854bb4-7nmpd 1/1 Running 0 2m10s\ncert-manager-cainjector-64c949654c-2scxr 1/1 Running 0 2m10s\ncert-manager-webhook-6b57b9b886-7q6g2 1/1 Running 0 2m10s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"kubeflow-issuer \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/cert-manager/kubeflow-issuer/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterissuer.cert-manager.io/kubeflow-self-signing-issuer created\n")))),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"cert-manager-webhook \uc774\uc288"),(0,n.kt)("p",{parentName:"li"},"cert-manager-webhook deployment \uac00 Running \uc774 \uc544\ub2cc \uacbd\uc6b0, \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud558\uba70 kubeflow-issuer\uac00 \uc124\uce58\ub418\uc9c0 \uc54a\uc744 \uc218 \uc788\uc74c\uc5d0 \uc8fc\uc758\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ud574\ub2f9 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c \uacbd\uc6b0, cert-manager \uc758 3\uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub418\ub294 \uac83\uc744 \ud655\uc778\ud55c \uc774\ud6c4 \ub2e4\uc2dc \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'Error from server: error when retrieving current configuration of:\nResource: "cert-manager.io/v1alpha2, Resource=clusterissuers", GroupVersionKind: "cert-manager.io/v1alpha2, Kind=ClusterIssuer"\nName: "kubeflow-self-signing-issuer", Namespace: ""\nfrom server for: "STDIN": conversion webhook for cert-manager.io/v1, Kind=ClusterIssuer failed: Post "https://cert-manager-webhook.cert-manager.svc:443/convert?timeout=30s": dial tcp 10.101.177.157:443: connect: connection refused\n')))),(0,n.kt)("h3",{id:"istio"},"Istio"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio \uad00\ub828 Custom Resource Definition(CRD) \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-crds/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/authorizationpolicies.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/destinationrules.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/envoyfilters.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/gateways.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/istiooperators.install.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/peerauthentications.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/requestauthentications.security.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/serviceentries.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/sidecars.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/virtualservices.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/workloadentries.networking.istio.io created\ncustomresourcedefinition.apiextensions.k8s.io/workloadgroups.networking.istio.io created\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio namespace \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/istio-system created\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"istio \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/istio-install/base | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/istio-ingressgateway-service-account created\nserviceaccount/istio-reader-service-account created\nserviceaccount/istiod-service-account created\nrole.rbac.authorization.k8s.io/istio-ingressgateway-sds created\nrole.rbac.authorization.k8s.io/istiod-istio-system created\nclusterrole.rbac.authorization.k8s.io/istio-reader-istio-system created\nclusterrole.rbac.authorization.k8s.io/istiod-istio-system created\nrolebinding.rbac.authorization.k8s.io/istio-ingressgateway-sds created\nrolebinding.rbac.authorization.k8s.io/istiod-istio-system created\nclusterrolebinding.rbac.authorization.k8s.io/istio-reader-istio-system created\nclusterrolebinding.rbac.authorization.k8s.io/istiod-istio-system created\nconfigmap/istio created\nconfigmap/istio-sidecar-injector created\nservice/istio-ingressgateway created\nservice/istiod created\ndeployment.apps/istio-ingressgateway created\ndeployment.apps/istiod created\nenvoyfilter.networking.istio.io/metadata-exchange-1.8 created\nenvoyfilter.networking.istio.io/metadata-exchange-1.9 created\nenvoyfilter.networking.istio.io/stats-filter-1.8 created\nenvoyfilter.networking.istio.io/stats-filter-1.9 created\nenvoyfilter.networking.istio.io/tcp-metadata-exchange-1.8 created\nenvoyfilter.networking.istio.io/tcp-metadata-exchange-1.9 created\nenvoyfilter.networking.istio.io/tcp-stats-filter-1.8 created\nenvoyfilter.networking.istio.io/tcp-stats-filter-1.9 created\nenvoyfilter.networking.istio.io/x-forwarded-host created\ngateway.networking.istio.io/istio-ingressgateway created\nauthorizationpolicy.security.istio.io/global-deny-all created\nauthorizationpolicy.security.istio.io/istio-ingressgateway created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/istio-sidecar-injector created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/istiod-istio-system created\n")),(0,n.kt)("p",{parentName:"li"},"istio-system namespace \uc758 2 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n istio-system\n")),(0,n.kt)("p",{parentName:"li"},"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nistio-ingressgateway-79b665c95-xm22l 1/1 Running 0 16s\nistiod-86457659bb-5h58w 1/1 Running 0 16s\n")))),(0,n.kt)("h3",{id:"dex"},"Dex"),(0,n.kt)("p",null,"dex \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/dex/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/auth created\ncustomresourcedefinition.apiextensions.k8s.io/authcodes.dex.coreos.com created\nserviceaccount/dex created\nclusterrole.rbac.authorization.k8s.io/dex created\nclusterrolebinding.rbac.authorization.k8s.io/dex created\nconfigmap/dex created\nsecret/dex-oidc-client created\nservice/dex created\ndeployment.apps/dex created\nvirtualservice.networking.istio.io/dex created\n")),(0,n.kt)("p",null,"auth namespace \uc758 1 \uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n auth\n")),(0,n.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ndex-5ddf47d88d-458cs 1/1 Running 1 12s\n")),(0,n.kt)("h3",{id:"oidc-authservice"},"OIDC AuthService"),(0,n.kt)("p",null,"OIDC AuthService \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/oidc-authservice/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"configmap/oidc-authservice-parameters created\nsecret/oidc-authservice-client created\nservice/authservice created\npersistentvolumeclaim/authservice-pvc created\nstatefulset.apps/authservice created\nenvoyfilter.networking.istio.io/authn-filter created\n")),(0,n.kt)("p",null,"istio-system namespace \uc5d0 authservice-0 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n istio-system -w\n")),(0,n.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nauthservice-0 1/1 Running 0 14s\nistio-ingressgateway-79b665c95-xm22l 1/1 Running 0 2m37s\nistiod-86457659bb-5h58w 1/1 Running 0 2m37s\n")),(0,n.kt)("h3",{id:"kubeflow-namespace"},"Kubeflow Namespace"),(0,n.kt)("p",null,"kubeflow namespace \ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/kubeflow-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"namespace/kubeflow created\n")),(0,n.kt)("p",null,"kubeflow namespace \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get ns kubeflow\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS AGE\nkubeflow Active 8s\n")),(0,n.kt)("h3",{id:"kubeflow-roles"},"Kubeflow Roles"),(0,n.kt)("p",null,"kubeflow-roles \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/kubeflow-roles/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterrole.rbac.authorization.k8s.io/kubeflow-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-kubernetes-view created\nclusterrole.rbac.authorization.k8s.io/kubeflow-view created\n")),(0,n.kt)("p",null,"\ubc29\uae08 \uc0dd\uc131\ud55c kubeflow roles \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get clusterrole | grep kubeflow\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 6\uac1c\uc758 clusterrole \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-admin 2021-12-03T08:51:36Z\nkubeflow-edit 2021-12-03T08:51:36Z\nkubeflow-kubernetes-admin 2021-12-03T08:51:36Z\nkubeflow-kubernetes-edit 2021-12-03T08:51:36Z\nkubeflow-kubernetes-view 2021-12-03T08:51:36Z\nkubeflow-view 2021-12-03T08:51:36Z\n")),(0,n.kt)("h3",{id:"kubeflow-istio-resources"},"Kubeflow Istio Resources"),(0,n.kt)("p",null,"kubeflow-istio-resources \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/istio-1-9/kubeflow-istio-resources/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"clusterrole.rbac.authorization.k8s.io/kubeflow-istio-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-istio-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-istio-view created\ngateway.networking.istio.io/kubeflow-gateway created\n")),(0,n.kt)("p",null,"\ubc29\uae08 \uc0dd\uc131\ud55c kubeflow roles \ub97c \uc870\ud68c\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get clusterrole | grep kubeflow-istio\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 3\uac1c\uc758 clusterrole \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-istio-admin 2021-12-03T08:53:17Z\nkubeflow-istio-edit 2021-12-03T08:53:17Z\nkubeflow-istio-view 2021-12-03T08:53:17Z\n")),(0,n.kt)("p",null,"Kubeflow namespace \uc5d0 gateway \uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get gateway -n kubeflow\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME AGE\nkubeflow-gateway 31s\n")),(0,n.kt)("h3",{id:"kubeflow-pipelines"},"Kubeflow Pipelines"),(0,n.kt)("p",null,"kubeflow pipelines \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/clusterworkflowtemplates.argoproj.io created\ncustomresourcedefinition.apiextensions.k8s.io/cronworkflows.argoproj.io created\ncustomresourcedefinition.apiextensions.k8s.io/workfloweventbindings.argoproj.io created\n...(\uc0dd\ub7b5)\nauthorizationpolicy.security.istio.io/ml-pipeline-visualizationserver created\nauthorizationpolicy.security.istio.io/mysql created\nauthorizationpolicy.security.istio.io/service-cache-server created\n")),(0,n.kt)("p",null,"\uc704 \uba85\ub839\uc5b4\ub294 \uc5ec\ub7ec resources \ub97c \ud55c \ubc88\uc5d0 \uc124\uce58\ud558\uace0 \uc788\uc9c0\ub9cc, \uc124\uce58 \uc21c\uc11c\uc758 \uc758\uc874\uc131\uc774 \uc788\ub294 \ub9ac\uc18c\uc2a4\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\ub530\ub77c\uc11c \ub54c\uc5d0 \ub530\ub77c \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'"error: unable to recognize "STDIN": no matches for kind "CompositeController" in version "metacontroller.k8s.io/v1alpha1"" \n')),(0,n.kt)("p",null,"\uc704\uc640 \ube44\uc2b7\ud55c \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c\ub2e4\uba74, 10 \ucd08 \uc815\ub3c4 \uae30\ub2e4\ub9b0 \ub4a4 \ub2e4\uc2dc \uc704\uc758 \uba85\ub839\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/pipeline/upstream/env/platform-agnostic-multi-user | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 16\uac1c\uc758 pod \uac00 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncache-deployer-deployment-79fdf9c5c9-bjnbg 2/2 Running 1 5m3s\ncache-server-5bdf4f4457-48gbp 2/2 Running 0 5m3s\nkubeflow-pipelines-profile-controller-7b947f4748-8d26b 1/1 Running 0 5m3s\nmetacontroller-0 1/1 Running 0 5m3s\nmetadata-envoy-deployment-5b4856dd5-xtlkd 1/1 Running 0 5m3s\nmetadata-grpc-deployment-6b5685488-kwvv7 2/2 Running 3 5m3s\nmetadata-writer-548bd879bb-zjkcn 2/2 Running 1 5m3s\nminio-5b65df66c9-k5gzg 2/2 Running 0 5m3s\nml-pipeline-8c4b99589-85jw6 2/2 Running 1 5m3s\nml-pipeline-persistenceagent-d6bdc77bd-ssxrv 2/2 Running 0 5m3s\nml-pipeline-scheduledworkflow-5db54d75c5-zk2cw 2/2 Running 0 5m2s\nml-pipeline-ui-5bd8d6dc84-j7wqr 2/2 Running 0 5m2s\nml-pipeline-viewer-crd-68fb5f4d58-mbcbg 2/2 Running 1 5m2s\nml-pipeline-visualizationserver-8476b5c645-wljfm 2/2 Running 0 5m2s\nmysql-f7b9b7dd4-xfnw4 2/2 Running 0 5m2s\nworkflow-controller-5cbbb49bd8-5zrwx 2/2 Running 1 5m2s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c ml-pipeline UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/ml-pipeline-ui -n kubeflow 8888:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8888/#/pipelines/"},"http://localhost:8888/#/pipelines/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"pipeline-ui",src:t(484).Z,width:"2868",height:"970"})),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"localhost \uc5f0\uacb0 \uac70\ubd80 \uc774\uc288")),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"localhost-reject",src:t(9129).Z,width:"626",height:"406"})),(0,n.kt)("p",null,"\ub9cc\uc57d \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,n.kt)("inlineCode",{parentName:"p"},"localhost\uc5d0\uc11c \uc5f0\uacb0\uc744 \uac70\ubd80\ud588\uc2b5\ub2c8\ub2e4")," \ub77c\ub294 \uc5d0\ub7ec\uac00 \ucd9c\ub825\ub420 \uacbd\uc6b0, \ucee4\ub9e8\ub4dc\ub85c address \uc124\uc815\uc744 \ud1b5\ud574 \uc811\uadfc\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"\ubcf4\uc548\uc0c1\uc758 \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4\uba74,")," \uc544\ub798\uc640 \uac19\uc774 ",(0,n.kt)("inlineCode",{parentName:"p"},"0.0.0.0")," \ub85c \ubaa8\ub4e0 \uc8fc\uc18c\uc758 bind\ub97c \uc5f4\uc5b4\uc8fc\ub294 \ubc29\ud5a5\uc73c\ub85c ml-pipeline UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward --address 0.0.0.0 svc/ml-pipeline-ui -n kubeflow 8888:80\n")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"\uc704\uc758 \uc635\uc158\uc73c\ub85c \uc2e4\ud589\ud588\uc74c\uc5d0\ub3c4 \uc5ec\uc804\ud788 \uc5f0\uacb0 \uac70\ubd80 \uc774\uc288\uac00 \ubc1c\uc0dd\ud560 \uacbd\uc6b0")),(0,n.kt)("p",null,"\ubc29\ud654\ubcbd \uc124\uc815\uc73c\ub85c \uc811\uc18d\ud574 \ubaa8\ub4e0 tcp \ud504\ub85c\ud1a0\ucf5c\uc758 \ud3ec\ud2b8\uc5d0 \ub300\ud55c \uc811\uc18d\uc744 \ud5c8\uac00 \ub610\ub294 8888\ubc88 \ud3ec\ud2b8\uc758 \uc811\uc18d \ud5c8\uac00\ub97c \ucd94\uac00\ud574 \uc811\uadfc \uad8c\ud55c\uc744 \ud5c8\uac00\ud574\uc90d\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("inlineCode",{parentName:"p"},"http://<\ub2f9\uc2e0\uc758 \uac00\uc0c1 \uc778\uc2a4\ud134\uc2a4 \uacf5\uc778 ip \uc8fc\uc18c>:8888/#/pipelines/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud558\uba74, ml-pipeline UI \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ud558\ub2e8\uc5d0\uc11c \uc9c4\ud589\ub418\ub294 \ub2e4\ub978 \ud3ec\ud2b8\uc758 \uacbd\ub85c\uc5d0 \uc811\uc18d\ud560 \ub54c\ub3c4 \uc704\uc758 \uc808\ucc28\uc640 \ub3d9\uc77c\ud558\uac8c \ucee4\ub9e8\ub4dc\ub97c \uc2e4\ud589\ud558\uace0, \ubc29\ud654\ubcbd\uc5d0 \ud3ec\ud2b8 \ubc88\ud638\ub97c \ucd94\uac00\ud574\uc8fc\uba74 \uc2e4\ud589\ud558\ub294 \uac83\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4."),(0,n.kt)("h3",{id:"katib"},"Katib"),(0,n.kt)("p",null,"Katib \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/katib/upstream/installs/katib-with-kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/experiments.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/suggestions.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/trials.kubeflow.org created\nserviceaccount/katib-controller created\nserviceaccount/katib-ui created\nclusterrole.rbac.authorization.k8s.io/katib-controller created\nclusterrole.rbac.authorization.k8s.io/katib-ui created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-katib-view created\nclusterrolebinding.rbac.authorization.k8s.io/katib-controller created\nclusterrolebinding.rbac.authorization.k8s.io/katib-ui created\nconfigmap/katib-config created\nconfigmap/trial-templates created\nsecret/katib-mysql-secrets created\nservice/katib-controller created\nservice/katib-db-manager created\nservice/katib-mysql created\nservice/katib-ui created\npersistentvolumeclaim/katib-mysql created\ndeployment.apps/katib-controller created\ndeployment.apps/katib-db-manager created\ndeployment.apps/katib-mysql created\ndeployment.apps/katib-ui created\ncertificate.cert-manager.io/katib-webhook-cert created\nissuer.cert-manager.io/katib-selfsigned-issuer created\nvirtualservice.networking.istio.io/katib-ui created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/katib.kubeflow.org created\nvalidatingwebhookconfiguration.admissionregistration.k8s.io/katib.kubeflow.org created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep katib\n")),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 4 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"katib-controller-68c47fbf8b-b985z 1/1 Running 0 82s\nkatib-db-manager-6c948b6b76-2d9gr 1/1 Running 0 82s\nkatib-mysql-7894994f88-scs62 1/1 Running 0 82s\nkatib-ui-64bb96d5bf-d89kp 1/1 Running 0 82s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c katib UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/katib-ui -n kubeflow 8081:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8081/katib/"},"http://localhost:8081/katib/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"katib-ui",src:t(5052).Z,width:"2146",height:"620"})),(0,n.kt)("h3",{id:"central-dashboard"},"Central Dashboard"),(0,n.kt)("p",null,"Dashboard \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/centraldashboard/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/centraldashboard created\nrole.rbac.authorization.k8s.io/centraldashboard created\nclusterrole.rbac.authorization.k8s.io/centraldashboard created\nrolebinding.rbac.authorization.k8s.io/centraldashboard created\nclusterrolebinding.rbac.authorization.k8s.io/centraldashboard created\nconfigmap/centraldashboard-config created\nconfigmap/centraldashboard-parameters created\nservice/centraldashboard created\ndeployment.apps/centraldashboard created\nvirtualservice.networking.istio.io/centraldashboard created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep centraldashboard\n")),(0,n.kt)("p",null,"kubeflow namespace \uc5d0 centraldashboard \uad00\ub828 1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"centraldashboard-8fc7d8cc-xl7ts 1/1 Running 0 52s\n")),(0,n.kt)("p",null,"\ucd94\uac00\ub85c Central Dashboard UI\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/centraldashboard -n kubeflow 8082:80\n")),(0,n.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8082/"},"http://localhost:8082/")," \uacbd\ub85c\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"central-dashboard",src:t(3680).Z,width:"4982",height:"1548"})),(0,n.kt)("h3",{id:"admission-webhook"},"Admission Webhook"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/admission-webhook/upstream/overlays/cert-manager | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/poddefaults.kubeflow.org created\nserviceaccount/admission-webhook-service-account created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-cluster-role created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-admin created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-edit created\nclusterrole.rbac.authorization.k8s.io/admission-webhook-kubeflow-poddefaults-view created\nclusterrolebinding.rbac.authorization.k8s.io/admission-webhook-cluster-role-binding created\nservice/admission-webhook-service created\ndeployment.apps/admission-webhook-deployment created\ncertificate.cert-manager.io/admission-webhook-cert created\nissuer.cert-manager.io/admission-webhook-selfsigned-issuer created\nmutatingwebhookconfiguration.admissionregistration.k8s.io/admission-webhook-mutating-webhook-configuration created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep admission-webhook\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"admission-webhook-deployment-667bd68d94-2hhrx 1/1 Running 0 11s\n")),(0,n.kt)("h3",{id:"notebooks--jupyter-web-app"},"Notebooks & Jupyter Web App"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Notebook controller \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/jupyter/notebook-controller/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/notebooks.kubeflow.org created\nserviceaccount/notebook-controller-service-account created\nrole.rbac.authorization.k8s.io/notebook-controller-leader-election-role created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-admin created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-edit created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-kubeflow-notebooks-view created\nclusterrole.rbac.authorization.k8s.io/notebook-controller-role created\nrolebinding.rbac.authorization.k8s.io/notebook-controller-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/notebook-controller-role-binding created\nconfigmap/notebook-controller-config-m44cmb547t created\nservice/notebook-controller-service created\ndeployment.apps/notebook-controller-deployment created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep notebook-controller\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"notebook-controller-deployment-75b4f7b578-w4d4l 1/1 Running 0 105s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Jupyter Web App \uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/jupyter/jupyter-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/jupyter-web-app-service-account created\nrole.rbac.authorization.k8s.io/jupyter-web-app-jupyter-notebook-role created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-admin created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-edit created\nclusterrole.rbac.authorization.k8s.io/jupyter-web-app-kubeflow-notebook-ui-view created\nrolebinding.rbac.authorization.k8s.io/jupyter-web-app-jupyter-notebook-role-binding created\nclusterrolebinding.rbac.authorization.k8s.io/jupyter-web-app-cluster-role-binding created\nconfigmap/jupyter-web-app-config-76844k4cd7 created\nconfigmap/jupyter-web-app-logos created\nconfigmap/jupyter-web-app-parameters-chmg88cm48 created\nservice/jupyter-web-app-service created\ndeployment.apps/jupyter-web-app-deployment created\nvirtualservice.networking.istio.io/jupyter-web-app-jupyter-web-app created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep jupyter-web-app\n")),(0,n.kt)("p",{parentName:"li"},"1\uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"jupyter-web-app-deployment-6f744fbc54-p27ts 1/1 Running 0 2m\n")))),(0,n.kt)("h3",{id:"profiles--kfam"},"Profiles + KFAM"),(0,n.kt)("p",null,"Profile Controller\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/profiles/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/profiles.kubeflow.org created\nserviceaccount/profiles-controller-service-account created\nrole.rbac.authorization.k8s.io/profiles-leader-election-role created\nrolebinding.rbac.authorization.k8s.io/profiles-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/profiles-cluster-role-binding created\nconfigmap/namespace-labels-data-48h7kd55mc created\nconfigmap/profiles-config-46c7tgh6fd created\nservice/profiles-kfam created\ndeployment.apps/profiles-deployment created\nvirtualservice.networking.istio.io/profiles-kfam created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep profiles-deployment\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"profiles-deployment-89f7d88b-qsnrd 2/2 Running 0 42s\n")),(0,n.kt)("h3",{id:"volumes-web-app"},"Volumes Web App"),(0,n.kt)("p",null,"Volumes Web App \uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/volumes-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/volumes-web-app-service-account created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-admin created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-edit created\nclusterrole.rbac.authorization.k8s.io/volumes-web-app-kubeflow-volume-ui-view created\nclusterrolebinding.rbac.authorization.k8s.io/volumes-web-app-cluster-role-binding created\nconfigmap/volumes-web-app-parameters-4gg8cm2gmk created\nservice/volumes-web-app-service created\ndeployment.apps/volumes-web-app-deployment created\nvirtualservice.networking.istio.io/volumes-web-app-volumes-web-app created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep volumes-web-app\n")),(0,n.kt)("p",null,"1\uac1c\uc758 pod\uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"volumes-web-app-deployment-8589d664cc-62svl 1/1 Running 0 27s\n")),(0,n.kt)("h3",{id:"tensorboard--tensorboard-web-app"},"Tensorboard & Tensorboard Web App"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Tensorboard Web App \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/tensorboard/tensorboards-web-app/upstream/overlays/istio | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"serviceaccount/tensorboards-web-app-service-account created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-cluster-role created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-admin created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-edit created\nclusterrole.rbac.authorization.k8s.io/tensorboards-web-app-kubeflow-tensorboard-ui-view created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboards-web-app-cluster-role-binding created\nconfigmap/tensorboards-web-app-parameters-g28fbd6cch created\nservice/tensorboards-web-app-service created\ndeployment.apps/tensorboards-web-app-deployment created\nvirtualservice.networking.istio.io/tensorboards-web-app-tensorboards-web-app created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep tensorboards-web-app\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tensorboards-web-app-deployment-6ff79b7f44-qbzmw 1/1 Running 0 22s\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Tensorboard Controller \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/tensorboard/tensorboard-controller/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/tensorboards.tensorboard.kubeflow.org created\nserviceaccount/tensorboard-controller created\nrole.rbac.authorization.k8s.io/tensorboard-controller-leader-election-role created\nclusterrole.rbac.authorization.k8s.io/tensorboard-controller-manager-role created\nclusterrole.rbac.authorization.k8s.io/tensorboard-controller-proxy-role created\nrolebinding.rbac.authorization.k8s.io/tensorboard-controller-leader-election-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboard-controller-manager-rolebinding created\nclusterrolebinding.rbac.authorization.k8s.io/tensorboard-controller-proxy-rolebinding created\nconfigmap/tensorboard-controller-config-bf88mm96c8 created\nservice/tensorboard-controller-controller-manager-metrics-service created\ndeployment.apps/tensorboard-controller-controller-manager created\n")),(0,n.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep tensorboard-controller\n")),(0,n.kt)("p",{parentName:"li"},"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tensorboard-controller-controller-manager-954b7c544-vjpzj 3/3 Running 1 73s\n")))),(0,n.kt)("h3",{id:"training-operator"},"Training Operator"),(0,n.kt)("p",null,"Training Operator \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build apps/training-operator/upstream/overlays/kubeflow | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"customresourcedefinition.apiextensions.k8s.io/mxjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/pytorchjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/tfjobs.kubeflow.org created\ncustomresourcedefinition.apiextensions.k8s.io/xgboostjobs.kubeflow.org created\nserviceaccount/training-operator created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-admin created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-edit created\nclusterrole.rbac.authorization.k8s.io/kubeflow-training-view created\nclusterrole.rbac.authorization.k8s.io/training-operator created\nclusterrolebinding.rbac.authorization.k8s.io/training-operator created\nservice/training-operator created\ndeployment.apps/training-operator created\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow | grep training-operator\n")),(0,n.kt)("p",null,"1 \uac1c\uc758 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"training-operator-7d98f9dd88-6887f 1/1 Running 0 28s\n")),(0,n.kt)("h3",{id:"user-namespace"},"User Namespace"),(0,n.kt)("p",null,"Kubeflow \uc0ac\uc6a9\uc744 \uc704\ud574, \uc0ac\uc6a9\ud560 User\uc758 Kubeflow Profile \uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kustomize build common/user-namespace/base | kubectl apply -f -\n")),(0,n.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"configmap/default-install-config-9h2h2b6hbk created\nprofile.kubeflow.org/kubeflow-user-example-com created\n")),(0,n.kt)("p",null,"kubeflow-user-example-com profile \uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get profile\n")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubeflow-user-example-com 37s\n")),(0,n.kt)("h2",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,n.kt)("p",null,"Kubeflow central dashboard\uc5d0 web browser\ub85c \uc811\uc18d\ud558\uae30 \uc704\ud574 \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,n.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,n.kt)("a",{parentName:"p",href:"http://localhost:8080"},"http://localhost:8080")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"login-ui",src:t(1982).Z,width:"2554",height:"1202"})),(0,n.kt)("p",null,"\ub2e4\uc74c \uc811\uc18d \uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Email Address: ",(0,n.kt)("inlineCode",{parentName:"li"},"user@example.com")),(0,n.kt)("li",{parentName:"ul"},"Password: ",(0,n.kt)("inlineCode",{parentName:"li"},"12341234"))),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"central-dashboard",src:t(9150).Z,width:"4008",height:"1266"})))}d.isMDXComponent=!0},9150:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/after-login-4b41daca6d9a97824552770b832d59b0.png"},3680:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/central-dashboard-ddf80e24ff9066a7e3fdbfd0d58b5721.png"},5052:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/katib-ui-f10efe0ffd3bb57b1de7bdc2ff2aa880.png"},9129:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/localhost-reject-8d0b59ff30048e97d5721f786f25c857.png"},1982:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/login-after-install-a3e252f02dc4f4988686d6ae97ddd41f.png"},484:(e,a,t)=>{t.d(a,{Z:()=>r});const r=t.p+"assets/images/pipeline-ui-796868a1ebeabfd6d1b6eb9b54c389aa.png"}}]); \ No newline at end of file diff --git a/assets/js/b1f93f8c.3bd68ea2.js b/assets/js/b1f93f8c.3bd68ea2.js new file mode 100644 index 00000000..8eebf416 --- /dev/null +++ b/assets/js/b1f93f8c.3bd68ea2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5717],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>b});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),o=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):u(u({},t),e)),n},p=function(e){var t=o(e.components);return r.createElement(i.Provider,{value:t},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,b=c["".concat(i,".").concat(d)]||c[d]||k[d]||l;return n?r.createElement(b,u(u({ref:t},p),{},{components:n})):r.createElement(b,u({ref:t},p))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,u=new Array(l);u[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:a,u[1]=s;for(var o=2;o{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>u,default:()=>k,frontMatter:()=>l,metadata:()=>s,toc:()=>o});var r=n(7462),a=(n(7294),n(3905));const l={title:"4.3. Kubeadm",description:"",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Youngcheol Jang"]},u=void 0,s={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",id:"setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",title:"4.3. Kubeadm",description:"",source:"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"4.3. Kubeadm",description:"",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"4.1. K3s",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s"},next:{title:"4.2. Minikube",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube"}},i={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"6. References",id:"6-references",level:2}],p={toc:o},c="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc704\ud55c \ub124\ud2b8\uc6cc\ud06c\uc758 \uc124\uc815\uc744 \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo modprobe br_netfilter\n\ncat <{n.d(t,{Zo:()=>p,kt:()=>b});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),o=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):u(u({},t),e)),n},p=function(e){var t=o(e.components);return r.createElement(i.Provider,{value:t},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,b=c["".concat(i,".").concat(d)]||c[d]||k[d]||l;return n?r.createElement(b,u(u({ref:t},p),{},{components:n})):r.createElement(b,u({ref:t},p))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,u=new Array(l);u[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:a,u[1]=s;for(var o=2;o{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>u,default:()=>k,frontMatter:()=>l,metadata:()=>s,toc:()=>o});var r=n(7462),a=(n(7294),n(3905));const l={title:"4.3. Kubeadm",description:"",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Youngcheol Jang"]},u=void 0,s={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",id:"setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",title:"4.3. Kubeadm",description:"",source:"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"4.3. Kubeadm",description:"",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"4.1. K3s",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s"},next:{title:"4.2. Minikube",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube"}},i={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"6. References",id:"6-references",level:2}],p={toc:o},c="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc704\ud55c \ub124\ud2b8\uc6cc\ud06c\uc758 \uc124\uc815\uc744 \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo modprobe br_netfilter\n\ncat <{r.d(e,{Zo:()=>o,kt:()=>b});var t=r(7294);function p(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function u(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,t)}return r}function a(n){for(var e=1;e=0||(p[r]=n[r]);return p}(n,e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(p[r]=n[r])}return p}var s=t.createContext({}),m=function(n){var e=t.useContext(s),r=e;return n&&(r="function"==typeof n?n(e):a(a({},e),n)),r},o=function(n){var e=m(n.components);return t.createElement(s.Provider,{value:e},n.children)},_="mdxType",l={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(n,e){var r=n.components,p=n.mdxType,u=n.originalType,s=n.parentName,o=i(n,["components","mdxType","originalType","parentName"]),_=m(r),d=p,b=_["".concat(s,".").concat(d)]||_[d]||l[d]||u;return r?t.createElement(b,a(a({ref:e},o),{},{components:r})):t.createElement(b,a({ref:e},o))}));function b(n,e){var r=arguments,p=e&&e.mdxType;if("string"==typeof n||p){var u=r.length,a=new Array(u);a[0]=d;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=n,i[_]="string"==typeof n?n:p,a[1]=i;for(var m=2;m{r.r(e),r.d(e,{assets:()=>s,contentTitle:()=>a,default:()=>l,frontMatter:()=>u,metadata:()=>i,toc:()=>m});var t=r(7462),p=(r(7294),r(3905));const u={title:"5. Pipeline - Write",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},a=void 0,i={unversionedId:"kubeflow/basic-pipeline",id:"kubeflow/basic-pipeline",title:"5. Pipeline - Write",description:"",source:"@site/docs/kubeflow/basic-pipeline.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-pipeline",permalink:"/docs/kubeflow/basic-pipeline",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-pipeline.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"5. Pipeline - Write",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"4. Component - Write",permalink:"/docs/kubeflow/basic-component"},next:{title:"6. Pipeline - Upload",permalink:"/docs/kubeflow/basic-pipeline-upload"}},s={},m=[{value:"Pipeline",id:"pipeline",level:2},{value:"Component Set",id:"component-set",level:2},{value:"Component Order",id:"component-order",level:2},{value:"Define Order",id:"define-order",level:3},{value:"Single Output",id:"single-output",level:3},{value:"Multi Output",id:"multi-output",level:3},{value:"Write to python code",id:"write-to-python-code",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:2},{value:"Conclusion",id:"conclusion",level:2}],o={toc:m},_="wrapper";function l(n){let{components:e,...u}=n;return(0,p.kt)(_,(0,t.Z)({},o,u,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"pipeline"},"Pipeline"),(0,p.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc2e4\ud589\ub418\uc9c0 \uc54a\uace0 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uad6c\uc131\uc694\uc18c\ub85c\uc368 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud574 \ubcf4\ub824\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uacfc \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \uc21c\uc11c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,p.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc22b\uc790\ub97c \uc785\ub825\ubc1b\uace0 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc640 \ub450 \uac1c\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uc22b\uc790\ub97c \ubc1b\uc544\uc11c \ud569\uc744 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc788\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"component-set"},"Component Set"),(0,p.kt)("p",null,"\uc6b0\uc120 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,p.kt)("ol",null,(0,p.kt)("li",{parentName:"ol"},(0,p.kt)("p",{parentName:"li"},(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number")),(0,p.kt)("p",{parentName:"li"},"\uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c \ucd9c\ub825\ud558\uace0 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc785\ub825\ubc1b\uc740 \uac12\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 int\ub97c return\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub85c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",{parentName:"li"},(0,p.kt)("code",{parentName:"pre",className:"language-python"},"@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n"))),(0,p.kt)("li",{parentName:"ol"},(0,p.kt)("p",{parentName:"li"},(0,p.kt)("inlineCode",{parentName:"p"},"sum_and_print_numbers")),(0,p.kt)("p",{parentName:"li"},"\uc785\ub825\ubc1b\uc740 \ub450 \uac1c\uc758 \uc22b\uc790\uc758 \ud569\uc744 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774 \ucef4\ud3ec\ub10c\ud2b8 \uc5ed\uc2dc \ub450 \uc22b\uc790\uc758 \ud569\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 int\ub97c return\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub85c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",{parentName:"li"},(0,p.kt)("code",{parentName:"pre",className:"language-python"},"@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int) -> int:\n sum_num = number_1 + number_2\n print(sum_num)\n return sum_num\n")))),(0,p.kt)("h2",{id:"component-order"},"Component Order"),(0,p.kt)("h3",{id:"define-order"},"Define Order"),(0,p.kt)("p",null,"\ud544\uc694\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uc744 \ub9cc\ub4e4\uc5c8\uc73c\uba74, \ub2e4\uc74c\uc73c\ub85c\ub294 \uc774\ub4e4\uc758 \uc21c\uc11c\ub97c \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c \ub9cc\ub4e4 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc21c\uc11c\ub97c \uadf8\ub9bc\uc73c\ub85c \ud45c\ud604\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"pipeline-0.png",src:r(3618).Z,width:"586",height:"262"})),(0,p.kt)("h3",{id:"single-output"},"Single Output"),(0,p.kt)("p",null,"\uc774\uc81c \uc774 \uc21c\uc11c\ub97c \ucf54\ub4dc\ub85c \uc62e\uaca8\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. "),(0,p.kt)("p",null,"\uc6b0\uc120 \uc704\uc758 \uadf8\ub9bc\uc5d0\uc11c ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number_1")," \uacfc ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number_2")," \ub97c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline():\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n")),(0,p.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uace0 \uadf8 \ubc18\ud658 \uac12\uc744 \uac01\uac01 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_result")," \uc640 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_2_result")," \uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc800\uc7a5\ub41c ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_result")," \uc758 \ubc18\ud658 \uac12\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_resulst.output")," \ub97c \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"multi-output"},"Multi Output"),(0,p.kt)("p",null,"\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e8\uc77c \uac12\ub9cc\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 ",(0,p.kt)("inlineCode",{parentName:"p"},"output"),"\uc744 \uc774\uc6a9\ud574 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \uc5ec\ub7ec \uac1c\uc758 \ubc18\ud658 \uac12\uc774 \uc788\ub2e4\uba74 ",(0,p.kt)("inlineCode",{parentName:"p"},"outputs"),"\uc5d0 \uc800\uc7a5\uc774 \ub418\uba70 dict \ud0c0\uc785\uc774\uae30\uc5d0 key\ub97c \uc774\uc6a9\ud574 \uc6d0\ud558\ub294 \ubc18\ud658 \uac12\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc608\ub97c \ub4e4\uc5b4\uc11c \uc55e\uc5d0\uc11c \uc791\uc131\ud55c \uc5ec\ub7ec \uac1c\ub97c \ubc18\ud658\ud558\ub294 ",(0,p.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-component#define-a-standalone-python-function"},"\ucef4\ud3ec\ub10c\ud2b8")," \uc758 \uacbd\uc6b0\ub97c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n",(0,p.kt)("inlineCode",{parentName:"p"},"divde_and_return_number")," \uc758 return \uac12\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"quotient")," \uc640 ",(0,p.kt)("inlineCode",{parentName:"p"},"remainder")," \uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \uac12\uc744 ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number")," \uc5d0 \uc804\ub2ec\ud558\ub294 \uc608\uc2dc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'def multi_pipeline():\n divided_result = divde_and_return_number(number)\n num_1_result = print_and_return_number(divided_result.outputs["quotient"])\n num_2_result = print_and_return_number(divided_result.outputs["remainder"])\n')),(0,p.kt)("p",null,(0,p.kt)("inlineCode",{parentName:"p"},"divde_and_return_number"),"\uc758 \uacb0\uacfc\ub97c ",(0,p.kt)("inlineCode",{parentName:"p"},"divided_result"),"\uc5d0 \uc800\uc7a5\ud558\uace0 \uac01\uac01 ",(0,p.kt)("inlineCode",{parentName:"p"},'divided_result.outputs["quotient"]'),", ",(0,p.kt)("inlineCode",{parentName:"p"},'divided_result.outputs["remainder"]'),"\ub85c \uac12\uc744 \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"write-to-python-code"},"Write to python code"),(0,p.kt)("p",null,"\uc774\uc81c \ub2e4\uc2dc \ubcf8\ub860\uc73c\ub85c \ub3cc\uc544\uc640\uc11c \uc774 \ub450 \uac12\uc758 \uacb0\uacfc\ub97c ",(0,p.kt)("inlineCode",{parentName:"p"},"sum_and_print_numbers")," \uc5d0 \uc804\ub2ec\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline():\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n")),(0,p.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c \uac01 \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ud544\uc694\ud55c Config\ub4e4\uc744 \ubaa8\uc544\uc11c \ud30c\uc774\ud504\ub77c\uc778 Config\ub85c \uc815\uc758 \ud569\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline(number_1: int, number_2:int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n")),(0,p.kt)("h2",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,p.kt)("p",null,"\ub9c8\uc9c0\ub9c9\uc73c\ub85c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4. \ubcc0\ud658\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"kfp.dsl.pipeline")," \ud568\uc218\ub97c \uc774\uc6a9\ud574 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n')),(0,p.kt)("p",null,"Kubeflow\uc5d0\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 yaml \ud615\uc2dd\uc73c\ub85c\ub9cc \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc5d0 \uc0dd\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc815\ud574\uc9c4 yaml \ud615\uc2dd\uc73c\ub85c \ucef4\ud30c\uc77c(Compile) \ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ucef4\ud30c\uc77c\uc740 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'if __name__ == "__main__":\n import kfp\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("h2",{id:"conclusion"},"Conclusion"),(0,p.kt)("p",null,"\uc55e\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \ubaa8\uc73c\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\ucef4\ud30c\uc77c\ub41c \uacb0\uacfc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("details",null,(0,p.kt)("summary",null,"example_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: example-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline_compilation_time: \'2021-12-05T13:38:51.566777\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "number_1", "type":\n "Integer"}, {"name": "number_2", "type": "Integer"}], "name": "example_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3}\nspec:\n entrypoint: example-pipeline\n templates:\n - name: example-pipeline\n inputs:\n parameters:\n - {name: number_1}\n - {name: number_2}\n dag:\n tasks:\n - name: print-and-return-number\n template: print-and-return-number\n arguments:\n parameters:\n - {name: number_1, value: \'{{inputs.parameters.number_1}}\'}\n - name: print-and-return-number-2\n template: print-and-return-number-2\n arguments:\n parameters:\n - {name: number_2, value: \'{{inputs.parameters.number_2}}\'}\n - name: sum-and-print-numbers\n template: sum-and-print-numbers\n dependencies: [print-and-return-number, print-and-return-number-2]\n arguments:\n parameters:\n - {name: print-and-return-number-2-Output, value: \'{{tasks.print-and-return-number-2.outputs.parameters.print-and-return-number-2-Output}}\'}\n - {name: print-and-return-number-Output, value: \'{{tasks.print-and-return-number.outputs.parameters.print-and-return-number-Output}}\'}\n - name: print-and-return-number\n container:\n args: [--number, \'{{inputs.parameters.number_1}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_1}\n outputs:\n parameters:\n - name: print-and-return-number-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-Output, path: /tmp/outputs/Output/data}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number", {"inputValue": "number"}, "----output-paths", {"outputPath":\n "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(str(int_value), str(type(int_value))))\\n return\n str(int_value)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Print\n and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_1}}"}\'}\n - name: print-and-return-number-2\n container:\n args: [--number, \'{{inputs.parameters.number_2}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_2}\n outputs:\n parameters:\n - name: print-and-return-number-2-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-2-Output, path: /tmp/outputs/Output/data}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number", {"inputValue": "number"}, "----output-paths", {"outputPath":\n "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(str(int_value), str(type(int_value))))\\n return\n str(int_value)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Print\n and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_2}}"}\'}\n - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: print-and-return-number-2-Output}\n - {name: print-and-return-number-Output}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number-1", {"inputValue": "number_1"}, "--number-2", {"inputValue":\n "number_2"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n sum_and_print_numbers(number_1, number_2):\\n print(number_1 + number_2)\\n\\nimport\n argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Sum and print numbers\'\',\n description=\'\'\'\')\\n_parser.add_argument(\\"--number-1\\", dest=\\"number_1\\",\n type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--number-2\\",\n dest=\\"number_2\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = sum_and_print_numbers(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number_1", "type": "Integer"},\n {"name": "number_2", "type": "Integer"}], "name": "Sum and print numbers"}\',\n pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number_1":\n "{{inputs.parameters.print-and-return-number-Output}}", "number_2": "{{inputs.parameters.print-and-return-number-2-Output}}"}\'}\n arguments:\n parameters:\n - {name: number_1}\n - {name: number_2}\n serviceAccountName: pipeline-runner\n'))))}l.isMDXComponent=!0},3618:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/pipeline-0-c62220ce65ed4a187b70947bccb0f1e6.png"}}]); \ No newline at end of file diff --git a/assets/js/b2277d04.d060ccfa.js b/assets/js/b2277d04.d060ccfa.js new file mode 100644 index 00000000..d18ec6e6 --- /dev/null +++ b/assets/js/b2277d04.d060ccfa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6746],{3905:(n,e,r)=>{r.d(e,{Zo:()=>o,kt:()=>b});var t=r(7294);function p(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function u(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,t)}return r}function a(n){for(var e=1;e=0||(p[r]=n[r]);return p}(n,e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(p[r]=n[r])}return p}var s=t.createContext({}),m=function(n){var e=t.useContext(s),r=e;return n&&(r="function"==typeof n?n(e):a(a({},e),n)),r},o=function(n){var e=m(n.components);return t.createElement(s.Provider,{value:e},n.children)},_="mdxType",l={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(n,e){var r=n.components,p=n.mdxType,u=n.originalType,s=n.parentName,o=i(n,["components","mdxType","originalType","parentName"]),_=m(r),d=p,b=_["".concat(s,".").concat(d)]||_[d]||l[d]||u;return r?t.createElement(b,a(a({ref:e},o),{},{components:r})):t.createElement(b,a({ref:e},o))}));function b(n,e){var r=arguments,p=e&&e.mdxType;if("string"==typeof n||p){var u=r.length,a=new Array(u);a[0]=d;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=n,i[_]="string"==typeof n?n:p,a[1]=i;for(var m=2;m{r.r(e),r.d(e,{assets:()=>s,contentTitle:()=>a,default:()=>l,frontMatter:()=>u,metadata:()=>i,toc:()=>m});var t=r(7462),p=(r(7294),r(3905));const u={title:"5. Pipeline - Write",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},a=void 0,i={unversionedId:"kubeflow/basic-pipeline",id:"kubeflow/basic-pipeline",title:"5. Pipeline - Write",description:"",source:"@site/docs/kubeflow/basic-pipeline.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-pipeline",permalink:"/docs/kubeflow/basic-pipeline",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-pipeline.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"5. Pipeline - Write",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"4. Component - Write",permalink:"/docs/kubeflow/basic-component"},next:{title:"6. Pipeline - Upload",permalink:"/docs/kubeflow/basic-pipeline-upload"}},s={},m=[{value:"Pipeline",id:"pipeline",level:2},{value:"Component Set",id:"component-set",level:2},{value:"Component Order",id:"component-order",level:2},{value:"Define Order",id:"define-order",level:3},{value:"Single Output",id:"single-output",level:3},{value:"Multi Output",id:"multi-output",level:3},{value:"Write to python code",id:"write-to-python-code",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:2},{value:"Conclusion",id:"conclusion",level:2}],o={toc:m},_="wrapper";function l(n){let{components:e,...u}=n;return(0,p.kt)(_,(0,t.Z)({},o,u,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"pipeline"},"Pipeline"),(0,p.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc2e4\ud589\ub418\uc9c0 \uc54a\uace0 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uad6c\uc131\uc694\uc18c\ub85c\uc368 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud574 \ubcf4\ub824\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uacfc \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \uc21c\uc11c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,p.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc22b\uc790\ub97c \uc785\ub825\ubc1b\uace0 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc640 \ub450 \uac1c\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uc22b\uc790\ub97c \ubc1b\uc544\uc11c \ud569\uc744 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc788\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"component-set"},"Component Set"),(0,p.kt)("p",null,"\uc6b0\uc120 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,p.kt)("ol",null,(0,p.kt)("li",{parentName:"ol"},(0,p.kt)("p",{parentName:"li"},(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number")),(0,p.kt)("p",{parentName:"li"},"\uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c \ucd9c\ub825\ud558\uace0 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc785\ub825\ubc1b\uc740 \uac12\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 int\ub97c return\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub85c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",{parentName:"li"},(0,p.kt)("code",{parentName:"pre",className:"language-python"},"@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n"))),(0,p.kt)("li",{parentName:"ol"},(0,p.kt)("p",{parentName:"li"},(0,p.kt)("inlineCode",{parentName:"p"},"sum_and_print_numbers")),(0,p.kt)("p",{parentName:"li"},"\uc785\ub825\ubc1b\uc740 \ub450 \uac1c\uc758 \uc22b\uc790\uc758 \ud569\uc744 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774 \ucef4\ud3ec\ub10c\ud2b8 \uc5ed\uc2dc \ub450 \uc22b\uc790\uc758 \ud569\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 int\ub97c return\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub85c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",{parentName:"li"},(0,p.kt)("code",{parentName:"pre",className:"language-python"},"@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int) -> int:\n sum_num = number_1 + number_2\n print(sum_num)\n return sum_num\n")))),(0,p.kt)("h2",{id:"component-order"},"Component Order"),(0,p.kt)("h3",{id:"define-order"},"Define Order"),(0,p.kt)("p",null,"\ud544\uc694\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uc744 \ub9cc\ub4e4\uc5c8\uc73c\uba74, \ub2e4\uc74c\uc73c\ub85c\ub294 \uc774\ub4e4\uc758 \uc21c\uc11c\ub97c \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c \ub9cc\ub4e4 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc21c\uc11c\ub97c \uadf8\ub9bc\uc73c\ub85c \ud45c\ud604\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"pipeline-0.png",src:r(3618).Z,width:"586",height:"262"})),(0,p.kt)("h3",{id:"single-output"},"Single Output"),(0,p.kt)("p",null,"\uc774\uc81c \uc774 \uc21c\uc11c\ub97c \ucf54\ub4dc\ub85c \uc62e\uaca8\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. "),(0,p.kt)("p",null,"\uc6b0\uc120 \uc704\uc758 \uadf8\ub9bc\uc5d0\uc11c ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number_1")," \uacfc ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number_2")," \ub97c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline():\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n")),(0,p.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uace0 \uadf8 \ubc18\ud658 \uac12\uc744 \uac01\uac01 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_result")," \uc640 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_2_result")," \uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc800\uc7a5\ub41c ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_result")," \uc758 \ubc18\ud658 \uac12\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_resulst.output")," \ub97c \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"multi-output"},"Multi Output"),(0,p.kt)("p",null,"\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e8\uc77c \uac12\ub9cc\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 ",(0,p.kt)("inlineCode",{parentName:"p"},"output"),"\uc744 \uc774\uc6a9\ud574 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \uc5ec\ub7ec \uac1c\uc758 \ubc18\ud658 \uac12\uc774 \uc788\ub2e4\uba74 ",(0,p.kt)("inlineCode",{parentName:"p"},"outputs"),"\uc5d0 \uc800\uc7a5\uc774 \ub418\uba70 dict \ud0c0\uc785\uc774\uae30\uc5d0 key\ub97c \uc774\uc6a9\ud574 \uc6d0\ud558\ub294 \ubc18\ud658 \uac12\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc608\ub97c \ub4e4\uc5b4\uc11c \uc55e\uc5d0\uc11c \uc791\uc131\ud55c \uc5ec\ub7ec \uac1c\ub97c \ubc18\ud658\ud558\ub294 ",(0,p.kt)("a",{parentName:"p",href:"/docs/kubeflow/basic-component#define-a-standalone-python-function"},"\ucef4\ud3ec\ub10c\ud2b8")," \uc758 \uacbd\uc6b0\ub97c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n",(0,p.kt)("inlineCode",{parentName:"p"},"divde_and_return_number")," \uc758 return \uac12\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"quotient")," \uc640 ",(0,p.kt)("inlineCode",{parentName:"p"},"remainder")," \uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \uac12\uc744 ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number")," \uc5d0 \uc804\ub2ec\ud558\ub294 \uc608\uc2dc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'def multi_pipeline():\n divided_result = divde_and_return_number(number)\n num_1_result = print_and_return_number(divided_result.outputs["quotient"])\n num_2_result = print_and_return_number(divided_result.outputs["remainder"])\n')),(0,p.kt)("p",null,(0,p.kt)("inlineCode",{parentName:"p"},"divde_and_return_number"),"\uc758 \uacb0\uacfc\ub97c ",(0,p.kt)("inlineCode",{parentName:"p"},"divided_result"),"\uc5d0 \uc800\uc7a5\ud558\uace0 \uac01\uac01 ",(0,p.kt)("inlineCode",{parentName:"p"},'divided_result.outputs["quotient"]'),", ",(0,p.kt)("inlineCode",{parentName:"p"},'divided_result.outputs["remainder"]'),"\ub85c \uac12\uc744 \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"write-to-python-code"},"Write to python code"),(0,p.kt)("p",null,"\uc774\uc81c \ub2e4\uc2dc \ubcf8\ub860\uc73c\ub85c \ub3cc\uc544\uc640\uc11c \uc774 \ub450 \uac12\uc758 \uacb0\uacfc\ub97c ",(0,p.kt)("inlineCode",{parentName:"p"},"sum_and_print_numbers")," \uc5d0 \uc804\ub2ec\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline():\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n")),(0,p.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c \uac01 \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ud544\uc694\ud55c Config\ub4e4\uc744 \ubaa8\uc544\uc11c \ud30c\uc774\ud504\ub77c\uc778 Config\ub85c \uc815\uc758 \ud569\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline(number_1: int, number_2:int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n")),(0,p.kt)("h2",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,p.kt)("p",null,"\ub9c8\uc9c0\ub9c9\uc73c\ub85c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4. \ubcc0\ud658\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"kfp.dsl.pipeline")," \ud568\uc218\ub97c \uc774\uc6a9\ud574 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n')),(0,p.kt)("p",null,"Kubeflow\uc5d0\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 yaml \ud615\uc2dd\uc73c\ub85c\ub9cc \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc5d0 \uc0dd\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc815\ud574\uc9c4 yaml \ud615\uc2dd\uc73c\ub85c \ucef4\ud30c\uc77c(Compile) \ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ucef4\ud30c\uc77c\uc740 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'if __name__ == "__main__":\n import kfp\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("h2",{id:"conclusion"},"Conclusion"),(0,p.kt)("p",null,"\uc55e\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \ubaa8\uc73c\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\ucef4\ud30c\uc77c\ub41c \uacb0\uacfc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("details",null,(0,p.kt)("summary",null,"example_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: example-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline_compilation_time: \'2021-12-05T13:38:51.566777\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "number_1", "type":\n "Integer"}, {"name": "number_2", "type": "Integer"}], "name": "example_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3}\nspec:\n entrypoint: example-pipeline\n templates:\n - name: example-pipeline\n inputs:\n parameters:\n - {name: number_1}\n - {name: number_2}\n dag:\n tasks:\n - name: print-and-return-number\n template: print-and-return-number\n arguments:\n parameters:\n - {name: number_1, value: \'{{inputs.parameters.number_1}}\'}\n - name: print-and-return-number-2\n template: print-and-return-number-2\n arguments:\n parameters:\n - {name: number_2, value: \'{{inputs.parameters.number_2}}\'}\n - name: sum-and-print-numbers\n template: sum-and-print-numbers\n dependencies: [print-and-return-number, print-and-return-number-2]\n arguments:\n parameters:\n - {name: print-and-return-number-2-Output, value: \'{{tasks.print-and-return-number-2.outputs.parameters.print-and-return-number-2-Output}}\'}\n - {name: print-and-return-number-Output, value: \'{{tasks.print-and-return-number.outputs.parameters.print-and-return-number-Output}}\'}\n - name: print-and-return-number\n container:\n args: [--number, \'{{inputs.parameters.number_1}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_1}\n outputs:\n parameters:\n - name: print-and-return-number-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-Output, path: /tmp/outputs/Output/data}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number", {"inputValue": "number"}, "----output-paths", {"outputPath":\n "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(str(int_value), str(type(int_value))))\\n return\n str(int_value)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Print\n and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_1}}"}\'}\n - name: print-and-return-number-2\n container:\n args: [--number, \'{{inputs.parameters.number_2}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_2}\n outputs:\n parameters:\n - name: print-and-return-number-2-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-2-Output, path: /tmp/outputs/Output/data}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number", {"inputValue": "number"}, "----output-paths", {"outputPath":\n "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(str(int_value), str(type(int_value))))\\n return\n str(int_value)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Print\n and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_2}}"}\'}\n - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: print-and-return-number-2-Output}\n - {name: print-and-return-number-Output}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number-1", {"inputValue": "number_1"}, "--number-2", {"inputValue":\n "number_2"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n sum_and_print_numbers(number_1, number_2):\\n print(number_1 + number_2)\\n\\nimport\n argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Sum and print numbers\'\',\n description=\'\'\'\')\\n_parser.add_argument(\\"--number-1\\", dest=\\"number_1\\",\n type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--number-2\\",\n dest=\\"number_2\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = sum_and_print_numbers(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number_1", "type": "Integer"},\n {"name": "number_2", "type": "Integer"}], "name": "Sum and print numbers"}\',\n pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number_1":\n "{{inputs.parameters.print-and-return-number-Output}}", "number_2": "{{inputs.parameters.print-and-return-number-2-Output}}"}\'}\n arguments:\n parameters:\n - {name: number_1}\n - {name: number_2}\n serviceAccountName: pipeline-runner\n'))))}l.isMDXComponent=!0},3618:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/pipeline-0-c62220ce65ed4a187b70947bccb0f1e6.png"}}]); \ No newline at end of file diff --git a/assets/js/b3824f13.a2543bfd.js b/assets/js/b3824f13.a2543bfd.js new file mode 100644 index 00000000..9ef684fa --- /dev/null +++ b/assets/js/b3824f13.a2543bfd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4818],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var o=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var p=o.createContext({}),c=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=c(e.components);return o.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,l=e.mdxType,r=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=c(n),f=l,m=u["".concat(p,".").concat(f)]||u[f]||d[f]||r;return n?o.createElement(m,a(a({ref:t},s),{},{components:n})):o.createElement(m,a({ref:t},s))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=n.length,a=new Array(r);a[0]=f;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:l,a[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var o=n(7462),l=(n(7294),n(3905));const r={title:"2. Kubeflow Concepts",description:"",sidebar_position:2,contributors:["Jongseob Jeon"]},a=void 0,i={unversionedId:"kubeflow/kubeflow-concepts",id:"kubeflow/kubeflow-concepts",title:"2. Kubeflow Concepts",description:"",source:"@site/docs/kubeflow/kubeflow-concepts.md",sourceDirName:"kubeflow",slug:"/kubeflow/kubeflow-concepts",permalink:"/docs/kubeflow/kubeflow-concepts",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/kubeflow-concepts.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Kubeflow Concepts",description:"",sidebar_position:2,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"1. Kubeflow Introduction",permalink:"/docs/kubeflow/kubeflow-intro"},next:{title:"3. Install Requirements",permalink:"/docs/kubeflow/basic-requirements"}},p={},c=[{value:"Component",id:"component",level:2},{value:"Component Contents",id:"component-contents",level:3},{value:"Component Wrapper",id:"component-wrapper",level:3},{value:"Artifacts",id:"artifacts",level:3},{value:"Model",id:"model",level:4},{value:"Data",id:"data",level:4},{value:"Metric",id:"metric",level:4},{value:"Pipeline",id:"pipeline",level:2},{value:"Pipeline Config",id:"pipeline-config",level:3},{value:"Run",id:"run",level:2}],s={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,l.kt)(u,(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"component"},"Component"),(0,l.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8(Component)\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20(Component contents)\uc640 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c(Component wrapper)\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.\n\ud558\ub098\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \ud1b5\ud574 kubeflow\uc5d0 \uc804\ub2ec\ub418\uba70 \uc804\ub2ec\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc815\uc758\ub41c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589(execute)\ud558\uace0 \uc544\ud2f0\ud329\ud2b8(artifacts)\ub4e4\uc744 \uc0dd\uc0b0\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-0.png",src:n(3396).Z,width:"1392",height:"704"})),(0,l.kt)("h3",{id:"component-contents"},"Component Contents"),(0,l.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uad6c\uc131\ud558\ub294 \uac83\uc740 \ucd1d 3\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-1.png",src:n(8482).Z,width:"574",height:"436"})),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Environemnt"),(0,l.kt)("li",{parentName:"ol"},"Python code w\\ Config"),(0,l.kt)("li",{parentName:"ol"},"Generates Artifacts")),(0,l.kt)("p",null,"\uc608\uc2dc\uc640 \ud568\uaed8 \uac01 \uad6c\uc131 \uc694\uc18c\uac00 \uc5b4\ub5a4 \uac83\uc778\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\ub2e4\uc74c\uacfc \uac19\uc774 \ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc640 SVC(Support Vector Classifier)\ub97c \ud559\uc2b5\ud55c \ud6c4 SVC \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc744 \uc801\uc740 \ud30c\uc774\uc36c \ucf54\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},'import dill\nimport pandas as pd\n\nfrom sklearn.svm import SVC\n\ntrain_data = pd.read_csv(train_data_path)\ntrain_target= pd.read_csv(train_target_path)\n\nclf= SVC(\n kernel=kernel\n)\nclf.fit(train_data)\n\nwith open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,l.kt)("p",null,"\uc704\uc758 \ud30c\uc774\uc36c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub85c \ub098\ub20c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-2.png",src:n(4582).Z,width:"832",height:"410"})),(0,l.kt)("p",null,"Environment\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\ub4e4\uc744 import\ud558\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c\uc73c\ub85c Python Code w\\ Config \uc5d0\uc11c\ub294 \uc8fc\uc5b4\uc9c4 Config\ub97c \uc774\uc6a9\ud574 \uc2e4\uc81c\ub85c \ud559\uc2b5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc544\ud2f0\ud329\ud2b8\ub97c \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"component-wrapper"},"Component Wrapper"),(0,l.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc5d0 \ud544\uc694\ud55c Config\ub97c \uc804\ub2ec\ud558\uace0 \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc791\uc5c5\uc744 \ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-3.png",src:n(3204).Z,width:"1066",height:"766"})),(0,l.kt)("p",null,"Kubeflow\uc5d0\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc704\uc758 ",(0,l.kt)("inlineCode",{parentName:"p"},"train_svc_from_csv"),"\uc640 \uac19\uc774 \ud568\uc218\uc758 \ud615\ud0dc\ub85c \uc815\uc758\ud569\ub2c8\ub2e4.\n\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \ucf58\ud150\uce20\ub97c \uac10\uc2f8\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-4.png",src:n(4175).Z,width:"464",height:"826"})),(0,l.kt)("h3",{id:"artifacts"},"Artifacts"),(0,l.kt)("p",null,"\uc704\uc758 \uc124\uba85\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc544\ud2f0\ud329\ud2b8(Artifacts)\ub97c \uc0dd\uc131\ud55c\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \uc544\ud2f0\ud329\ud2b8\ub780 evaluation result, log \ub4f1 \uc5b4\ub5a4 \ud615\ud0dc\ub85c\ub4e0 \ud30c\uc77c\ub85c \uc0dd\uc131\ub418\ub294 \uac83\uc744 \ud1b5\ud2c0\uc5b4\uc11c \uce6d\ud558\ub294 \uc6a9\uc5b4\uc785\ub2c8\ub2e4.\n\uadf8\uc911 \uc6b0\ub9ac\uac00 \uad00\uc2ec\uc744 \ub450\ub294 \uc720\uc758\ubbf8\ud55c \uac83\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-5.png",src:n(7436).Z,width:"1700",height:"454"})),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Model"),(0,l.kt)("li",{parentName:"ul"},"Data"),(0,l.kt)("li",{parentName:"ul"},"Metric"),(0,l.kt)("li",{parentName:"ul"},"etc")),(0,l.kt)("h4",{id:"model"},"Model"),(0,l.kt)("p",null,"\uc800\ud76c\ub294 \ubaa8\ub378\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758 \ud588\uc2b5\ub2c8\ub2e4."),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"\ubaa8\ub378\uc774\ub780 \ud30c\uc774\uc36c \ucf54\ub4dc\uc640 \ud559\uc2b5\ub41c Weights\uc640 Network \uad6c\uc870 \uadf8\ub9ac\uace0 \uc774\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud55c \ud658\uacbd\uc774 \ubaa8\ub450 \ud3ec\ud568\ub41c \ud615\ud0dc")),(0,l.kt)("h4",{id:"data"},"Data"),(0,l.kt)("p",null,"\ub370\uc774\ud130\ub294 \uc804 \ucc98\ub9ac\ub41c \ud53c\ucc98, \ubaa8\ub378\uc758 \uc608\uce21 \uac12 \ub4f1\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4."),(0,l.kt)("h4",{id:"metric"},"Metric"),(0,l.kt)("p",null,"Metric\uc740 \ub3d9\uc801 \uc9c0\ud45c\uc640 \uc815\uc801 \uc9c0\ud45c \ub450 \uac00\uc9c0\ub85c \ub098\ub204\uc5c8\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\ub3d9\uc801 \uc9c0\ud45c\ub780 train loss\uc640 \uac19\uc774 \ud559\uc2b5\uc774 \uc9c4\ud589\ub418\ub294 \uc911 \uc5d0\ud3ed(Epoch)\ub9c8\ub2e4 \uacc4\uc18d\ud574\uc11c \ubcc0\ud654\ud558\ub294 \uac12\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},"\uc815\uc801 \uc9c0\ud45c\ub780 \ud559\uc2b5\uc774 \ub05d\ub09c \ud6c4 \ucd5c\uc885\uc801\uc73c\ub85c \ubaa8\ub378\uc744 \ud3c9\uac00\ud558\ub294 \uc815\ud655\ub3c4 \ub4f1\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.")),(0,l.kt)("h2",{id:"pipeline"},"Pipeline"),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc740 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uacfc \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc21c\uc11c\ub3c4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub54c, \uc21c\uc11c\ub3c4\ub294 \ubc29\ud5a5 \uc21c\ud658\uc774 \uc5c6\ub294 \uadf8\ub798\ud504\ub85c \uc774\ub8e8\uc5b4\uc838 \uc788\uc73c\uba70, \uac04\ub2e8\ud55c \uc870\uac74\ubb38\uc744 \ud3ec\ud568\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-6.png",src:n(9429).Z,width:"1696",height:"746"})),(0,l.kt)("h3",{id:"pipeline-config"},"Pipeline Config"),(0,l.kt)("p",null,"\uc55e\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574\uc11c\ub294 Config\uac00 \ud544\uc694\ud558\ub2e4\uace0 \uc124\uba85\ud588\uc2b5\ub2c8\ub2e4. \ud30c\uc774\ud504\ub77c\uc778\uc744 \uad6c\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc758 Config \ub4e4\uc744 \ubaa8\uc544 \ub454 \uac83\uc774 \ud30c\uc774\ud504\ub77c\uc778 Config\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-7.png",src:n(4607).Z,width:"1810",height:"432"})),(0,l.kt)("h2",{id:"run"},"Run"),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc774 \ud544\uc694\ub85c \ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778 Config\uac00 \uc8fc\uc5b4\uc838\uc57c\uc9c0\ub9cc \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Kubeflow\uc5d0\uc11c\ub294 \uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\uc744 Run \uc774\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-8.png",src:n(6818).Z,width:"1810",height:"576"})),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc774 \uc2e4\ud589\ub418\uba74 \uac01 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc544\ud2f0\ud329\ud2b8\ub4e4\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\nKubeflow pipeline\uc5d0\uc11c\ub294 Run \ud558\ub098\ub2f9 \uace0\uc720\ud55c ID \ub97c \uc0dd\uc131\ud558\uace0, Run\uc5d0\uc11c \uc0dd\uc131\ub418\ub294 \ubaa8\ub4e0 \uc544\ud2f0\ud329\ud2b8\ub4e4\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-9.png",src:n(7446).Z,width:"1810",height:"592"})),(0,l.kt)("p",null,"\uadf8\ub7ec\uba74 \uc774\uc81c \uc9c1\uc811 \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},3396:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-0-c3636a3fe20bb4a74d64d8565b4a51d9.png"},8482:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-1-887ac07d1b11b84ee3fc5d7b882ad4bc.png"},4582:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-2-00e4917a1ec11cff7fc7a3b00c75a9e9.png"},3204:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-3-0916d8982b42a638e986fd955f4b5fd0.png"},4175:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-4-3e6a8ee159e889b5e1bffc58dbb24b85.png"},7436:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-5-31eb60d97518af020d18d30e3b5c5d16.png"},9429:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-6-db0ab4d56f11dcad062bb89374f7ff5b.png"},4607:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-7-277a9b30da3a2fc3519d3453964c5d52.png"},6818:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-8-2350dff71d7f031b8cce3b73f8fd4381.png"},7446:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-9-f366186846ec1d019b742bf478928f80.png"}}]); \ No newline at end of file diff --git a/assets/js/b3824f13.ba719f69.js b/assets/js/b3824f13.ba719f69.js deleted file mode 100644 index 0d903208..00000000 --- a/assets/js/b3824f13.ba719f69.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[4818],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var o=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var p=o.createContext({}),c=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=c(e.components);return o.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,l=e.mdxType,r=e.originalType,p=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),u=c(n),f=l,m=u["".concat(p,".").concat(f)]||u[f]||d[f]||r;return n?o.createElement(m,i(i({ref:t},s),{},{components:n})):o.createElement(m,i({ref:t},s))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=n.length,i=new Array(r);i[0]=f;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[u]="string"==typeof e?e:l,i[1]=a;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var o=n(7462),l=(n(7294),n(3905));const r={title:"2. Kubeflow Concepts",description:"",sidebar_position:2,contributors:["Jongseob Jeon"]},i=void 0,a={unversionedId:"kubeflow/kubeflow-concepts",id:"kubeflow/kubeflow-concepts",title:"2. Kubeflow Concepts",description:"",source:"@site/docs/kubeflow/kubeflow-concepts.md",sourceDirName:"kubeflow",slug:"/kubeflow/kubeflow-concepts",permalink:"/docs/kubeflow/kubeflow-concepts",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/kubeflow-concepts.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Kubeflow Concepts",description:"",sidebar_position:2,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"1. Kubeflow Introduction",permalink:"/docs/kubeflow/kubeflow-intro"},next:{title:"3. Install Requirements",permalink:"/docs/kubeflow/basic-requirements"}},p={},c=[{value:"Component",id:"component",level:2},{value:"Component Contents",id:"component-contents",level:3},{value:"Component Wrapper",id:"component-wrapper",level:3},{value:"Artifacts",id:"artifacts",level:3},{value:"Model",id:"model",level:4},{value:"Data",id:"data",level:4},{value:"Metric",id:"metric",level:4},{value:"Pipeline",id:"pipeline",level:2},{value:"Pipeline Config",id:"pipeline-config",level:3},{value:"Run",id:"run",level:2}],s={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,l.kt)(u,(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"component"},"Component"),(0,l.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8(Component)\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20(Component contents)\uc640 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c(Component wrapper)\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.\n\ud558\ub098\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \ud1b5\ud574 kubeflow\uc5d0 \uc804\ub2ec\ub418\uba70 \uc804\ub2ec\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc815\uc758\ub41c \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uc2e4\ud589(execute)\ud558\uace0 \uc544\ud2f0\ud329\ud2b8(artifacts)\ub4e4\uc744 \uc0dd\uc0b0\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-0.png",src:n(3396).Z,width:"1392",height:"704"})),(0,l.kt)("h3",{id:"component-contents"},"Component Contents"),(0,l.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub97c \uad6c\uc131\ud558\ub294 \uac83\uc740 \ucd1d 3\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-1.png",src:n(8482).Z,width:"574",height:"436"})),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Environemnt"),(0,l.kt)("li",{parentName:"ol"},"Python code w\\ Config"),(0,l.kt)("li",{parentName:"ol"},"Generates Artifacts")),(0,l.kt)("p",null,"\uc608\uc2dc\uc640 \ud568\uaed8 \uac01 \uad6c\uc131 \uc694\uc18c\uac00 \uc5b4\ub5a4 \uac83\uc778\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\ub2e4\uc74c\uacfc \uac19\uc774 \ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc640 SVC(Support Vector Classifier)\ub97c \ud559\uc2b5\ud55c \ud6c4 SVC \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc744 \uc801\uc740 \ud30c\uc774\uc36c \ucf54\ub4dc\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},'import dill\nimport pandas as pd\n\nfrom sklearn.svm import SVC\n\ntrain_data = pd.read_csv(train_data_path)\ntrain_target= pd.read_csv(train_target_path)\n\nclf= SVC(\n kernel=kernel\n)\nclf.fit(train_data)\n\nwith open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n')),(0,l.kt)("p",null,"\uc704\uc758 \ud30c\uc774\uc36c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\ub85c \ub098\ub20c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-2.png",src:n(4582).Z,width:"832",height:"410"})),(0,l.kt)("p",null,"Environment\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0\ub4e4\uc744 import\ud558\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc74c\uc73c\ub85c Python Code w\\ Config \uc5d0\uc11c\ub294 \uc8fc\uc5b4\uc9c4 Config\ub97c \uc774\uc6a9\ud574 \uc2e4\uc81c\ub85c \ud559\uc2b5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc544\ud2f0\ud329\ud2b8\ub97c \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"component-wrapper"},"Component Wrapper"),(0,l.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ucf58\ud150\uce20\uc5d0 \ud544\uc694\ud55c Config\ub97c \uc804\ub2ec\ud558\uace0 \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc791\uc5c5\uc744 \ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-3.png",src:n(3204).Z,width:"1066",height:"766"})),(0,l.kt)("p",null,"Kubeflow\uc5d0\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\ub97c \uc704\uc758 ",(0,l.kt)("inlineCode",{parentName:"p"},"train_svc_from_csv"),"\uc640 \uac19\uc774 \ud568\uc218\uc758 \ud615\ud0dc\ub85c \uc815\uc758\ud569\ub2c8\ub2e4.\n\ucef4\ud3ec\ub10c\ud2b8 \ub798\ud37c\uac00 \ucf58\ud150\uce20\ub97c \uac10\uc2f8\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-4.png",src:n(4175).Z,width:"464",height:"826"})),(0,l.kt)("h3",{id:"artifacts"},"Artifacts"),(0,l.kt)("p",null,"\uc704\uc758 \uc124\uba85\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc544\ud2f0\ud329\ud2b8(Artifacts)\ub97c \uc0dd\uc131\ud55c\ub2e4\uace0 \ud588\uc2b5\ub2c8\ub2e4. \uc544\ud2f0\ud329\ud2b8\ub780 evaluation result, log \ub4f1 \uc5b4\ub5a4 \ud615\ud0dc\ub85c\ub4e0 \ud30c\uc77c\ub85c \uc0dd\uc131\ub418\ub294 \uac83\uc744 \ud1b5\ud2c0\uc5b4\uc11c \uce6d\ud558\ub294 \uc6a9\uc5b4\uc785\ub2c8\ub2e4.\n\uadf8\uc911 \uc6b0\ub9ac\uac00 \uad00\uc2ec\uc744 \ub450\ub294 \uc720\uc758\ubbf8\ud55c \uac83\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-5.png",src:n(7436).Z,width:"1700",height:"454"})),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Model"),(0,l.kt)("li",{parentName:"ul"},"Data"),(0,l.kt)("li",{parentName:"ul"},"Metric"),(0,l.kt)("li",{parentName:"ul"},"etc")),(0,l.kt)("h4",{id:"model"},"Model"),(0,l.kt)("p",null,"\uc800\ud76c\ub294 \ubaa8\ub378\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758 \ud588\uc2b5\ub2c8\ub2e4."),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"\ubaa8\ub378\uc774\ub780 \ud30c\uc774\uc36c \ucf54\ub4dc\uc640 \ud559\uc2b5\ub41c Weights\uc640 Network \uad6c\uc870 \uadf8\ub9ac\uace0 \uc774\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud55c \ud658\uacbd\uc774 \ubaa8\ub450 \ud3ec\ud568\ub41c \ud615\ud0dc")),(0,l.kt)("h4",{id:"data"},"Data"),(0,l.kt)("p",null,"\ub370\uc774\ud130\ub294 \uc804 \ucc98\ub9ac\ub41c \ud53c\ucc98, \ubaa8\ub378\uc758 \uc608\uce21 \uac12 \ub4f1\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4."),(0,l.kt)("h4",{id:"metric"},"Metric"),(0,l.kt)("p",null,"Metric\uc740 \ub3d9\uc801 \uc9c0\ud45c\uc640 \uc815\uc801 \uc9c0\ud45c \ub450 \uac00\uc9c0\ub85c \ub098\ub204\uc5c8\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\ub3d9\uc801 \uc9c0\ud45c\ub780 train loss\uc640 \uac19\uc774 \ud559\uc2b5\uc774 \uc9c4\ud589\ub418\ub294 \uc911 \uc5d0\ud3ed(Epoch)\ub9c8\ub2e4 \uacc4\uc18d\ud574\uc11c \ubcc0\ud654\ud558\ub294 \uac12\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},"\uc815\uc801 \uc9c0\ud45c\ub780 \ud559\uc2b5\uc774 \ub05d\ub09c \ud6c4 \ucd5c\uc885\uc801\uc73c\ub85c \ubaa8\ub378\uc744 \ud3c9\uac00\ud558\ub294 \uc815\ud655\ub3c4 \ub4f1\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.")),(0,l.kt)("h2",{id:"pipeline"},"Pipeline"),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc740 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uacfc \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc21c\uc11c\ub3c4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub54c, \uc21c\uc11c\ub3c4\ub294 \ubc29\ud5a5 \uc21c\ud658\uc774 \uc5c6\ub294 \uadf8\ub798\ud504\ub85c \uc774\ub8e8\uc5b4\uc838 \uc788\uc73c\uba70, \uac04\ub2e8\ud55c \uc870\uac74\ubb38\uc744 \ud3ec\ud568\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-6.png",src:n(9429).Z,width:"1696",height:"746"})),(0,l.kt)("h3",{id:"pipeline-config"},"Pipeline Config"),(0,l.kt)("p",null,"\uc55e\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\uc2dc\ud0a4\uae30 \uc704\ud574\uc11c\ub294 Config\uac00 \ud544\uc694\ud558\ub2e4\uace0 \uc124\uba85\ud588\uc2b5\ub2c8\ub2e4. \ud30c\uc774\ud504\ub77c\uc778\uc744 \uad6c\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc758 Config \ub4e4\uc744 \ubaa8\uc544 \ub454 \uac83\uc774 \ud30c\uc774\ud504\ub77c\uc778 Config\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-7.png",src:n(4607).Z,width:"1810",height:"432"})),(0,l.kt)("h2",{id:"run"},"Run"),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc774 \ud544\uc694\ub85c \ud558\ub294 \ud30c\uc774\ud504\ub77c\uc778 Config\uac00 \uc8fc\uc5b4\uc838\uc57c\uc9c0\ub9cc \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Kubeflow\uc5d0\uc11c\ub294 \uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\uc744 Run \uc774\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-8.png",src:n(6818).Z,width:"1810",height:"576"})),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc774 \uc2e4\ud589\ub418\uba74 \uac01 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc544\ud2f0\ud329\ud2b8\ub4e4\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\nKubeflow pipeline\uc5d0\uc11c\ub294 Run \ud558\ub098\ub2f9 \uace0\uc720\ud55c ID \ub97c \uc0dd\uc131\ud558\uace0, Run\uc5d0\uc11c \uc0dd\uc131\ub418\ub294 \ubaa8\ub4e0 \uc544\ud2f0\ud329\ud2b8\ub4e4\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"concept-9.png",src:n(7446).Z,width:"1810",height:"592"})),(0,l.kt)("p",null,"\uadf8\ub7ec\uba74 \uc774\uc81c \uc9c1\uc811 \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},3396:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-0-c3636a3fe20bb4a74d64d8565b4a51d9.png"},8482:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-1-887ac07d1b11b84ee3fc5d7b882ad4bc.png"},4582:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-2-00e4917a1ec11cff7fc7a3b00c75a9e9.png"},3204:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-3-0916d8982b42a638e986fd955f4b5fd0.png"},4175:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-4-3e6a8ee159e889b5e1bffc58dbb24b85.png"},7436:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-5-31eb60d97518af020d18d30e3b5c5d16.png"},9429:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-6-db0ab4d56f11dcad062bb89374f7ff5b.png"},4607:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-7-277a9b30da3a2fc3519d3453964c5d52.png"},6818:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-8-2350dff71d7f031b8cce3b73f8fd4381.png"},7446:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/concept-9-f366186846ec1d019b742bf478928f80.png"}}]); \ No newline at end of file diff --git a/assets/js/8c6322ce.4f1786b5.js b/assets/js/b91e83a7.1449d67f.js similarity index 65% rename from assets/js/8c6322ce.4f1786b5.js rename to assets/js/b91e83a7.1449d67f.js index c344b3ab..dc9af74a 100644 --- a/assets/js/8c6322ce.4f1786b5.js +++ b/assets/js/b91e83a7.1449d67f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5604],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>g});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function p(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function o(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var l=a.createContext({}),d=function(t){var e=a.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},s=function(t){var e=d(t.components);return a.createElement(l.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,p=t.originalType,l=t.parentName,s=i(t,["components","mdxType","originalType","parentName"]),u=d(n),m=r,g=u["".concat(l,".").concat(m)]||u[m]||c[m]||p;return n?a.createElement(g,o(o({ref:e},s),{},{components:n})):a.createElement(g,o({ref:e},s))}));function g(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var p=n.length,o=new Array(p);o[0]=m;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[u]="string"==typeof t?t:r,o[1]=i;for(var d=2;d{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>p,metadata:()=>i,toc:()=>d});var a=n(7462),r=(n(7294),n(3905));const p={title:"13. Component - Debugging",description:"",sidebar_position:13,contributors:["Jongseob Jeon"]},o=void 0,i={unversionedId:"kubeflow/how-to-debug",id:"kubeflow/how-to-debug",title:"13. Component - Debugging",description:"",source:"@site/docs/kubeflow/how-to-debug.md",sourceDirName:"kubeflow",slug:"/kubeflow/how-to-debug",permalink:"/docs/kubeflow/how-to-debug",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/how-to-debug.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:13,frontMatter:{title:"13. Component - Debugging",description:"",sidebar_position:13,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"12. Component - MLFlow",permalink:"/docs/kubeflow/advanced-mlflow"},next:{title:"1. What is API Deployment?",permalink:"/docs/api-deployment/what-is-api-deployment"}},l={},d=[{value:"Debugging Pipeline",id:"debugging-pipeline",level:2},{value:"Failed Component",id:"failed-component",level:2}],s={toc:d},u="wrapper";function c(t){let{components:e,...p}=t;return(0,r.kt)(u,(0,a.Z)({},s,p,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"debugging-pipeline"},"Debugging Pipeline"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 Kubeflow \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub514\ubc84\uae45\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubd05\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"failed-component"},"Failed Component"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-mlflow#mlflow-pipeline"},"Component - MLFlow")," \uc5d0\uc11c \uc774\uc6a9\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc870\uae08 \uc218\uc815\ud574\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud328\ud558\ub3c4\ub85d \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubcc0\uacbd\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n \n data["sepal length (cm)"] = None\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas"],\n)\ndef drop_na_from_csv(\n data_path: InputPath("csv"),\n output_path: OutputPath("csv"),\n):\n import pandas as pd\n\n data = pd.read_csv(data_path)\n data = data.dropna()\n data.to_csv(output_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n\n@pipeline(name="debugging_pipeline")\ndef debugging_pipeline(kernel: str):\n iris_data = load_iris_data()\n drop_data = drop_na_from_csv(data=iris_data.outputs["data"])\n model = train_from_csv(\n train_data=drop_data.outputs["output"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(debugging_pipeline, "debugging_pipeline.yaml")\n\n')),(0,r.kt)("p",null,"\uc218\uc815\ud55c \uc810\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc624\ub294 ",(0,r.kt)("inlineCode",{parentName:"li"},"load_iris_data")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"li"},"sepal length (cm)")," \ud53c\ucc98\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"li"},"None")," \uac12\uc744 \uc8fc\uc785"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"drop_na_from_csv")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"li"},"drop_na()")," \ud568\uc218\ub97c \uc774\uc6a9\ud574 na \uac12\uc774 \ud3ec\ud568\ub41c ",(0,r.kt)("inlineCode",{parentName:"li"},"row"),"\ub97c \uc81c\uac70")),(0,r.kt)("p",null,"\uc774\uc81c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud558\uace0 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc2e4\ud589 \ud6c4 Run\uc744 \ub20c\ub7ec\uc11c \ud655\uc778\ud574\ubcf4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"Train from csv")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc2e4\ud328\ud588\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-0.png",src:n(9789).Z,width:"2826",height:"1790"})),(0,r.kt)("p",null,"\uc2e4\ud328\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud074\ub9ad\ud558\uace0 \ub85c\uadf8\ub97c \ud655\uc778\ud574\uc11c \uc2e4\ud328\ud55c \uc774\uc720\ub97c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-2.png",src:n(5904).Z,width:"2826",height:"1796"})),(0,r.kt)("p",null,"\ub85c\uadf8\ub97c \ud655\uc778\ud558\uba74 \ub370\uc774\ud130\uc758 \uac1c\uc218\uac00 0\uc774\uc5ec\uc11c \uc2e4\ud589\ub418\uc9c0 \uc54a\uc558\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ubd84\uba85 \uc815\uc0c1\uc801\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc804\ub2ec\ud588\ub294\ub370 \uc65c \ub370\uc774\ud130\uc758 \uac1c\uc218\uac00 0\uac1c\uc77c\uae4c\uc694? "),(0,r.kt)("p",null,"\uc774\uc81c \uc785\ub825\ubc1b\uc740 \ub370\uc774\ud130\uc5d0 \uc5b4\ub5a4 \ubb38\uc81c\uac00 \uc788\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud074\ub9ad\ud558\uace0 Input/Ouput \ud0ed\uc5d0\uc11c \uc785\ub825\uac12\uc73c\ub85c \ub4e4\uc5b4\uac04 \ub370\uc774\ud130\ub4e4\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc6b4\ub85c\ub4dc\ub294 \ube68\uac04\uc0c9 \ub124\ubaa8\ub85c \ud45c\uc2dc\ub41c \uacf3\uc758 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-5.png",src:n(5801).Z,width:"2690",height:"1740"})),(0,r.kt)("p",null,"\ub450 \uac1c\uc758 \ud30c\uc77c\uc744 \uac19\uc740 \uacbd\ub85c\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub9ac\uace0 \ud574\ub2f9 \uacbd\ub85c\ub85c \uc774\ub3d9\ud574\uc11c \ud30c\uc77c\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ub450 \uac1c\uc758 \ud30c\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"drop-na-from-csv-output.tgz load-iris-data-target.tgz\n")),(0,r.kt)("p",null,"\uc555\ucd95\uc744 \ud480\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -xzvf load-iris-data-target.tgz ; mv data target.csv\ntar -xzvf drop-na-from-csv-output.tgz ; mv data data.csv\n")),(0,r.kt)("p",null,"\uadf8\ub9ac\uace0 \uc774\ub97c \uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc744 \uc774\uc6a9\ud574 \ucef4\ud3ec\ub10c\ud2b8 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-3.png",src:n(8693).Z,width:"2434",height:"1690"})),(0,r.kt)("p",null,"\ub514\ubc84\uae45\uc744 \ud574\ubcf8 \uacb0\uacfc dropna \ud560 \ub54c column\uc744 \uae30\uc900\uc73c\ub85c drop\uc744 \ud574\uc57c \ud558\ub294\ub370 row\ub97c \uae30\uc900\uc73c\ub85c drop\uc744 \ud574\uc11c \ub370\uc774\ud130\uac00 \ubaa8\ub450 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4.\n\uc774\uc81c \ubb38\uc81c\uc758 \uc6d0\uc778\uc744 \uc54c\uc544\ub0c8\uc73c\ub2c8 column\uc744 \uae30\uc900\uc73c\ub85c drop\uc774 \ub418\uac8c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'@partial(\n create_component_from_func,\n packages_to_install=["pandas"],\n)\ndef drop_na_from_csv(\n data_path: InputPath("csv"),\n output_path: OutputPath("csv"),\n):\n import pandas as pd\n\n data = pd.read_csv(data_path)\n data = data.dropna(axis="columns")\n data.to_csv(output_path, index=False)\n')),(0,r.kt)("p",null,"\uc218\uc815 \ud6c4 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub2e4\uc2dc \uc5c5\ub85c\ub4dc\ud558\uace0 \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-6.png",src:n(6157).Z,width:"2694",height:"1748"})))}c.isMDXComponent=!0},9789:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-0-9ab1af1c9020a9dfc907d8d36dadac71.png"},5904:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-2-50081530b33b57206f6ef497212cf2a9.png"},8693:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-3-4fda7b9b4f2c366147cd6aeb124cc9c5.png"},5801:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-5-5b7edcc1e29c85f71b279af3f54f3f69.png"},6157:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-6-e2da46f9318827a339b04097e68f635a.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[560],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>_});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function p(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var l=a.createContext({}),d=function(t){var e=a.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):p(p({},e),t)),n},s=function(t){var e=d(t.components);return a.createElement(l.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,s=i(t,["components","mdxType","originalType","parentName"]),u=d(n),m=r,_=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return n?a.createElement(_,p(p({ref:e},s),{},{components:n})):a.createElement(_,p({ref:e},s))}));function _(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=n.length,p=new Array(o);p[0]=m;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[u]="string"==typeof t?t:r,p[1]=i;for(var d=2;d{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=n(7462),r=(n(7294),n(3905));const o={title:"13. Component - Debugging",description:"",sidebar_position:13,contributors:["Jongseob Jeon"]},p=void 0,i={unversionedId:"kubeflow/how-to-debug",id:"version-1.0/kubeflow/how-to-debug",title:"13. Component - Debugging",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/how-to-debug.md",sourceDirName:"kubeflow",slug:"/kubeflow/how-to-debug",permalink:"/docs/1.0/kubeflow/how-to-debug",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/how-to-debug.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:13,frontMatter:{title:"13. Component - Debugging",description:"",sidebar_position:13,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"12. Component - MLFlow",permalink:"/docs/1.0/kubeflow/advanced-mlflow"},next:{title:"1. What is API Deployment?",permalink:"/docs/1.0/api-deployment/what-is-api-deployment"}},l={},d=[{value:"Debugging Pipeline",id:"debugging-pipeline",level:2},{value:"Failed Component",id:"failed-component",level:2}],s={toc:d},u="wrapper";function c(t){let{components:e,...o}=t;return(0,r.kt)(u,(0,a.Z)({},s,o,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"debugging-pipeline"},"Debugging Pipeline"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 Kubeflow \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub514\ubc84\uae45\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubd05\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"failed-component"},"Failed Component"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-mlflow#mlflow-pipeline"},"Component - MLFlow")," \uc5d0\uc11c \uc774\uc6a9\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc870\uae08 \uc218\uc815\ud574\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud328\ud558\ub3c4\ub85d \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubcc0\uacbd\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n \n data["sepal length (cm)"] = None\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas"],\n)\ndef drop_na_from_csv(\n data_path: InputPath("csv"),\n output_path: OutputPath("csv"),\n):\n import pandas as pd\n\n data = pd.read_csv(data_path)\n data = data.dropna()\n data.to_csv(output_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n\n@pipeline(name="debugging_pipeline")\ndef debugging_pipeline(kernel: str):\n iris_data = load_iris_data()\n drop_data = drop_na_from_csv(data=iris_data.outputs["data"])\n model = train_from_csv(\n train_data=drop_data.outputs["output"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(debugging_pipeline, "debugging_pipeline.yaml")\n\n')),(0,r.kt)("p",null,"\uc218\uc815\ud55c \uc810\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc624\ub294 ",(0,r.kt)("inlineCode",{parentName:"li"},"load_iris_data")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"li"},"sepal length (cm)")," \ud53c\ucc98\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"li"},"None")," \uac12\uc744 \uc8fc\uc785"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"drop_na_from_csv")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"li"},"drop_na()")," \ud568\uc218\ub97c \uc774\uc6a9\ud574 na \uac12\uc774 \ud3ec\ud568\ub41c ",(0,r.kt)("inlineCode",{parentName:"li"},"row"),"\ub97c \uc81c\uac70")),(0,r.kt)("p",null,"\uc774\uc81c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud558\uace0 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc2e4\ud589 \ud6c4 Run\uc744 \ub20c\ub7ec\uc11c \ud655\uc778\ud574\ubcf4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"Train from csv")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc2e4\ud328\ud588\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-0.png",src:n(4159).Z,width:"2826",height:"1790"})),(0,r.kt)("p",null,"\uc2e4\ud328\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud074\ub9ad\ud558\uace0 \ub85c\uadf8\ub97c \ud655\uc778\ud574\uc11c \uc2e4\ud328\ud55c \uc774\uc720\ub97c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-2.png",src:n(5419).Z,width:"2826",height:"1796"})),(0,r.kt)("p",null,"\ub85c\uadf8\ub97c \ud655\uc778\ud558\uba74 \ub370\uc774\ud130\uc758 \uac1c\uc218\uac00 0\uc774\uc5ec\uc11c \uc2e4\ud589\ub418\uc9c0 \uc54a\uc558\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ubd84\uba85 \uc815\uc0c1\uc801\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc804\ub2ec\ud588\ub294\ub370 \uc65c \ub370\uc774\ud130\uc758 \uac1c\uc218\uac00 0\uac1c\uc77c\uae4c\uc694? "),(0,r.kt)("p",null,"\uc774\uc81c \uc785\ub825\ubc1b\uc740 \ub370\uc774\ud130\uc5d0 \uc5b4\ub5a4 \ubb38\uc81c\uac00 \uc788\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud074\ub9ad\ud558\uace0 Input/Ouput \ud0ed\uc5d0\uc11c \uc785\ub825\uac12\uc73c\ub85c \ub4e4\uc5b4\uac04 \ub370\uc774\ud130\ub4e4\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc6b4\ub85c\ub4dc\ub294 \ube68\uac04\uc0c9 \ub124\ubaa8\ub85c \ud45c\uc2dc\ub41c \uacf3\uc758 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-5.png",src:n(2286).Z,width:"2690",height:"1740"})),(0,r.kt)("p",null,"\ub450 \uac1c\uc758 \ud30c\uc77c\uc744 \uac19\uc740 \uacbd\ub85c\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub9ac\uace0 \ud574\ub2f9 \uacbd\ub85c\ub85c \uc774\ub3d9\ud574\uc11c \ud30c\uc77c\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ub450 \uac1c\uc758 \ud30c\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"drop-na-from-csv-output.tgz load-iris-data-target.tgz\n")),(0,r.kt)("p",null,"\uc555\ucd95\uc744 \ud480\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -xzvf load-iris-data-target.tgz ; mv data target.csv\ntar -xzvf drop-na-from-csv-output.tgz ; mv data data.csv\n")),(0,r.kt)("p",null,"\uadf8\ub9ac\uace0 \uc774\ub97c \uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc744 \uc774\uc6a9\ud574 \ucef4\ud3ec\ub10c\ud2b8 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-3.png",src:n(4180).Z,width:"2434",height:"1690"})),(0,r.kt)("p",null,"\ub514\ubc84\uae45\uc744 \ud574\ubcf8 \uacb0\uacfc dropna \ud560 \ub54c column\uc744 \uae30\uc900\uc73c\ub85c drop\uc744 \ud574\uc57c \ud558\ub294\ub370 row\ub97c \uae30\uc900\uc73c\ub85c drop\uc744 \ud574\uc11c \ub370\uc774\ud130\uac00 \ubaa8\ub450 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4.\n\uc774\uc81c \ubb38\uc81c\uc758 \uc6d0\uc778\uc744 \uc54c\uc544\ub0c8\uc73c\ub2c8 column\uc744 \uae30\uc900\uc73c\ub85c drop\uc774 \ub418\uac8c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'@partial(\n create_component_from_func,\n packages_to_install=["pandas"],\n)\ndef drop_na_from_csv(\n data_path: InputPath("csv"),\n output_path: OutputPath("csv"),\n):\n import pandas as pd\n\n data = pd.read_csv(data_path)\n data = data.dropna(axis="columns")\n data.to_csv(output_path, index=False)\n')),(0,r.kt)("p",null,"\uc218\uc815 \ud6c4 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub2e4\uc2dc \uc5c5\ub85c\ub4dc\ud558\uace0 \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-6.png",src:n(6047).Z,width:"2694",height:"1748"})))}c.isMDXComponent=!0},4159:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-0-9ab1af1c9020a9dfc907d8d36dadac71.png"},5419:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-2-50081530b33b57206f6ef497212cf2a9.png"},4180:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-3-4fda7b9b4f2c366147cd6aeb124cc9c5.png"},2286:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-5-5b7edcc1e29c85f71b279af3f54f3f69.png"},6047:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-6-e2da46f9318827a339b04097e68f635a.png"}}]); \ No newline at end of file diff --git a/assets/js/b91e83a7.96ae9e3c.js b/assets/js/b91e83a7.96ae9e3c.js deleted file mode 100644 index ceb9e6c4..00000000 --- a/assets/js/b91e83a7.96ae9e3c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[560],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>_});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function p(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var l=a.createContext({}),d=function(t){var e=a.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):p(p({},e),t)),n},s=function(t){var e=d(t.components);return a.createElement(l.Provider,{value:e},t.children)},u="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,o=t.originalType,l=t.parentName,s=i(t,["components","mdxType","originalType","parentName"]),u=d(n),m=r,_=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return n?a.createElement(_,p(p({ref:e},s),{},{components:n})):a.createElement(_,p({ref:e},s))}));function _(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var o=n.length,p=new Array(o);p[0]=m;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i[u]="string"==typeof t?t:r,p[1]=i;for(var d=2;d{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=n(7462),r=(n(7294),n(3905));const o={title:"13. Component - Debugging",description:"",sidebar_position:13,contributors:["Jongseob Jeon"]},p=void 0,i={unversionedId:"kubeflow/how-to-debug",id:"version-1.0/kubeflow/how-to-debug",title:"13. Component - Debugging",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/how-to-debug.md",sourceDirName:"kubeflow",slug:"/kubeflow/how-to-debug",permalink:"/docs/1.0/kubeflow/how-to-debug",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/how-to-debug.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:13,frontMatter:{title:"13. Component - Debugging",description:"",sidebar_position:13,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"12. Component - MLFlow",permalink:"/docs/1.0/kubeflow/advanced-mlflow"},next:{title:"1. What is API Deployment?",permalink:"/docs/1.0/api-deployment/what-is-api-deployment"}},l={},d=[{value:"Debugging Pipeline",id:"debugging-pipeline",level:2},{value:"Failed Component",id:"failed-component",level:2}],s={toc:d},u="wrapper";function c(t){let{components:e,...o}=t;return(0,r.kt)(u,(0,a.Z)({},s,o,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"debugging-pipeline"},"Debugging Pipeline"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 Kubeflow \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub514\ubc84\uae45\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubd05\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"failed-component"},"Failed Component"),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-mlflow#mlflow-pipeline"},"Component - MLFlow")," \uc5d0\uc11c \uc774\uc6a9\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc870\uae08 \uc218\uc815\ud574\uc11c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud328\ud558\ub3c4\ub85d \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubcc0\uacbd\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n \n data["sepal length (cm)"] = None\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas"],\n)\ndef drop_na_from_csv(\n data_path: InputPath("csv"),\n output_path: OutputPath("csv"),\n):\n import pandas as pd\n\n data = pd.read_csv(data_path)\n data = data.dropna()\n data.to_csv(output_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n\n@pipeline(name="debugging_pipeline")\ndef debugging_pipeline(kernel: str):\n iris_data = load_iris_data()\n drop_data = drop_na_from_csv(data=iris_data.outputs["data"])\n model = train_from_csv(\n train_data=drop_data.outputs["output"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(debugging_pipeline, "debugging_pipeline.yaml")\n\n')),(0,r.kt)("p",null,"\uc218\uc815\ud55c \uc810\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ub370\uc774\ud130\ub97c \ubd88\ub7ec\uc624\ub294 ",(0,r.kt)("inlineCode",{parentName:"li"},"load_iris_data")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"li"},"sepal length (cm)")," \ud53c\ucc98\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"li"},"None")," \uac12\uc744 \uc8fc\uc785"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"drop_na_from_csv")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"li"},"drop_na()")," \ud568\uc218\ub97c \uc774\uc6a9\ud574 na \uac12\uc774 \ud3ec\ud568\ub41c ",(0,r.kt)("inlineCode",{parentName:"li"},"row"),"\ub97c \uc81c\uac70")),(0,r.kt)("p",null,"\uc774\uc81c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud558\uace0 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc2e4\ud589 \ud6c4 Run\uc744 \ub20c\ub7ec\uc11c \ud655\uc778\ud574\ubcf4\uba74 ",(0,r.kt)("inlineCode",{parentName:"p"},"Train from csv")," \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc2e4\ud328\ud588\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-0.png",src:n(4159).Z,width:"2826",height:"1790"})),(0,r.kt)("p",null,"\uc2e4\ud328\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud074\ub9ad\ud558\uace0 \ub85c\uadf8\ub97c \ud655\uc778\ud574\uc11c \uc2e4\ud328\ud55c \uc774\uc720\ub97c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-2.png",src:n(5419).Z,width:"2826",height:"1796"})),(0,r.kt)("p",null,"\ub85c\uadf8\ub97c \ud655\uc778\ud558\uba74 \ub370\uc774\ud130\uc758 \uac1c\uc218\uac00 0\uc774\uc5ec\uc11c \uc2e4\ud589\ub418\uc9c0 \uc54a\uc558\ub2e4\uace0 \ub098\uc635\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ubd84\uba85 \uc815\uc0c1\uc801\uc73c\ub85c \ub370\uc774\ud130\ub97c \uc804\ub2ec\ud588\ub294\ub370 \uc65c \ub370\uc774\ud130\uc758 \uac1c\uc218\uac00 0\uac1c\uc77c\uae4c\uc694? "),(0,r.kt)("p",null,"\uc774\uc81c \uc785\ub825\ubc1b\uc740 \ub370\uc774\ud130\uc5d0 \uc5b4\ub5a4 \ubb38\uc81c\uac00 \uc788\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc6b0\uc120 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ud074\ub9ad\ud558\uace0 Input/Ouput \ud0ed\uc5d0\uc11c \uc785\ub825\uac12\uc73c\ub85c \ub4e4\uc5b4\uac04 \ub370\uc774\ud130\ub4e4\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\ub2e4\uc6b4\ub85c\ub4dc\ub294 \ube68\uac04\uc0c9 \ub124\ubaa8\ub85c \ud45c\uc2dc\ub41c \uacf3\uc758 \ub9c1\ud06c\ub97c \ud074\ub9ad\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-5.png",src:n(2286).Z,width:"2690",height:"1740"})),(0,r.kt)("p",null,"\ub450 \uac1c\uc758 \ud30c\uc77c\uc744 \uac19\uc740 \uacbd\ub85c\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uadf8\ub9ac\uace0 \ud574\ub2f9 \uacbd\ub85c\ub85c \uc774\ub3d9\ud574\uc11c \ud30c\uc77c\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ub450 \uac1c\uc758 \ud30c\uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"drop-na-from-csv-output.tgz load-iris-data-target.tgz\n")),(0,r.kt)("p",null,"\uc555\ucd95\uc744 \ud480\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"tar -xzvf load-iris-data-target.tgz ; mv data target.csv\ntar -xzvf drop-na-from-csv-output.tgz ; mv data data.csv\n")),(0,r.kt)("p",null,"\uadf8\ub9ac\uace0 \uc774\ub97c \uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc744 \uc774\uc6a9\ud574 \ucef4\ud3ec\ub10c\ud2b8 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-3.png",src:n(4180).Z,width:"2434",height:"1690"})),(0,r.kt)("p",null,"\ub514\ubc84\uae45\uc744 \ud574\ubcf8 \uacb0\uacfc dropna \ud560 \ub54c column\uc744 \uae30\uc900\uc73c\ub85c drop\uc744 \ud574\uc57c \ud558\ub294\ub370 row\ub97c \uae30\uc900\uc73c\ub85c drop\uc744 \ud574\uc11c \ub370\uc774\ud130\uac00 \ubaa8\ub450 \uc0ac\ub77c\uc84c\uc2b5\ub2c8\ub2e4.\n\uc774\uc81c \ubb38\uc81c\uc758 \uc6d0\uc778\uc744 \uc54c\uc544\ub0c8\uc73c\ub2c8 column\uc744 \uae30\uc900\uc73c\ub85c drop\uc774 \ub418\uac8c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'@partial(\n create_component_from_func,\n packages_to_install=["pandas"],\n)\ndef drop_na_from_csv(\n data_path: InputPath("csv"),\n output_path: OutputPath("csv"),\n):\n import pandas as pd\n\n data = pd.read_csv(data_path)\n data = data.dropna(axis="columns")\n data.to_csv(output_path, index=False)\n')),(0,r.kt)("p",null,"\uc218\uc815 \ud6c4 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub2e4\uc2dc \uc5c5\ub85c\ub4dc\ud558\uace0 \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"debug-6.png",src:n(6047).Z,width:"2694",height:"1748"})))}c.isMDXComponent=!0},4159:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-0-9ab1af1c9020a9dfc907d8d36dadac71.png"},5419:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-2-50081530b33b57206f6ef497212cf2a9.png"},4180:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-3-4fda7b9b4f2c366147cd6aeb124cc9c5.png"},2286:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-5-5b7edcc1e29c85f71b279af3f54f3f69.png"},6047:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/debug-6-e2da46f9318827a339b04097e68f635a.png"}}]); \ No newline at end of file diff --git a/assets/js/b93cd888.daf22ff4.js b/assets/js/b93cd888.daf22ff4.js deleted file mode 100644 index e5a26523..00000000 --- a/assets/js/b93cd888.daf22ff4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[797],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),k=r,d=c["".concat(i,".").concat(k)]||c[k]||m[k]||o;return a?n.createElement(d,l(l({ref:t},u),{},{components:a})):n.createElement(d,l({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=k;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:r,l[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={title:"3. Install Prerequisite",description:"Install docker",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2023-09-29T00:00:00.000Z"),contributors:["Jaeyeon Kim","Jongsun Shinn","Sangwoo Shim","Minwook Je"]},l=void 0,s={unversionedId:"setup-kubernetes/install-prerequisite",id:"setup-kubernetes/install-prerequisite",title:"3. Install Prerequisite",description:"Install docker",source:"@site/docs/setup-kubernetes/install-prerequisite.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/install-prerequisite",permalink:"/docs/setup-kubernetes/install-prerequisite",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-prerequisite.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Install Prerequisite",description:"Install docker",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2023-09-29T00:00:00.000Z",contributors:["Jaeyeon Kim","Jongsun Shinn","Sangwoo Shim","Minwook Je"]},sidebar:"tutorialSidebar",previous:{title:"2. Setup Kubernetes",permalink:"/docs/setup-kubernetes/kubernetes"},next:{title:"4.1. K3s",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s"}},i={},p=[{value:"Install apt packages",id:"install-apt-packages",level:2},{value:"Install Docker",id:"install-docker",level:2},{value:"Turn off Swap Memory",id:"turn-off-swap-memory",level:2},{value:"Install Kubectl",id:"install-kubectl",level:2},{value:"References",id:"references",level:2}],u={toc:p},c="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"\uc774 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc124\uce58\ud558\uae30\uc5d0 \uc55e\uc11c, ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc5d0 \uc124\uce58 \ud639\uc740 \uc124\uc815\ud574\ub450\uc5b4\uc57c \ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc5d0 \ub300\ud55c \ub9e4\ub274\uc5bc\uc744 \uc124\uba85\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"install-apt-packages"},"Install apt packages"),(0,r.kt)("p",null,"\ucd94\ud6c4 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \ud074\ub7ec\uc2a4\ud130\uc758 \uc6d0\ud65c\ud55c \ud1b5\uc2e0\uc744 \uc704\ud574\uc11c\ub294 Port-Forwarding\uc744 \uc218\ud589\ud574\uc57c \ud560 \uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4.\nPort-Forwarding\uc744 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc5d0 \ub2e4\uc74c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update\nsudo apt-get install -y socat\n")),(0,r.kt)("h2",{id:"install-docker"},"Install Docker"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4 \uc124\uce58\uc5d0 \ud544\uc694\ud55c APT \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4\uc758 \uacf5\uc2dd GPG key\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"apt \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc800\ub85c \ub3c4\ucee4\ub97c \uc124\uce58\ud560 \ub54c, stable Repository\uc5d0\uc11c \ubc1b\uc544\uc624\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'echo \\\n"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \\\n$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud604\uc7ac \uc124\uce58\ud560 \uc218 \uc788\ub294 \ub3c4\ucee4 \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update && apt-cache madison docker-ce\n")),(0,r.kt)("p",{parentName:"li"},"\ucd9c\ub825\ub418\ub294 \ubc84\uc804 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"5:20.10.11~3-0~ubuntu-focal")," \ubc84\uc804\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"apt-cache madison docker-ce | grep 5:20.10.11~3-0~ubuntu-focal\n")),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\uac00 \ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker-ce | 5:20.10.11~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"5:20.10.11~3-0~ubuntu-focal")," \ubc84\uc804\uc758 \ub3c4\ucee4\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install -y containerd.io docker-ce=5:20.10.11~3-0~ubuntu-focal docker-ce-cli=5:20.10.11~3-0~ubuntu-focal\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker run hello-world\n")),(0,r.kt)("p",{parentName:"li"},"\uba85\ub839\uc5b4 \uc2e4\ud589 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'mlops@ubuntu:~$ sudo docker run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n1. The Docker client contacted the Docker daemon.\n2. The Docker daemon pulled the "hello-world" image from the Docker Hub.\n (amd64)\n3. The Docker daemon created a new container from that image which runs the\n executable that produces the output you are currently reading.\n4. The Docker daemon streamed that output to the Docker client, which sent it\n to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n$ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\nhttps://hub.docker.com/\n\nFor more examples and ideas, visit:\nhttps://docs.docker.com/get-started/\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"docker \uad00\ub828 command\ub97c sudo \ud0a4\uc6cc\ub4dc \uc5c6\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud558\ub3c4\ub85d \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uad8c\ud55c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo groupadd docker\nsudo usermod -aG docker $USER\nnewgrp docker\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"sudo \ud0a4\uc6cc\ub4dc \uc5c6\uc774 docker command\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub41c \uac83\uc744 \ud655\uc778\ud558\uae30 \uc704\ud574, \ub2e4\uc2dc \ud55c\ubc88 docker run\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run hello-world\n")),(0,r.kt)("p",{parentName:"li"},"\uba85\ub839\uc5b4 \uc2e4\ud589 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uad8c\ud55c\uc774 \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'mlops@ubuntu:~$ docker run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n1. The Docker client contacted the Docker daemon.\n2. The Docker daemon pulled the "hello-world" image from the Docker Hub.\n (amd64)\n3. The Docker daemon created a new container from that image which runs the\n executable that produces the output you are currently reading.\n4. The Docker daemon streamed that output to the Docker client, which sent it\n to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n$ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\nhttps://hub.docker.com/\n\nFor more examples and ideas, visit:\nhttps://docs.docker.com/get-started/\n')))),(0,r.kt)("h2",{id:"turn-off-swap-memory"},"Turn off Swap Memory"),(0,r.kt)("p",null,"kubelet \uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uac8c \ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uc5d0\uc11c swap\uc774\ub77c\uace0 \ubd88\ub9ac\ub294 \uac00\uc0c1\uba54\ubaa8\ub9ac\ub97c \uaebc \ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 swap\uc744 \uaebc \ub461\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"(\ud074\ub7ec\uc2a4\ud130\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uac19\uc740 \ub370\uc2a4\ud06c\ud1b1\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ub54c swap \uba54\ubaa8\ub9ac\ub97c \uc885\ub8cc\ud558\uba74 \uc18d\ub3c4\uc758 \uc800\ud558\uac00 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4)")," "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab\nsudo swapoff -a\n")),(0,r.kt)("h2",{id:"install-kubectl"},"Install Kubectl"),(0,r.kt)("p",null,"kubectl \uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 API\ub97c \uc694\uccad\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8 \ud234\uc785\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub178\ub4dc\uc5d0 \uc124\uce58\ud574\ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 kubectl v1.21.7 \ubc84\uc804\uc744 \ub2e4\uc6b4\ubc1b\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/amd64/kubectl\n\n# Or if you use arm64\ncurl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/arm64/kubectl\n")))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"kubectl \uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud30c\uc77c\uc758 \uad8c\ud55c\uacfc \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl version --client\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.7", GitCommit:"1f86634ff08f37e54e8bfcd86bc90b61c98f84d4", GitTreeState:"clean", BuildDate:"2021-11-17T14:41:19Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc5ec\ub7ec \uac1c\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc5ec\ub7ec \uac1c\uc758 kubeconfig \ud30c\uc77c\uc744 \uad00\ub9ac\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc5ec\ub7ec \uac1c\uc758 kubeconfig \ud30c\uc77c \ud639\uc740 \uc5ec\ub7ec \uac1c\uc758 kube-context\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ucc38\uace0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://dev.to/aabiseverywhere/configuring-multiple-kubeconfig-on-your-machine-59eo"},"https://dev.to/aabiseverywhere/configuring-multiple-kubeconfig-on-your-machine-59eo")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/ahmetb/kubectx"},"https://github.com/ahmetb/kubectx"))))),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/ubuntu/"},"Install Docker Engine on Ubuntu")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/"},"\ub9ac\ub205\uc2a4\uc5d0 kubectl \uc124\uce58 \ubc0f \uc124\uc815"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b93cd888.e2f7150f.js b/assets/js/b93cd888.e2f7150f.js new file mode 100644 index 00000000..0fc1abf6 --- /dev/null +++ b/assets/js/b93cd888.e2f7150f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[797],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),k=r,d=c["".concat(i,".").concat(k)]||c[k]||m[k]||o;return a?n.createElement(d,l(l({ref:t},u),{},{components:a})):n.createElement(d,l({ref:t},u))}));function d(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=k;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:r,l[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={title:"3. Install Prerequisite",description:"Install docker",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2023-09-29T00:00:00.000Z"),contributors:["Jaeyeon Kim","Jongsun Shinn","Sangwoo Shim","Minwook Je"]},l=void 0,s={unversionedId:"setup-kubernetes/install-prerequisite",id:"setup-kubernetes/install-prerequisite",title:"3. Install Prerequisite",description:"Install docker",source:"@site/docs/setup-kubernetes/install-prerequisite.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/install-prerequisite",permalink:"/docs/setup-kubernetes/install-prerequisite",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-prerequisite.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Install Prerequisite",description:"Install docker",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2023-09-29T00:00:00.000Z",contributors:["Jaeyeon Kim","Jongsun Shinn","Sangwoo Shim","Minwook Je"]},sidebar:"tutorialSidebar",previous:{title:"2. Setup Kubernetes",permalink:"/docs/setup-kubernetes/kubernetes"},next:{title:"4.1. K3s",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s"}},i={},p=[{value:"Install apt packages",id:"install-apt-packages",level:2},{value:"Install Docker",id:"install-docker",level:2},{value:"Turn off Swap Memory",id:"turn-off-swap-memory",level:2},{value:"Install Kubectl",id:"install-kubectl",level:2},{value:"References",id:"references",level:2}],u={toc:p},c="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"\uc774 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc124\uce58\ud558\uae30\uc5d0 \uc55e\uc11c, ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc5d0 \uc124\uce58 \ud639\uc740 \uc124\uc815\ud574\ub450\uc5b4\uc57c \ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc5d0 \ub300\ud55c \ub9e4\ub274\uc5bc\uc744 \uc124\uba85\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"install-apt-packages"},"Install apt packages"),(0,r.kt)("p",null,"\ucd94\ud6c4 \ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \ud074\ub7ec\uc2a4\ud130\uc758 \uc6d0\ud65c\ud55c \ud1b5\uc2e0\uc744 \uc704\ud574\uc11c\ub294 Port-Forwarding\uc744 \uc218\ud589\ud574\uc57c \ud560 \uc77c\uc774 \uc788\uc2b5\ub2c8\ub2e4.\nPort-Forwarding\uc744 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc5d0 \ub2e4\uc74c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update\nsudo apt-get install -y socat\n")),(0,r.kt)("h2",{id:"install-docker"},"Install Docker"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4 \uc124\uce58\uc5d0 \ud544\uc694\ud55c APT \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4\uc758 \uacf5\uc2dd GPG key\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"apt \ud328\ud0a4\uc9c0 \ub9e4\ub2c8\uc800\ub85c \ub3c4\ucee4\ub97c \uc124\uce58\ud560 \ub54c, stable Repository\uc5d0\uc11c \ubc1b\uc544\uc624\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'echo \\\n"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \\\n$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud604\uc7ac \uc124\uce58\ud560 \uc218 \uc788\ub294 \ub3c4\ucee4 \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get update && apt-cache madison docker-ce\n")),(0,r.kt)("p",{parentName:"li"},"\ucd9c\ub825\ub418\ub294 \ubc84\uc804 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"5:20.10.11~3-0~ubuntu-focal")," \ubc84\uc804\uc774 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"apt-cache madison docker-ce | grep 5:20.10.11~3-0~ubuntu-focal\n")),(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\uac00 \ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker-ce | 5:20.10.11~3-0~ubuntu-focal | https://download.docker.com/linux/ubuntu focal/stable amd64 Packages\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"5:20.10.11~3-0~ubuntu-focal")," \ubc84\uc804\uc758 \ub3c4\ucee4\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install -y containerd.io docker-ce=5:20.10.11~3-0~ubuntu-focal docker-ce-cli=5:20.10.11~3-0~ubuntu-focal\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub3c4\ucee4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker run hello-world\n")),(0,r.kt)("p",{parentName:"li"},"\uba85\ub839\uc5b4 \uc2e4\ud589 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'mlops@ubuntu:~$ sudo docker run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n1. The Docker client contacted the Docker daemon.\n2. The Docker daemon pulled the "hello-world" image from the Docker Hub.\n (amd64)\n3. The Docker daemon created a new container from that image which runs the\n executable that produces the output you are currently reading.\n4. The Docker daemon streamed that output to the Docker client, which sent it\n to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n$ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\nhttps://hub.docker.com/\n\nFor more examples and ideas, visit:\nhttps://docs.docker.com/get-started/\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"docker \uad00\ub828 command\ub97c sudo \ud0a4\uc6cc\ub4dc \uc5c6\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud558\ub3c4\ub85d \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uad8c\ud55c\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo groupadd docker\nsudo usermod -aG docker $USER\nnewgrp docker\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"sudo \ud0a4\uc6cc\ub4dc \uc5c6\uc774 docker command\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub41c \uac83\uc744 \ud655\uc778\ud558\uae30 \uc704\ud574, \ub2e4\uc2dc \ud55c\ubc88 docker run\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker run hello-world\n")),(0,r.kt)("p",{parentName:"li"},"\uba85\ub839\uc5b4 \uc2e4\ud589 \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uad8c\ud55c\uc774 \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'mlops@ubuntu:~$ docker run hello-world\n\nHello from Docker!\nThis message shows that your installation appears to be working correctly.\n\nTo generate this message, Docker took the following steps:\n1. The Docker client contacted the Docker daemon.\n2. The Docker daemon pulled the "hello-world" image from the Docker Hub.\n (amd64)\n3. The Docker daemon created a new container from that image which runs the\n executable that produces the output you are currently reading.\n4. The Docker daemon streamed that output to the Docker client, which sent it\n to your terminal.\n\nTo try something more ambitious, you can run an Ubuntu container with:\n$ docker run -it ubuntu bash\n\nShare images, automate workflows, and more with a free Docker ID:\nhttps://hub.docker.com/\n\nFor more examples and ideas, visit:\nhttps://docs.docker.com/get-started/\n')))),(0,r.kt)("h2",{id:"turn-off-swap-memory"},"Turn off Swap Memory"),(0,r.kt)("p",null,"kubelet \uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uac8c \ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uc5d0\uc11c swap\uc774\ub77c\uace0 \ubd88\ub9ac\ub294 \uac00\uc0c1\uba54\ubaa8\ub9ac\ub97c \uaebc \ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 swap\uc744 \uaebc \ub461\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"(\ud074\ub7ec\uc2a4\ud130\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uac19\uc740 \ub370\uc2a4\ud06c\ud1b1\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ub54c swap \uba54\ubaa8\ub9ac\ub97c \uc885\ub8cc\ud558\uba74 \uc18d\ub3c4\uc758 \uc800\ud558\uac00 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4)")," "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab\nsudo swapoff -a\n")),(0,r.kt)("h2",{id:"install-kubectl"},"Install Kubectl"),(0,r.kt)("p",null,"kubectl \uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 API\ub97c \uc694\uccad\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8 \ud234\uc785\ub2c8\ub2e4. ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub178\ub4dc\uc5d0 \uc124\uce58\ud574\ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud604\uc7ac \ud3f4\ub354\uc5d0 kubectl v1.21.7 \ubc84\uc804\uc744 \ub2e4\uc6b4\ubc1b\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/amd64/kubectl\n\n# Or if you use arm64\ncurl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/arm64/kubectl\n")))),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"kubectl \uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud30c\uc77c\uc758 \uad8c\ud55c\uacfc \uc704\uce58\ub97c \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl version --client\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.7", GitCommit:"1f86634ff08f37e54e8bfcd86bc90b61c98f84d4", GitTreeState:"clean", BuildDate:"2021-11-17T14:41:19Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\uc5ec\ub7ec \uac1c\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, \uc5ec\ub7ec \uac1c\uc758 kubeconfig \ud30c\uc77c\uc744 \uad00\ub9ac\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc5ec\ub7ec \uac1c\uc758 kubeconfig \ud30c\uc77c \ud639\uc740 \uc5ec\ub7ec \uac1c\uc758 kube-context\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \ubb38\uc11c\ub97c \ucc38\uace0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://dev.to/aabiseverywhere/configuring-multiple-kubeconfig-on-your-machine-59eo"},"https://dev.to/aabiseverywhere/configuring-multiple-kubeconfig-on-your-machine-59eo")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/ahmetb/kubectx"},"https://github.com/ahmetb/kubectx"))))),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/ubuntu/"},"Install Docker Engine on Ubuntu")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/"},"\ub9ac\ub205\uc2a4\uc5d0 kubectl \uc124\uce58 \ubc0f \uc124\uc815"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bb396da7.4d125191.js b/assets/js/bb396da7.4d125191.js deleted file mode 100644 index 5ea0401e..00000000 --- a/assets/js/bb396da7.4d125191.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5642],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),d=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},b=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=d(r),b=n,f=u["".concat(l,".").concat(b)]||u[b]||c[b]||a;return r?o.createElement(f,s(s({ref:t},p),{},{components:r})):o.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=b;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:n,s[1]=i;for(var d=2;d{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var o=r(7462),n=(r(7294),r(3905));const a={title:"3. Tensorboards",description:"",sidebar_position:3,contributors:["Jaeyeon Kim"]},s=void 0,i={unversionedId:"kubeflow-dashboard-guide/tensorboards",id:"kubeflow-dashboard-guide/tensorboards",title:"3. Tensorboards",description:"",source:"@site/docs/kubeflow-dashboard-guide/tensorboards.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/tensorboards",permalink:"/docs/kubeflow-dashboard-guide/tensorboards",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/tensorboards.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Tensorboards",description:"",sidebar_position:3,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"2. Notebooks",permalink:"/docs/kubeflow-dashboard-guide/notebooks"},next:{title:"4. Volumes",permalink:"/docs/kubeflow-dashboard-guide/volumes"}},l={},d=[],p={toc:d},u="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Tensorboards\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"tensorboard",src:r(1076).Z,width:"2030",height:"406"})),(0,n.kt)("p",null,"Tensorboards \ud0ed\uc740 Tensorflow, PyTorch \ub4f1\uc758 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Tensorboard \uc720\ud2f8\uc774 \uc0dd\uc131\ud55c ML \ud559\uc2b5 \uad00\ub828 \ub370\uc774\ud130\ub97c \uc2dc\uac01\ud654\ud558\ub294 \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84(Tensorboard Server)\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc0dd\uc131\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc774\ub807\uac8c \uc0dd\uc131\ud55c \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\ub294, \uc77c\ubc18\uc801\uc778 \uc6d0\uaca9 \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\uc758 \uc0ac\uc6a9\ubc95\uacfc \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc73c\uba70, ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/#tensorboard"},"Kubeflow \ud30c\uc774\ud504\ub77c\uc778 \ub7f0\uc5d0\uc11c \ubc14\ub85c \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 \uc6a9\ub3c4"),"\ub85c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"Kubeflow \ud30c\uc774\ud504\ub77c\uc778 \ub7f0\uc758 \uacb0\uacfc\ub97c \uc2dc\uac01\ud654\ud558\ub294 \ubc29\ubc95\uc5d0\ub294 ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/"},"\ub2e4\uc591\ud55c \ubc29\uc2dd"),"\uc774 \uc788\uc73c\uba70, ",(0,n.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \ub354 \uc77c\ubc18\uc801\uc73c\ub85c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Kubeflow \ucef4\ud3ec\ub10c\ud2b8\uc758 Visualization \uae30\ub2a5\uacfc MLflow\uc758 \uc2dc\uac01\ud654 \uae30\ub2a5\uc744 \ud65c\uc6a9\ud560 \uc608\uc815\uc774\ubbc0\ub85c, Tensorboards \ud398\uc774\uc9c0\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 \uc0dd\ub7b5\ud558\uaca0\uc2b5\ub2c8\ub2e4."))}c.isMDXComponent=!0},7511:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},1076:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tensorboard-ec19f59c613e94e6b1ba7759e853f4ed.png"}}]); \ No newline at end of file diff --git a/assets/js/bb396da7.69b535ba.js b/assets/js/bb396da7.69b535ba.js new file mode 100644 index 00000000..78737367 --- /dev/null +++ b/assets/js/bb396da7.69b535ba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5642],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),d=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},b=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=d(r),b=n,f=u["".concat(l,".").concat(b)]||u[b]||c[b]||a;return r?o.createElement(f,s(s({ref:t},p),{},{components:r})):o.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=b;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:n,s[1]=i;for(var d=2;d{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>d});var o=r(7462),n=(r(7294),r(3905));const a={title:"3. Tensorboards",description:"",sidebar_position:3,contributors:["Jaeyeon Kim"]},s=void 0,i={unversionedId:"kubeflow-dashboard-guide/tensorboards",id:"kubeflow-dashboard-guide/tensorboards",title:"3. Tensorboards",description:"",source:"@site/docs/kubeflow-dashboard-guide/tensorboards.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/tensorboards",permalink:"/docs/kubeflow-dashboard-guide/tensorboards",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/tensorboards.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Tensorboards",description:"",sidebar_position:3,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"2. Notebooks",permalink:"/docs/kubeflow-dashboard-guide/notebooks"},next:{title:"4. Volumes",permalink:"/docs/kubeflow-dashboard-guide/volumes"}},l={},d=[],p={toc:d},u="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Tensorboards\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"tensorboard",src:r(1076).Z,width:"2030",height:"406"})),(0,n.kt)("p",null,"Tensorboards \ud0ed\uc740 Tensorflow, PyTorch \ub4f1\uc758 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 Tensorboard \uc720\ud2f8\uc774 \uc0dd\uc131\ud55c ML \ud559\uc2b5 \uad00\ub828 \ub370\uc774\ud130\ub97c \uc2dc\uac01\ud654\ud558\ub294 \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84(Tensorboard Server)\ub97c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc0dd\uc131\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc774\ub807\uac8c \uc0dd\uc131\ud55c \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\ub294, \uc77c\ubc18\uc801\uc778 \uc6d0\uaca9 \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\uc758 \uc0ac\uc6a9\ubc95\uacfc \uac19\uc774 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc73c\uba70, ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/#tensorboard"},"Kubeflow \ud30c\uc774\ud504\ub77c\uc778 \ub7f0\uc5d0\uc11c \ubc14\ub85c \ud150\uc11c\ubcf4\ub4dc \uc11c\ubc84\uc5d0 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 \uc6a9\ub3c4"),"\ub85c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"Kubeflow \ud30c\uc774\ud504\ub77c\uc778 \ub7f0\uc758 \uacb0\uacfc\ub97c \uc2dc\uac01\ud654\ud558\ub294 \ubc29\ubc95\uc5d0\ub294 ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/"},"\ub2e4\uc591\ud55c \ubc29\uc2dd"),"\uc774 \uc788\uc73c\uba70, ",(0,n.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \ub354 \uc77c\ubc18\uc801\uc73c\ub85c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Kubeflow \ucef4\ud3ec\ub10c\ud2b8\uc758 Visualization \uae30\ub2a5\uacfc MLflow\uc758 \uc2dc\uac01\ud654 \uae30\ub2a5\uc744 \ud65c\uc6a9\ud560 \uc608\uc815\uc774\ubbc0\ub85c, Tensorboards \ud398\uc774\uc9c0\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 \uc0dd\ub7b5\ud558\uaca0\uc2b5\ub2c8\ub2e4."))}c.isMDXComponent=!0},7511:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},1076:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/tensorboard-ec19f59c613e94e6b1ba7759e853f4ed.png"}}]); \ No newline at end of file diff --git a/assets/js/be2f486c.008343ad.js b/assets/js/be2f486c.008343ad.js new file mode 100644 index 00000000..ef7be4b0 --- /dev/null +++ b/assets/js/be2f486c.008343ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9398],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=p(t),u=l,g=m["".concat(i,".").concat(u)]||m[u]||c[u]||r;return t?a.createElement(g,s(s({ref:n},d),{},{components:t})):a.createElement(g,s({ref:n},d))}));function g(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var r=t.length,s=new Array(r);s[0]=u;var o={};for(var i in n)hasOwnProperty.call(n,i)&&(o[i]=n[i]);o.originalType=e,o[m]="string"==typeof e?e:l,s[1]=o;for(var p=2;p{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const r={title:"2. Deploy SeldonDeployment",description:"",sidebar_position:2,date:new Date("2021-12-22T00:00:00.000Z"),lastmod:new Date("2021-12-22T00:00:00.000Z"),contributors:["Youngcheol Jang","SeungTae Kim"]},s=void 0,o={unversionedId:"api-deployment/seldon-iris",id:"api-deployment/seldon-iris",title:"2. Deploy SeldonDeployment",description:"",source:"@site/docs/api-deployment/seldon-iris.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-iris",permalink:"/docs/api-deployment/seldon-iris",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-iris.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Deploy SeldonDeployment",description:"",sidebar_position:2,date:"2021-12-22T00:00:00.000Z",lastmod:"2021-12-22T00:00:00.000Z",contributors:["Youngcheol Jang","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. What is API Deployment?",permalink:"/docs/api-deployment/what-is-api-deployment"},next:{title:"3. Seldon Monitoring",permalink:"/docs/api-deployment/seldon-pg"}},i={},p=[{value:"SeldonDeployment\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud558\uae30",id:"seldondeployment\ub97c-\ud1b5\ud574-\ubc30\ud3ec\ud558\uae30",level:2},{value:"1. Prerequisites",id:"1-prerequisites",level:3},{value:"2. \uc2a4\ud399 \uc815\uc758",id:"2-\uc2a4\ud399-\uc815\uc758",level:3},{value:"Ingress URL",id:"ingress-url",level:2},{value:"NODE_IP / NODE_PORT",id:"node_ip--node_port",level:3},{value:"namespace / seldon-deployment-name",id:"namespace--seldon-deployment-name",level:3},{value:"method-name",id:"method-name",level:3},{value:"Using Swagger",id:"using-swagger",level:2},{value:"1. Swagger \uc811\uc18d",id:"1-swagger-\uc811\uc18d",level:3},{value:"2. Swagger Predictions \uba54\ub274 \uc120\ud0dd",id:"2-swagger-predictions-\uba54\ub274-\uc120\ud0dd",level:3},{value:"3. Try it out \uc120\ud0dd",id:"3-try-it-out-\uc120\ud0dd",level:3},{value:"4. Request body\uc5d0 data \uc785\ub825",id:"4-request-body\uc5d0-data-\uc785\ub825",level:3},{value:"5. \ucd94\ub860 \uacb0\uacfc \ud655\uc778",id:"5-\ucd94\ub860-\uacb0\uacfc-\ud655\uc778",level:3},{value:"Using CLI",id:"using-cli",level:2}],d={toc:p},m="wrapper";function c(e){let{components:n,...r}=e;return(0,l.kt)(m,(0,a.Z)({},d,r,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"seldondeployment\ub97c-\ud1b5\ud574-\ubc30\ud3ec\ud558\uae30"},"SeldonDeployment\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud558\uae30"),(0,l.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc788\uc744 \ub54c SeldonDeployment\ub97c \ud1b5\ud574 API Deployment\ub97c \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\nSeldonDeployment\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4(Kubernetes)\uc5d0 \ubaa8\ub378\uc744 REST/gRPC \uc11c\ubc84\uc758 \ud615\ud0dc\ub85c \ubc30\ud3ec\ud558\uae30 \uc704\ud574 \uc815\uc758\ub41c CRD(CustomResourceDefinition)\uc785\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-prerequisites"},"1. Prerequisites"),(0,l.kt)("p",null,"SeldonDeployment \uad00\ub828\ub41c \uc2e4\uc2b5\uc740 seldon-deploy\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ub124\uc784\uc2a4\ud398\uc774\uc2a4(namespace)\uc5d0\uc11c \uc9c4\ud589\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub97c \uc0dd\uc131\ud55c \ub4a4, seldon-deploy\ub97c \ud604\uc7ac \ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create namespace seldon-deploy\nkubectl config set-context --current --namespace=seldon-deploy\n")),(0,l.kt)("h3",{id:"2-\uc2a4\ud399-\uc815\uc758"},"2. \uc2a4\ud399 \uc815\uc758"),(0,l.kt)("p",null,"SeldonDeployment\ub97c \ubc30\ud3ec\ud558\uae30 \uc704\ud55c yaml \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\n\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uacf5\uac1c\ub41c iris model\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\uc774 iris model\uc740 sklearn \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud1b5\ud574 \ud559\uc2b5\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 SKLEARN_SERVER\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"cat < iris-sdep.yaml\napiVersion: machinelearning.seldon.io/v1alpha2\nkind: SeldonDeployment\nmetadata:\n name: sklearn\n namespace: seldon-deploy\nspec:\n name: iris\n predictors:\n - graph:\n children: []\n implementation: SKLEARN_SERVER\n modelUri: gs://seldon-models/v1.12.0-dev/sklearn/iris\n name: classifier\n name: default\n replicas: 1\nEOF\n")),(0,l.kt)("p",null,"yaml \ud30c\uc77c\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f iris-sdep.yaml\n")),(0,l.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\uac00 \ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pods --selector seldon-app=sklearn-default -n seldon-deploy\n")),(0,l.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nsklearn-default-0-classifier-5fdfd7bb77-ls9tr 2/2 Running 0 5m\n")),(0,l.kt)("h2",{id:"ingress-url"},"Ingress URL"),(0,l.kt)("p",null,"\uc774\uc81c \ubc30\ud3ec\ub41c \ubaa8\ub378\uc5d0 \ucd94\ub860 \uc694\uccad(predict request)\ub97c \ubcf4\ub0b4\uc11c \ucd94\ub860 \uacb0\uad0f\uac12\uc744 \ubc1b\uc544\uc635\ub2c8\ub2e4.\n\ubc30\ud3ec\ub41c API\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uaddc\uce59\uc73c\ub85c \uc0dd\uc131\ub429\ub2c8\ub2e4.\n",(0,l.kt)("inlineCode",{parentName:"p"},"http://{NODE_IP}:{NODE_PORT}/seldon/{namespace}/{seldon-deployment-name}/api/v1.0/{method-name}/")),(0,l.kt)("h3",{id:"node_ip--node_port"},"NODE_IP / NODE_PORT"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-seldon"},"Seldon Core \uc124\uce58 \uc2dc, Ambassador\ub97c Ingress Controller\ub85c \uc124\uc815\ud558\uc600\uc73c\ubbc0\ub85c"),", SeldonDeployment\ub85c \uc0dd\uc131\ub41c API \uc11c\ubc84\ub294 \ubaa8\ub450 Ambassador\uc758 Ingress gateway\ub97c \ud1b5\ud574 \uc694\uccad\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub530\ub77c\uc11c \uc6b0\uc120 Ambassador Ingress Gateway\uc758 url\uc744 \ud658\uacbd \ubcc0\uc218\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'export NODE_IP=$(kubectl get nodes -o jsonpath=\'{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }\')\nexport NODE_PORT=$(kubectl get service ambassador -n seldon-system -o jsonpath="{.spec.ports[0].nodePort}")\n')),(0,l.kt)("p",null,"\uc124\uc815\ub41c url\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'echo "NODE_IP"=$NODE_IP\necho "NODE_PORT"=$NODE_PORT\n')),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uc5b4\uc57c \ud558\uba70, \ud074\ub77c\uc6b0\ub4dc \ub4f1\uc744 \ud1b5\ud574 \uc124\uc815\ud560 \uacbd\uc6b0, internal ip \uc8fc\uc18c\uac00 \uc124\uc815\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NODE_IP=192.168.0.19\nNODE_PORT=30486\n")),(0,l.kt)("h3",{id:"namespace--seldon-deployment-name"},"namespace / seldon-deployment-name"),(0,l.kt)("p",null,"SeldonDeployment\uac00 \ubc30\ud3ec\ub41c ",(0,l.kt)("inlineCode",{parentName:"p"},"namespace"),"\uc640 ",(0,l.kt)("inlineCode",{parentName:"p"},"seldon-deployment-name"),"\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.\n\uc774\ub294 \uc2a4\ud399\uc744 \uc815\uc758\ud560 \ub54c metadata\uc5d0 \uc815\uc758\ub41c \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"metadata:\n name: sklearn\n namespace: seldon-deploy\n")),(0,l.kt)("p",null,"\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"namespace"),"\ub294 seldon-deploy, ",(0,l.kt)("inlineCode",{parentName:"p"},"seldon-deployment-name"),"\uc740 sklearn \uc785\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"method-name"},"method-name"),(0,l.kt)("p",null,"SeldonDeployment\uc5d0\uc11c \uc8fc\ub85c \uc0ac\uc6a9\ud558\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"method-name"),"\uc740 \ub450 \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"doc"),(0,l.kt)("li",{parentName:"ol"},"predictions")),(0,l.kt)("p",null,"\uac01\uac01\uc758 method\uc758 \uc790\uc138\ud55c \uc0ac\uc6a9 \ubc29\ubc95\uc740 \uc544\ub798\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"using-swagger"},"Using Swagger"),(0,l.kt)("p",null,"\uc6b0\uc120 doc method\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. doc method\ub97c \uc774\uc6a9\ud558\uba74 seldon\uc5d0\uc11c \uc0dd\uc131\ud55c swagger\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-swagger-\uc811\uc18d"},"1. Swagger \uc811\uc18d"),(0,l.kt)("p",null,"\uc704\uc5d0\uc11c \uc124\uba85\ud55c ingress url \uaddc\uce59\uc5d0 \ub530\ub77c \uc544\ub798 \uc8fc\uc18c\ub97c \ud1b5\ud574 swagger\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("inlineCode",{parentName:"p"},"http://192.168.0.19:30486/seldon/seldon-deploy/sklearn/api/v1.0/doc/")),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger1.png",src:t(860).Z,width:"3068",height:"1650"})),(0,l.kt)("h3",{id:"2-swagger-predictions-\uba54\ub274-\uc120\ud0dd"},"2. Swagger Predictions \uba54\ub274 \uc120\ud0dd"),(0,l.kt)("p",null,"UI\uc5d0\uc11c ",(0,l.kt)("inlineCode",{parentName:"p"},"/seldon/seldon-deploy/sklearn/api/v1.0/predictions")," \uba54\ub274\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger2.png",src:t(4835).Z,width:"3068",height:"1652"})),(0,l.kt)("h3",{id:"3-try-it-out-\uc120\ud0dd"},"3. ",(0,l.kt)("em",{parentName:"h3"},"Try it out")," \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger3.png",src:t(3729).Z,width:"3069",height:"1653"})),(0,l.kt)("h3",{id:"4-request-body\uc5d0-data-\uc785\ub825"},"4. Request body\uc5d0 data \uc785\ub825"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger4.png",src:t(2821).Z,width:"3072",height:"1652"})),(0,l.kt)("p",null,"\ub2e4\uc74c \ub370\uc774\ud130\ub97c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "data": {\n "ndarray":[[1.0, 2.0, 5.0, 6.0]]\n }\n}\n')),(0,l.kt)("h3",{id:"5-\ucd94\ub860-\uacb0\uacfc-\ud655\uc778"},"5. \ucd94\ub860 \uacb0\uacfc \ud655\uc778"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Execute")," \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc11c \ucd94\ub860 \uacb0\uacfc\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger5.png",src:t(1150).Z,width:"3583",height:"1969"})),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\ub860 \uacb0\uacfc\ub97c \uc5bb\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "data": {\n "names": [\n "t:0",\n "t:1",\n "t:2"\n ],\n "ndarray": [\n [\n 9.912315378486697e-7,\n 0.0007015931307746079,\n 0.9992974156376876\n ]\n ]\n },\n "meta": {\n "requestPath": {\n "classifier": "seldonio/sklearnserver:1.11.2"\n }\n }\n}\n')),(0,l.kt)("h2",{id:"using-cli"},"Using CLI"),(0,l.kt)("p",null,"\ub610\ud55c, curl\uacfc \uac19\uc740 http client CLI \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574\uc11c\ub3c4 API \uc694\uccad\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"/predictions"),"\ub97c \uc694\uccad\ud558\uba74"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H 'Content-Type: application/json' \\\n-d '{ \"data\": { \"ndarray\": [[1,2,3,4]] } }'\n")),(0,l.kt)("p",null,"\uc544\ub798\uc640 \uac19\uc740 \uc751\ub2f5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{"data":{"names":["t:0","t:1","t:2"],"ndarray":[[0.0006985194531162835,0.00366803903943666,0.995633441507447]]},"meta":{"requestPath":{"classifier":"seldonio/sklearnserver:1.11.2"}}}\n')))}c.isMDXComponent=!0},860:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger1-1d3574d988c85be7534f518f1e5fe097.png"},4835:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger2-ff43013f3e20de5f305d2215a599aa88.png"},3729:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger3-af84538f8d07efd95a2e820e32be2670.png"},2821:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger4-8ba33dee625455b3de8326a6677ac6ca.png"},1150:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger5-53bd997e4f2e7f1904edebd974c6e128.png"}}]); \ No newline at end of file diff --git a/assets/js/be2f486c.75bb16e4.js b/assets/js/be2f486c.75bb16e4.js deleted file mode 100644 index 0fff7971..00000000 --- a/assets/js/be2f486c.75bb16e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9398],{3905:(e,n,t)=>{t.d(n,{Zo:()=>d,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var i=a.createContext({}),p=function(e){var n=a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(i.Provider,{value:n},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),m=p(t),u=l,g=m["".concat(i,".").concat(u)]||m[u]||c[u]||r;return t?a.createElement(g,s(s({ref:n},d),{},{components:t})):a.createElement(g,s({ref:n},d))}));function g(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var r=t.length,s=new Array(r);s[0]=u;var o={};for(var i in n)hasOwnProperty.call(n,i)&&(o[i]=n[i]);o.originalType=e,o[m]="string"==typeof e?e:l,s[1]=o;for(var p=2;p{t.r(n),t.d(n,{assets:()=>i,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const r={title:"2. Deploy SeldonDeployment",description:"",sidebar_position:2,date:new Date("2021-12-22T00:00:00.000Z"),lastmod:new Date("2021-12-22T00:00:00.000Z"),contributors:["Youngcheol Jang","SeungTae Kim"]},s=void 0,o={unversionedId:"api-deployment/seldon-iris",id:"api-deployment/seldon-iris",title:"2. Deploy SeldonDeployment",description:"",source:"@site/docs/api-deployment/seldon-iris.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-iris",permalink:"/docs/api-deployment/seldon-iris",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-iris.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Deploy SeldonDeployment",description:"",sidebar_position:2,date:"2021-12-22T00:00:00.000Z",lastmod:"2021-12-22T00:00:00.000Z",contributors:["Youngcheol Jang","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. What is API Deployment?",permalink:"/docs/api-deployment/what-is-api-deployment"},next:{title:"3. Seldon Monitoring",permalink:"/docs/api-deployment/seldon-pg"}},i={},p=[{value:"SeldonDeployment\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud558\uae30",id:"seldondeployment\ub97c-\ud1b5\ud574-\ubc30\ud3ec\ud558\uae30",level:2},{value:"1. Prerequisites",id:"1-prerequisites",level:3},{value:"2. \uc2a4\ud399 \uc815\uc758",id:"2-\uc2a4\ud399-\uc815\uc758",level:3},{value:"Ingress URL",id:"ingress-url",level:2},{value:"NODE_IP / NODE_PORT",id:"node_ip--node_port",level:3},{value:"namespace / seldon-deployment-name",id:"namespace--seldon-deployment-name",level:3},{value:"method-name",id:"method-name",level:3},{value:"Using Swagger",id:"using-swagger",level:2},{value:"1. Swagger \uc811\uc18d",id:"1-swagger-\uc811\uc18d",level:3},{value:"2. Swagger Predictions \uba54\ub274 \uc120\ud0dd",id:"2-swagger-predictions-\uba54\ub274-\uc120\ud0dd",level:3},{value:"3. Try it out \uc120\ud0dd",id:"3-try-it-out-\uc120\ud0dd",level:3},{value:"4. Request body\uc5d0 data \uc785\ub825",id:"4-request-body\uc5d0-data-\uc785\ub825",level:3},{value:"5. \ucd94\ub860 \uacb0\uacfc \ud655\uc778",id:"5-\ucd94\ub860-\uacb0\uacfc-\ud655\uc778",level:3},{value:"Using CLI",id:"using-cli",level:2}],d={toc:p},m="wrapper";function c(e){let{components:n,...r}=e;return(0,l.kt)(m,(0,a.Z)({},d,r,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"seldondeployment\ub97c-\ud1b5\ud574-\ubc30\ud3ec\ud558\uae30"},"SeldonDeployment\ub97c \ud1b5\ud574 \ubc30\ud3ec\ud558\uae30"),(0,l.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc788\uc744 \ub54c SeldonDeployment\ub97c \ud1b5\ud574 API Deployment\ub97c \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\nSeldonDeployment\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4(Kubernetes)\uc5d0 \ubaa8\ub378\uc744 REST/gRPC \uc11c\ubc84\uc758 \ud615\ud0dc\ub85c \ubc30\ud3ec\ud558\uae30 \uc704\ud574 \uc815\uc758\ub41c CRD(CustomResourceDefinition)\uc785\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-prerequisites"},"1. Prerequisites"),(0,l.kt)("p",null,"SeldonDeployment \uad00\ub828\ub41c \uc2e4\uc2b5\uc740 seldon-deploy\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ub124\uc784\uc2a4\ud398\uc774\uc2a4(namespace)\uc5d0\uc11c \uc9c4\ud589\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub97c \uc0dd\uc131\ud55c \ub4a4, seldon-deploy\ub97c \ud604\uc7ac \ub124\uc784\uc2a4\ud398\uc774\uc2a4\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create namespace seldon-deploy\nkubectl config set-context --current --namespace=seldon-deploy\n")),(0,l.kt)("h3",{id:"2-\uc2a4\ud399-\uc815\uc758"},"2. \uc2a4\ud399 \uc815\uc758"),(0,l.kt)("p",null,"SeldonDeployment\ub97c \ubc30\ud3ec\ud558\uae30 \uc704\ud55c yaml \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\n\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uacf5\uac1c\ub41c iris model\uc744 \uc0ac\uc6a9\ud558\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.\n\uc774 iris model\uc740 sklearn \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud1b5\ud574 \ud559\uc2b5\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 SKLEARN_SERVER\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"cat < iris-sdep.yaml\napiVersion: machinelearning.seldon.io/v1alpha2\nkind: SeldonDeployment\nmetadata:\n name: sklearn\n namespace: seldon-deploy\nspec:\n name: iris\n predictors:\n - graph:\n children: []\n implementation: SKLEARN_SERVER\n modelUri: gs://seldon-models/v1.12.0-dev/sklearn/iris\n name: classifier\n name: default\n replicas: 1\nEOF\n")),(0,l.kt)("p",null,"yaml \ud30c\uc77c\uc744 \ubc30\ud3ec\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f iris-sdep.yaml\n")),(0,l.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\uac00 \ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pods --selector seldon-app=sklearn-default -n seldon-deploy\n")),(0,l.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\nsklearn-default-0-classifier-5fdfd7bb77-ls9tr 2/2 Running 0 5m\n")),(0,l.kt)("h2",{id:"ingress-url"},"Ingress URL"),(0,l.kt)("p",null,"\uc774\uc81c \ubc30\ud3ec\ub41c \ubaa8\ub378\uc5d0 \ucd94\ub860 \uc694\uccad(predict request)\ub97c \ubcf4\ub0b4\uc11c \ucd94\ub860 \uacb0\uad0f\uac12\uc744 \ubc1b\uc544\uc635\ub2c8\ub2e4.\n\ubc30\ud3ec\ub41c API\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uaddc\uce59\uc73c\ub85c \uc0dd\uc131\ub429\ub2c8\ub2e4.\n",(0,l.kt)("inlineCode",{parentName:"p"},"http://{NODE_IP}:{NODE_PORT}/seldon/{namespace}/{seldon-deployment-name}/api/v1.0/{method-name}/")),(0,l.kt)("h3",{id:"node_ip--node_port"},"NODE_IP / NODE_PORT"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-seldon"},"Seldon Core \uc124\uce58 \uc2dc, Ambassador\ub97c Ingress Controller\ub85c \uc124\uc815\ud558\uc600\uc73c\ubbc0\ub85c"),", SeldonDeployment\ub85c \uc0dd\uc131\ub41c API \uc11c\ubc84\ub294 \ubaa8\ub450 Ambassador\uc758 Ingress gateway\ub97c \ud1b5\ud574 \uc694\uccad\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub530\ub77c\uc11c \uc6b0\uc120 Ambassador Ingress Gateway\uc758 url\uc744 \ud658\uacbd \ubcc0\uc218\ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'export NODE_IP=$(kubectl get nodes -o jsonpath=\'{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }\')\nexport NODE_PORT=$(kubectl get service ambassador -n seldon-system -o jsonpath="{.spec.ports[0].nodePort}")\n')),(0,l.kt)("p",null,"\uc124\uc815\ub41c url\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'echo "NODE_IP"=$NODE_IP\necho "NODE_PORT"=$NODE_PORT\n')),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uc5b4\uc57c \ud558\uba70, \ud074\ub77c\uc6b0\ub4dc \ub4f1\uc744 \ud1b5\ud574 \uc124\uc815\ud560 \uacbd\uc6b0, internal ip \uc8fc\uc18c\uac00 \uc124\uc815\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NODE_IP=192.168.0.19\nNODE_PORT=30486\n")),(0,l.kt)("h3",{id:"namespace--seldon-deployment-name"},"namespace / seldon-deployment-name"),(0,l.kt)("p",null,"SeldonDeployment\uac00 \ubc30\ud3ec\ub41c ",(0,l.kt)("inlineCode",{parentName:"p"},"namespace"),"\uc640 ",(0,l.kt)("inlineCode",{parentName:"p"},"seldon-deployment-name"),"\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.\n\uc774\ub294 \uc2a4\ud399\uc744 \uc815\uc758\ud560 \ub54c metadata\uc5d0 \uc815\uc758\ub41c \uac12\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"metadata:\n name: sklearn\n namespace: seldon-deploy\n")),(0,l.kt)("p",null,"\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"namespace"),"\ub294 seldon-deploy, ",(0,l.kt)("inlineCode",{parentName:"p"},"seldon-deployment-name"),"\uc740 sklearn \uc785\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"method-name"},"method-name"),(0,l.kt)("p",null,"SeldonDeployment\uc5d0\uc11c \uc8fc\ub85c \uc0ac\uc6a9\ud558\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"method-name"),"\uc740 \ub450 \uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"doc"),(0,l.kt)("li",{parentName:"ol"},"predictions")),(0,l.kt)("p",null,"\uac01\uac01\uc758 method\uc758 \uc790\uc138\ud55c \uc0ac\uc6a9 \ubc29\ubc95\uc740 \uc544\ub798\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"using-swagger"},"Using Swagger"),(0,l.kt)("p",null,"\uc6b0\uc120 doc method\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc785\ub2c8\ub2e4. doc method\ub97c \uc774\uc6a9\ud558\uba74 seldon\uc5d0\uc11c \uc0dd\uc131\ud55c swagger\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-swagger-\uc811\uc18d"},"1. Swagger \uc811\uc18d"),(0,l.kt)("p",null,"\uc704\uc5d0\uc11c \uc124\uba85\ud55c ingress url \uaddc\uce59\uc5d0 \ub530\ub77c \uc544\ub798 \uc8fc\uc18c\ub97c \ud1b5\ud574 swagger\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("inlineCode",{parentName:"p"},"http://192.168.0.19:30486/seldon/seldon-deploy/sklearn/api/v1.0/doc/")),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger1.png",src:t(860).Z,width:"3068",height:"1650"})),(0,l.kt)("h3",{id:"2-swagger-predictions-\uba54\ub274-\uc120\ud0dd"},"2. Swagger Predictions \uba54\ub274 \uc120\ud0dd"),(0,l.kt)("p",null,"UI\uc5d0\uc11c ",(0,l.kt)("inlineCode",{parentName:"p"},"/seldon/seldon-deploy/sklearn/api/v1.0/predictions")," \uba54\ub274\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger2.png",src:t(4835).Z,width:"3068",height:"1652"})),(0,l.kt)("h3",{id:"3-try-it-out-\uc120\ud0dd"},"3. ",(0,l.kt)("em",{parentName:"h3"},"Try it out")," \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger3.png",src:t(3729).Z,width:"3069",height:"1653"})),(0,l.kt)("h3",{id:"4-request-body\uc5d0-data-\uc785\ub825"},"4. Request body\uc5d0 data \uc785\ub825"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger4.png",src:t(2821).Z,width:"3072",height:"1652"})),(0,l.kt)("p",null,"\ub2e4\uc74c \ub370\uc774\ud130\ub97c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "data": {\n "ndarray":[[1.0, 2.0, 5.0, 6.0]]\n }\n}\n')),(0,l.kt)("h3",{id:"5-\ucd94\ub860-\uacb0\uacfc-\ud655\uc778"},"5. \ucd94\ub860 \uacb0\uacfc \ud655\uc778"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Execute")," \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc11c \ucd94\ub860 \uacb0\uacfc\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"iris-swagger5.png",src:t(1150).Z,width:"3583",height:"1969"})),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ucd94\ub860 \uacb0\uacfc\ub97c \uc5bb\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "data": {\n "names": [\n "t:0",\n "t:1",\n "t:2"\n ],\n "ndarray": [\n [\n 9.912315378486697e-7,\n 0.0007015931307746079,\n 0.9992974156376876\n ]\n ]\n },\n "meta": {\n "requestPath": {\n "classifier": "seldonio/sklearnserver:1.11.2"\n }\n }\n}\n')),(0,l.kt)("h2",{id:"using-cli"},"Using CLI"),(0,l.kt)("p",null,"\ub610\ud55c, curl\uacfc \uac19\uc740 http client CLI \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574\uc11c\ub3c4 API \uc694\uccad\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \ub2e4\uc74c\uacfc \uac19\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"/predictions"),"\ub97c \uc694\uccad\ud558\uba74"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H 'Content-Type: application/json' \\\n-d '{ \"data\": { \"ndarray\": [[1,2,3,4]] } }'\n")),(0,l.kt)("p",null,"\uc544\ub798\uc640 \uac19\uc740 \uc751\ub2f5\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'{"data":{"names":["t:0","t:1","t:2"],"ndarray":[[0.0006985194531162835,0.00366803903943666,0.995633441507447]]},"meta":{"requestPath":{"classifier":"seldonio/sklearnserver:1.11.2"}}}\n')))}c.isMDXComponent=!0},860:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger1-1d3574d988c85be7534f518f1e5fe097.png"},4835:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger2-ff43013f3e20de5f305d2215a599aa88.png"},3729:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger3-af84538f8d07efd95a2e820e32be2670.png"},2821:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger4-8ba33dee625455b3de8326a6677ac6ca.png"},1150:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/iris-swagger5-53bd997e4f2e7f1904edebd974c6e128.png"}}]); \ No newline at end of file diff --git a/assets/js/bf383222.304d1b4d.js b/assets/js/bf383222.304d1b4d.js deleted file mode 100644 index 8ec97447..00000000 --- a/assets/js/bf383222.304d1b4d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6661],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>d});var n=r(7294);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(s[r]=e[r]);return s}(e,t);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}var p=n.createContext({}),i=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},l=function(e){var t=i(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,s=e.mdxType,u=e.originalType,p=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),c=i(r),k=s,d=c["".concat(p,".").concat(k)]||c[k]||b[k]||u;return r?n.createElement(d,o(o({ref:t},l),{},{components:r})):n.createElement(d,o({ref:t},l))}));function d(e,t){var r=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var u=r.length,o=new Array(u);o[0]=k;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[c]="string"==typeof e?e:s,o[1]=a;for(var i=2;i{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>b,frontMatter:()=>u,metadata:()=>a,toc:()=>i});var n=r(7462),s=(r(7294),r(3905));const u={title:"2. Setup Kubernetes",description:"Setup Kubernetes",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,a={unversionedId:"setup-kubernetes/kubernetes",id:"version-1.0/setup-kubernetes/kubernetes",title:"2. Setup Kubernetes",description:"Setup Kubernetes",source:"@site/versioned_docs/version-1.0/setup-kubernetes/kubernetes.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/kubernetes",permalink:"/docs/1.0/setup-kubernetes/kubernetes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/kubernetes.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Setup Kubernetes",description:"Setup Kubernetes",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Introduction",permalink:"/docs/1.0/setup-kubernetes/intro"},next:{title:"3. Install Prerequisite",permalink:"/docs/1.0/setup-kubernetes/install-prerequisite"}},p={},i=[{value:"Setup Kubernetes Cluster",id:"setup-kubernetes-cluster",level:2}],l={toc:i},c="wrapper";function b(e){let{components:t,...r}=e;return(0,s.kt)(c,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h2",{id:"setup-kubernetes-cluster"},"Setup Kubernetes Cluster"),(0,s.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \ucc98\uc74c \ubc30\uc6b0\uc2dc\ub294 \ubd84\ub4e4\uc5d0\uac8c \uccab \uc9c4\uc785 \uc7a5\ubcbd\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc2e4\uc2b5 \ud658\uacbd\uc744 \uad6c\ucd95\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,s.kt)("p",null,"\ud504\ub85c\ub355\uc158 \ub808\ubca8\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \uc218 \uc788\uac8c \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\ub294 \ub3c4\uad6c\ub294 kubeadm \uc774\uc9c0\ub9cc, \uc0ac\uc6a9\uc790\ub4e4\uc774 \uc870\uae08 \ub354 \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 kubespray, kops \ub4f1\uc758 \ub3c4\uad6c\ub3c4 \uc874\uc7ac\ud558\uba70, \ud559\uc2b5 \ubaa9\uc801\uc744 \uc704\ud574\uc11c \ucef4\ud329\ud2b8\ud55c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uc815\ub9d0 \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 k3s, minikube, microk8s, kind \ub4f1\uc758 \ub3c4\uad6c\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,s.kt)("p",null,"\uac01\uac01\uc758 \ub3c4\uad6c\ub294 \uc7a5\ub2e8\uc810\uc774 \ub2e4\ub974\uae30\uc5d0 \uc0ac\uc6a9\uc790\ub9c8\ub2e4 \uc120\ud638\ud558\ub294 \ub3c4\uad6c\uac00 \ub2e4\ub978 \uc810\uc744 \uace0\ub824\ud558\uc5ec, \ubcf8 \uae00\uc5d0\uc11c\ub294 kubeadm, k3s, minikube\uc758 3\uac00\uc9c0 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud558\uc5ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.\n\uac01 \ub3c4\uad6c\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ube44\uad50\ub294 \ub2e4\uc74c \ucfe0\ubc84\ub124\ud2f0\uc2a4 ",(0,s.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/tasks/tools/"},"\uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ud655\uc778\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,s.kt)("p",null,(0,s.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \ud234\uc740 ",(0,s.kt)("strong",{parentName:"p"},"k3s"),"\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \ub54c \uc27d\uac8c \ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.",(0,s.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0 \ub178\ub4dc \uad6c\uc131\uae4c\uc9c0 \ud65c\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 ",(0,s.kt)("strong",{parentName:"p"},"kubeadm"),"\uc744 \uad8c\uc7a5\ud574 \ub4dc\ub9bd\ub2c8\ub2e4.",(0,s.kt)("br",{parentName:"p"}),"\n",(0,s.kt)("strong",{parentName:"p"},"minikube")," \ub294 \uc800\ud76c\uac00 \uc124\uba85\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8 \uc678\uc5d0\ub3c4 \ub2e4\ub978 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c add-on \ud615\uc2dd\uc73c\ub85c \uc27d\uac8c \uc124\uce58\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,s.kt)("p",null,"\ubcf8 ",(0,s.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uad6c\ucd95\ud558\uac8c \ub420 MLOps \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 \uc6d0\ud65c\ud788 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, \uac01\uac01\uc758 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \ub54c, \ucd94\uac00\ub85c \uc124\uc815\ud574 \uc8fc\uc5b4\uc57c \ud558\ub294 \ubd80\ubd84\uc774 \ucd94\uac00\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,s.kt)("p",null,"Ubuntu OS\uae4c\uc9c0\ub294 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud0d1\uc744 k8s cluster\ub85c \uad6c\ucd95\ud55c \ub4a4, \uc678\ubd80 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc811\uadfc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud558\ub294 \uac83\uae4c\uc9c0\uac00 \ubcf8 ",(0,s.kt)("strong",{parentName:"p"},"Setup Kubernetes"),"\ub2e8\uc6d0\uc758 \ubc94\uc704\uc785\ub2c8\ub2e4."),(0,s.kt)("p",null,"\uc790\uc138\ud55c \uad6c\ucd95 \ubc29\ubc95\uc740 3\uac00\uc9c0 \ub3c4\uad6c\ub9c8\ub2e4 \ub2e4\ub974\uae30\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ud750\ub984\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"3. Setup Prerequisite\n4. Setup Kubernetes\n 4.1. with k3s\n 4.2. with minikube\n 4.3. with kubeadm\n5. Setup Kubernetes Modules\n")),(0,s.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uac01\uac01\uc758 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ubc18\ub4dc\uc2dc \ubaa8\ub4e0 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud574 \ubcfc \ud544\uc694\ub294 \uc5c6\uc73c\uba70, \uc774 \uc911 \uc5ec\ub7ec\ubd84\uc774 \uc775\uc219\ud558\uc2e0 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574\uc8fc\uc2dc\uba74 \ucda9\ubd84\ud569\ub2c8\ub2e4."))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5dc48d01.ca3a3bd5.js b/assets/js/bf383222.87c00be5.js similarity index 54% rename from assets/js/5dc48d01.ca3a3bd5.js rename to assets/js/bf383222.87c00be5.js index d3f54c88..14e138e2 100644 --- a/assets/js/5dc48d01.ca3a3bd5.js +++ b/assets/js/bf383222.87c00be5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2610],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>m});var n=r(7294);function u(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(u[r]=e[r]);return u}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(u[r]=e[r])}return u}var p=n.createContext({}),i=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},l=function(e){var t=i(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,u=e.mdxType,s=e.originalType,p=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),c=i(r),k=u,m=c["".concat(p,".").concat(k)]||c[k]||b[k]||s;return r?n.createElement(m,o(o({ref:t},l),{},{components:r})):n.createElement(m,o({ref:t},l))}));function m(e,t){var r=arguments,u=t&&t.mdxType;if("string"==typeof e||u){var s=r.length,o=new Array(s);o[0]=k;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[c]="string"==typeof e?e:u,o[1]=a;for(var i=2;i{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>b,frontMatter:()=>s,metadata:()=>a,toc:()=>i});var n=r(7462),u=(r(7294),r(3905));const s={title:"2. Setup Kubernetes",description:"Setup Kubernetes",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,a={unversionedId:"setup-kubernetes/kubernetes",id:"setup-kubernetes/kubernetes",title:"2. Setup Kubernetes",description:"Setup Kubernetes",source:"@site/docs/setup-kubernetes/kubernetes.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/kubernetes",permalink:"/docs/setup-kubernetes/kubernetes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/kubernetes.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Setup Kubernetes",description:"Setup Kubernetes",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Introduction",permalink:"/docs/setup-kubernetes/intro"},next:{title:"3. Install Prerequisite",permalink:"/docs/setup-kubernetes/install-prerequisite"}},p={},i=[{value:"Setup Kubernetes Cluster",id:"setup-kubernetes-cluster",level:2}],l={toc:i},c="wrapper";function b(e){let{components:t,...r}=e;return(0,u.kt)(c,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,u.kt)("h2",{id:"setup-kubernetes-cluster"},"Setup Kubernetes Cluster"),(0,u.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \ucc98\uc74c \ubc30\uc6b0\uc2dc\ub294 \ubd84\ub4e4\uc5d0\uac8c \uccab \uc9c4\uc785 \uc7a5\ubcbd\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc2e4\uc2b5 \ud658\uacbd\uc744 \uad6c\ucd95\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,u.kt)("p",null,"\ud504\ub85c\ub355\uc158 \ub808\ubca8\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \uc218 \uc788\uac8c \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\ub294 \ub3c4\uad6c\ub294 kubeadm \uc774\uc9c0\ub9cc, \uc0ac\uc6a9\uc790\ub4e4\uc774 \uc870\uae08 \ub354 \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 kubespray, kops \ub4f1\uc758 \ub3c4\uad6c\ub3c4 \uc874\uc7ac\ud558\uba70, \ud559\uc2b5 \ubaa9\uc801\uc744 \uc704\ud574\uc11c \ucef4\ud329\ud2b8\ud55c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uc815\ub9d0 \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 k3s, minikube, microk8s, kind \ub4f1\uc758 \ub3c4\uad6c\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,u.kt)("p",null,"\uac01\uac01\uc758 \ub3c4\uad6c\ub294 \uc7a5\ub2e8\uc810\uc774 \ub2e4\ub974\uae30\uc5d0 \uc0ac\uc6a9\uc790\ub9c8\ub2e4 \uc120\ud638\ud558\ub294 \ub3c4\uad6c\uac00 \ub2e4\ub978 \uc810\uc744 \uace0\ub824\ud558\uc5ec, \ubcf8 \uae00\uc5d0\uc11c\ub294 kubeadm, k3s, minikube\uc758 3\uac00\uc9c0 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud558\uc5ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.\n\uac01 \ub3c4\uad6c\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ube44\uad50\ub294 \ub2e4\uc74c \ucfe0\ubc84\ub124\ud2f0\uc2a4 ",(0,u.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/tasks/tools/"},"\uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ud655\uc778\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,u.kt)("p",null,(0,u.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \ud234\uc740 ",(0,u.kt)("strong",{parentName:"p"},"k3s"),"\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \ub54c \uc27d\uac8c \ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.",(0,u.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0 \ub178\ub4dc \uad6c\uc131\uae4c\uc9c0 \ud65c\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 ",(0,u.kt)("strong",{parentName:"p"},"kubeadm"),"\uc744 \uad8c\uc7a5\ud574 \ub4dc\ub9bd\ub2c8\ub2e4.",(0,u.kt)("br",{parentName:"p"}),"\n",(0,u.kt)("strong",{parentName:"p"},"minikube")," \ub294 \uc800\ud76c\uac00 \uc124\uba85\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8 \uc678\uc5d0\ub3c4 \ub2e4\ub978 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c add-on \ud615\uc2dd\uc73c\ub85c \uc27d\uac8c \uc124\uce58\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,u.kt)("p",null,"\ubcf8 ",(0,u.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uad6c\ucd95\ud558\uac8c \ub420 MLOps \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 \uc6d0\ud65c\ud788 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, \uac01\uac01\uc758 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \ub54c, \ucd94\uac00\ub85c \uc124\uc815\ud574 \uc8fc\uc5b4\uc57c \ud558\ub294 \ubd80\ubd84\uc774 \ucd94\uac00\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,u.kt)("p",null,"Ubuntu OS\uae4c\uc9c0\ub294 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud0d1\uc744 k8s cluster\ub85c \uad6c\ucd95\ud55c \ub4a4, \uc678\ubd80 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc811\uadfc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud558\ub294 \uac83\uae4c\uc9c0\uac00 \ubcf8 ",(0,u.kt)("strong",{parentName:"p"},"Setup Kubernetes"),"\ub2e8\uc6d0\uc758 \ubc94\uc704\uc785\ub2c8\ub2e4."),(0,u.kt)("p",null,"\uc790\uc138\ud55c \uad6c\ucd95 \ubc29\ubc95\uc740 3\uac00\uc9c0 \ub3c4\uad6c\ub9c8\ub2e4 \ub2e4\ub974\uae30\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ud750\ub984\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,u.kt)("pre",null,(0,u.kt)("code",{parentName:"pre",className:"language-bash"},"3. Setup Prerequisite\n4. Setup Kubernetes\n 4.1. with k3s\n 4.2. with minikube\n 4.3. with kubeadm\n5. Setup Kubernetes Modules\n")),(0,u.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uac01\uac01\uc758 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ubc18\ub4dc\uc2dc \ubaa8\ub4e0 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud574 \ubcfc \ud544\uc694\ub294 \uc5c6\uc73c\uba70, \uc774 \uc911 \uc5ec\ub7ec\ubd84\uc774 \uc775\uc219\ud558\uc2e0 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574\uc8fc\uc2dc\uba74 \ucda9\ubd84\ud569\ub2c8\ub2e4."))}b.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6661],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>k});var n=r(7294);function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function u(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(s[r]=e[r]);return s}(e,t);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(s[r]=e[r])}return s}var p=n.createContext({}),i=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},l=function(e){var t=i(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,s=e.mdxType,u=e.originalType,p=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),c=i(r),d=s,k=c["".concat(p,".").concat(d)]||c[d]||b[d]||u;return r?n.createElement(k,o(o({ref:t},l),{},{components:r})):n.createElement(k,o({ref:t},l))}));function k(e,t){var r=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var u=r.length,o=new Array(u);o[0]=d;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[c]="string"==typeof e?e:s,o[1]=a;for(var i=2;i{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>b,frontMatter:()=>u,metadata:()=>a,toc:()=>i});var n=r(7462),s=(r(7294),r(3905));const u={title:"2. Setup Kubernetes",description:"Setup Kubernetes",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,a={unversionedId:"setup-kubernetes/kubernetes",id:"version-1.0/setup-kubernetes/kubernetes",title:"2. Setup Kubernetes",description:"Setup Kubernetes",source:"@site/versioned_docs/version-1.0/setup-kubernetes/kubernetes.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/kubernetes",permalink:"/docs/1.0/setup-kubernetes/kubernetes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/kubernetes.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Setup Kubernetes",description:"Setup Kubernetes",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"1. Introduction",permalink:"/docs/1.0/setup-kubernetes/intro"},next:{title:"3. Install Prerequisite",permalink:"/docs/1.0/setup-kubernetes/install-prerequisite"}},p={},i=[{value:"Setup Kubernetes Cluster",id:"setup-kubernetes-cluster",level:2}],l={toc:i},c="wrapper";function b(e){let{components:t,...r}=e;return(0,s.kt)(c,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h2",{id:"setup-kubernetes-cluster"},"Setup Kubernetes Cluster"),(0,s.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \ucc98\uc74c \ubc30\uc6b0\uc2dc\ub294 \ubd84\ub4e4\uc5d0\uac8c \uccab \uc9c4\uc785 \uc7a5\ubcbd\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc2e4\uc2b5 \ud658\uacbd\uc744 \uad6c\ucd95\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,s.kt)("p",null,"\ud504\ub85c\ub355\uc158 \ub808\ubca8\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \uc218 \uc788\uac8c \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\ub294 \ub3c4\uad6c\ub294 kubeadm \uc774\uc9c0\ub9cc, \uc0ac\uc6a9\uc790\ub4e4\uc774 \uc870\uae08 \ub354 \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 kubespray, kops \ub4f1\uc758 \ub3c4\uad6c\ub3c4 \uc874\uc7ac\ud558\uba70, \ud559\uc2b5 \ubaa9\uc801\uc744 \uc704\ud574\uc11c \ucef4\ud329\ud2b8\ud55c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uc815\ub9d0 \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc8fc\ub294 k3s, minikube, microk8s, kind \ub4f1\uc758 \ub3c4\uad6c\ub3c4 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,s.kt)("p",null,"\uac01\uac01\uc758 \ub3c4\uad6c\ub294 \uc7a5\ub2e8\uc810\uc774 \ub2e4\ub974\uae30\uc5d0 \uc0ac\uc6a9\uc790\ub9c8\ub2e4 \uc120\ud638\ud558\ub294 \ub3c4\uad6c\uac00 \ub2e4\ub978 \uc810\uc744 \uace0\ub824\ud558\uc5ec, \ubcf8 \uae00\uc5d0\uc11c\ub294 kubeadm, k3s, minikube\uc758 3\uac00\uc9c0 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud558\uc5ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.\n\uac01 \ub3c4\uad6c\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ube44\uad50\ub294 \ub2e4\uc74c \ucfe0\ubc84\ub124\ud2f0\uc2a4 ",(0,s.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/tasks/tools/"},"\uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ud655\uc778\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,s.kt)("p",null,(0,s.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uad8c\uc7a5\ud558\ub294 \ud234\uc740 ",(0,s.kt)("strong",{parentName:"p"},"k3s"),"\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \ub54c \uc27d\uac8c \ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.",(0,s.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0 \ub178\ub4dc \uad6c\uc131\uae4c\uc9c0 \ud65c\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74 ",(0,s.kt)("strong",{parentName:"p"},"kubeadm"),"\uc744 \uad8c\uc7a5\ud574 \ub4dc\ub9bd\ub2c8\ub2e4.",(0,s.kt)("br",{parentName:"p"}),"\n",(0,s.kt)("strong",{parentName:"p"},"minikube")," \ub294 \uc800\ud76c\uac00 \uc124\uba85\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8 \uc678\uc5d0\ub3c4 \ub2e4\ub978 \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c add-on \ud615\uc2dd\uc73c\ub85c \uc27d\uac8c \uc124\uce58\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,s.kt)("p",null,"\ubcf8 ",(0,s.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uad6c\ucd95\ud558\uac8c \ub420 MLOps \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 \uc6d0\ud65c\ud788 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, \uac01\uac01\uc758 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud560 \ub54c, \ucd94\uac00\ub85c \uc124\uc815\ud574 \uc8fc\uc5b4\uc57c \ud558\ub294 \ubd80\ubd84\uc774 \ucd94\uac00\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,s.kt)("p",null,"Ubuntu OS\uae4c\uc9c0\ub294 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud0d1\uc744 k8s cluster\ub85c \uad6c\ucd95\ud55c \ub4a4, \uc678\ubd80 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc811\uadfc\ud558\ub294 \uac83\uc744 \ud655\uc778\ud558\ub294 \uac83\uae4c\uc9c0\uac00 \ubcf8 ",(0,s.kt)("strong",{parentName:"p"},"Setup Kubernetes"),"\ub2e8\uc6d0\uc758 \ubc94\uc704\uc785\ub2c8\ub2e4."),(0,s.kt)("p",null,"\uc790\uc138\ud55c \uad6c\ucd95 \ubc29\ubc95\uc740 3\uac00\uc9c0 \ub3c4\uad6c\ub9c8\ub2e4 \ub2e4\ub974\uae30\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ud750\ub984\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"3. Setup Prerequisite\n4. Setup Kubernetes\n 4.1. with k3s\n 4.2. with minikube\n 4.3. with kubeadm\n5. Setup Kubernetes Modules\n")),(0,s.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uac01\uac01\uc758 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ubc18\ub4dc\uc2dc \ubaa8\ub4e0 \ub3c4\uad6c\ub97c \uc0ac\uc6a9\ud574 \ubcfc \ud544\uc694\ub294 \uc5c6\uc73c\uba70, \uc774 \uc911 \uc5ec\ub7ec\ubd84\uc774 \uc775\uc219\ud558\uc2e0 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud574\uc8fc\uc2dc\uba74 \ucda9\ubd84\ud569\ub2c8\ub2e4."))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c07e8a62.743da8f2.js b/assets/js/c07e8a62.743da8f2.js new file mode 100644 index 00000000..d4d155c3 --- /dev/null +++ b/assets/js/c07e8a62.743da8f2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1800],{3905:(e,t,r)=>{r.d(t,{Zo:()=>k,kt:()=>s});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},k=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,k=i(e,["components","mdxType","originalType","parentName"]),m=c(r),u=a,s=m["".concat(p,".").concat(u)]||m[u]||d[u]||l;return r?n.createElement(s,o(o({ref:t},k),{},{components:r})):n.createElement(s,o({ref:t},k))}));function s(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[m]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const l={title:"[Practice] Docker images",description:"Practice to use docker image.",sidebar_position:5,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/images",id:"version-1.0/prerequisites/docker/images",title:"[Practice] Docker images",description:"Practice to use docker image.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/images.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/images",permalink:"/docs/1.0/prerequisites/docker/images",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/images.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"[Practice] Docker images",description:"Practice to use docker image.",sidebar_position:5,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"[Practice] Docker command",permalink:"/docs/1.0/prerequisites/docker/command"},next:{title:"[Practice] Docker Advanced",permalink:"/docs/1.0/prerequisites/docker/advanced"}},p={},c=[{value:"1. Dockerfile \ub9cc\ub4e4\uae30",id:"1-dockerfile-\ub9cc\ub4e4\uae30",level:2},{value:"2. Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4",id:"2-dockerfile-\ub0b4\uc7a5-\uba85\ub839\uc5b4",level:2},{value:"FROM",id:"from",level:3},{value:"COPY",id:"copy",level:3},{value:"RUN",id:"run",level:3},{value:"CMD",id:"cmd",level:3},{value:"WORKDIR",id:"workdir",level:3},{value:"ENV",id:"env",level:3},{value:"EXPOSE",id:"expose",level:3},{value:"3. \uac04\ub2e8\ud55c Dockerfile \uc791\uc131\ud574\ubcf4\uae30",id:"3-\uac04\ub2e8\ud55c-dockerfile-\uc791\uc131\ud574\ubcf4\uae30",level:2},{value:"4. Docker build from Dockerfile",id:"4-docker-build-from-dockerfile",level:2},{value:"5. Docker run from Dockerfile",id:"5-docker-run-from-dockerfile",level:2},{value:"6. Docker run with env",id:"6-docker-run-with-env",level:2}],k={toc:c},m="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(m,(0,n.Z)({},k,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-dockerfile-\ub9cc\ub4e4\uae30"},"1. Dockerfile \ub9cc\ub4e4\uae30"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4dc\ub294 \uac00\uc7a5 \uc26c\uc6b4 \ubc29\ubc95\uc740 \ub3c4\ucee4\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf\uc778 Dockerfile\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\uc678\uc5d0\ub294 running container \ub97c docker image \ub85c \ub9cc\ub4dc\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker commit")," \ub4f1\uc744 \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\uc790\uac00 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub3c4\ub85d, \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf"),(0,a.kt)("li",{parentName:"ul"},"\ud30c\uc77c\uba85\uc740 \uaf2d ",(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile")," \uc774 \uc544\ub2c8\uc5b4\ub3c4 \uc0c1\uad00\uc5c6\uc9c0\ub9cc, ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build")," \uc218\ud589 \uc2dc, default \ub85c \uc0ac\uc6a9\ud558\ub294 \ud30c\uc77c\uba85\uc774 ",(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile")," \uc785\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ul"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4dc\ub294 ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build")," \ub97c \uc218\ud589\ud560 \ub54c, ",(0,a.kt)("inlineCode",{parentName:"li"},"-f")," \uc635\uc158\uc744 \uc8fc\uba74 \ub2e4\ub978 \ud30c\uc77c\uba85\uc73c\ub85c\ub3c4 \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"ex) ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build -f dockerfile-asdf .")," \ub3c4 \uac00\ub2a5")))))),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc2e4\uc2b5\uc744 \uc704\ud574\uc11c \ud3b8\ud55c \ub514\ub809\ud1a0\ub9ac\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd \n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"docker-practice \ub77c\ub294 \uc774\ub984\uc758 \ud3f4\ub354\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir docker-practice\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"docker-practice \ud3f4\ub354\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd docker-practice\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Dockerfile \uc774\ub77c\ub294 \ube48 \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"touch Dockerfile\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n")))),(0,a.kt)("h2",{id:"2-dockerfile-\ub0b4\uc7a5-\uba85\ub839\uc5b4"},"2. Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4"),(0,a.kt)("p",null,"Dockerfile \uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ubcf8\uc801\uc778 \uba85\ub839\uc5b4\uc5d0 \ub300\ud574\uc11c \ud558\ub098\uc529 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"from"},"FROM"),(0,a.kt)("p",null,"Dockerfile \uc774 base image \ub85c \uc5b4\ub5a0\ud55c \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud560 \uac83\uc778\uc9c0\ub97c \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c, \uc544\ubb34\uac83\ub3c4 \uc5c6\ub294 \ube48 \ud658\uacbd\uc5d0\uc11c\ubd80\ud130 \ud558\ub098\ud558\ub098\uc529 \uc81c\uac00 \uc758\ub3c4\ud55c \ud658\uacbd\uc744 \ub9cc\ub4e4\uc5b4\uac00\ub294\uac8c \uc544\ub2c8\ub77c, python 3.9 \ubc84\uc804\uc774 \uc124\uce58\ub41c \ud658\uacbd\uc744 \ubca0\uc774\uc2a4\ub85c\ud574\ub450\uace0, \uc800\ub294 pytorch \ub97c \uc124\uce58\ud558\uace0, \uc81c \uc18c\uc2a4\ucf54\ub4dc\ub9cc \ub123\uc5b4\ub450\ub294 \ud615\ud0dc\ub85c \ud65c\uc6a9\ud560 \uc218\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \uacbd\uc6b0\uc5d0\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"python:3.9"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"python-3.9-alpine"),", ... \ub4f1\uc758 \uc798 \ub9cc\ub4e4\uc5b4\uc9c4 \uc774\ubbf8\uc9c0\ub97c \ubca0\uc774\uc2a4\ub85c \ud65c\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"FROM [:] [AS ]\n\n# \uc608\uc2dc\nFROM ubuntu\nFROM ubuntu:18.04\nFROM nginx:latest AS ngx\n")),(0,a.kt)("h3",{id:"copy"},"COPY"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"host(\ub85c\uceec)\uc5d0\uc11c\uc758 ",(0,a.kt)("inlineCode",{parentName:"strong"},""))," \uacbd\ub85c\uc758 \ud30c\uc77c \ud639\uc740 \ub514\ub809\ud1a0\ub9ac\ub97c ",(0,a.kt)("strong",{parentName:"p"},"container \ub0b4\ubd80\uc5d0\uc11c\uc758 ",(0,a.kt)("inlineCode",{parentName:"strong"},""))," \uacbd\ub85c\uc5d0 \ubcf5\uc0ac\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"COPY ... \n\n# \uc608\uc2dc\nCOPY a.txt /some-directory/b.txt\nCOPY my-directory /some-directory-2\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ADD")," \ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY")," \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc \ucd94\uac00\uc801\uc778 \uae30\ub2a5\uc744 \ud488\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# 1 - \ud638\uc2a4\ud2b8\uc5d0 \uc555\ucd95\ub418\uc5b4\uc788\ub294 \ud30c\uc77c\uc744 \ud480\uba74\uc11c \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\ub85c copy \ud560 \uc218 \uc788\uc74c\nADD scripts.tar.gz /tmp\n# 2 - Remote URLs \uc5d0 \uc788\ub294 \ud30c\uc77c\uc744 \uc18c\uc2a4 \uacbd\ub85c\ub85c \uc9c0\uc815\ud560 \uc218 \uc788\uc74c\nADD http://www.example.com/script.sh /tmp\n\n# \uc704 \ub450 \uac00\uc9c0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \uacbd\uc6b0\uc5d0\ub9cc COPY \ub300\uc2e0 ADD \ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\n")),(0,a.kt)("h3",{id:"run"},"RUN"),(0,a.kt)("p",null,"\uba85\uc2dc\ud55c \ucee4\ub9e8\ub4dc\ub97c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc2e4\ud589\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 \ud574\ub2f9 \ucee4\ub9e8\ub4dc\ub4e4\uc774 \uc2e4\ud589\ub41c \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'RUN \nRUN ["executable-command", "parameter1", "parameter2"]\n\n# \uc608\uc2dc\nRUN pip install torch\nRUN pip install -r requirements.txt\n')),(0,a.kt)("h3",{id:"cmd"},"CMD"),(0,a.kt)("p",null,"\uba85\uc2dc\ud55c \ucee4\ub9e8\ub4dc\ub97c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uac00 ",(0,a.kt)("strong",{parentName:"p"},"\uc2dc\uc791\ub420 \ub54c"),", \uc2e4\ud589\ud558\ub294 \uac83\uc744 \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud558\ub294 \uba85\ub839\uc5b4\ub85c ",(0,a.kt)("strong",{parentName:"p"},"ENTRYPOINT")," \uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub458\uc758 \ucc28\uc774\uc5d0 \ub300\ud574\uc11c\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\ub4a4\uc5d0\uc11c")," \ub2e4\ub8f9\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\ub098\uc758 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\uc5d0\uc11c\ub294 \ud558\ub098\uc758 ",(0,a.kt)("strong",{parentName:"p"},"CMD")," \ub9cc \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"RUN")," \uba85\ub839\uc5b4\uc640 \ub2e4\ub985\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'CMD \nCMD ["executable-command", "parameter1", "parameter2"]\nCMD ["parameter1", "parameter2"] # ENTRYPOINT \uc640 \ud568\uaed8 \uc0ac\uc6a9\ub420 \ub54c\n\n# \uc608\uc2dc\nCMD python main.py\n')),(0,a.kt)("h3",{id:"workdir"},"WORKDIR"),(0,a.kt)("p",null,"\uc774\ud6c4 \ucd94\uac00\ub420 \uba85\ub839\uc5b4\ub97c \ucee8\ud14c\uc774\ub108 \ub0b4\uc758 \uc5b4\ub5a4 \ub514\ub809\ud1a0\ub9ac\uc5d0\uc11c \uc218\ud589\ud560 \uac83\uc778\uc9c0\ub97c \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \ud574\ub2f9 \ub514\ub809\ud1a0\ub9ac\uac00 \uc5c6\ub2e4\uba74 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"WORKDIR /path/to/workdir\n\n# \uc608\uc2dc\nWORKDIR /home/demo\nRUN pwd # /home/demo \uac00 \ucd9c\ub825\ub428\n")),(0,a.kt)("h3",{id:"env"},"ENV"),(0,a.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc9c0\uc18d\uc801\uc73c\ub85c \uc0ac\uc6a9\ub420 environment variable \uc758 \uac12\uc744 \uc124\uc815\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"ENV \nENV =\n\n# \uc608\uc2dc\n# default \uc5b8\uc5b4 \uc124\uc815\nRUN locale-gen ko_KR.UTF-8\nENV LANG ko_KR.UTF-8\nENV LANGUAGE ko_KR.UTF-8\nENV LC_ALL ko_KR.UTF-8\n")),(0,a.kt)("h3",{id:"expose"},"EXPOSE"),(0,a.kt)("p",null,"\ucee8\ud14c\uc774\ub108\uc5d0\uc11c \ub6ab\uc5b4\uc904 \ud3ec\ud2b8/\ud504\ub85c\ud1a0\ucf5c\uc744 \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("inlineCode",{parentName:"p"},"")," \uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 TCP \uac00 \ub514\ud3f4\ud2b8\ub85c \uc124\uc815\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"EXPOSE \nEXPOSE /\n\n# \uc608\uc2dc\nEXPOSE 8080\n")),(0,a.kt)("h2",{id:"3-\uac04\ub2e8\ud55c-dockerfile-\uc791\uc131\ud574\ubcf4\uae30"},"3. \uac04\ub2e8\ud55c Dockerfile \uc791\uc131\ud574\ubcf4\uae30"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"vim Dockerfile")," \ud639\uc740 vscode \ub4f1 \ubcf8\uc778\uc774 \uc0ac\uc6a9\ud558\ub294 \ud3b8\uc9d1\uae30\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \uc744 \uc5f4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud574\uc90d\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# base image \ub97c ubuntu 18.04 \ub85c \uc124\uc815\ud569\ub2c8\ub2e4.\nFROM ubuntu:18.04\n\n# apt-get update \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.\nRUN apt-get update\n\n# TEST env var\uc758 \uac12\uc744 hello \ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4.\nENV TEST hello\n\n# DOCKER CONTAINER \uac00 \uc2dc\uc791\ub420 \ub54c, \ud658\uacbd\ubcc0\uc218 TEST \uc758 \uac12\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.\nCMD echo $TEST\n")),(0,a.kt)("h2",{id:"4-docker-build-from-dockerfile"},"4. Docker build from Dockerfile"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"docker build")," \uba85\ub839\uc5b4\ub85c Dockerfile \ub85c\ubd80\ud130 Docker Image \ub97c \ub9cc\ub4e4\uc5b4\ubd05\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker build --help\n")),(0,a.kt)("p",null,"Dockerfile \uc774 \uc788\ub294 \uacbd\ub85c\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -t my-image:v1.0.0 .\n")),(0,a.kt)("p",null,"\uc704 \ucee4\ub9e8\ub4dc\ub97c \uc124\uba85\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},".")," : ",(0,a.kt)("strong",{parentName:"li"},"\ud604\uc7ac \uacbd\ub85c"),"\uc5d0 \uc788\ub294 Dockerfile \ub85c\ubd80\ud130"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-t")," : my-image \ub77c\ub294 ",(0,a.kt)("strong",{parentName:"li"},"\uc774\ub984"),"\uacfc v1.0.0 \uc774\ub77c\ub294 ",(0,a.kt)("strong",{parentName:"li"},"\ud0dc\uadf8"),"\ub85c ",(0,a.kt)("strong",{parentName:"li"},"\uc774\ubbf8\uc9c0"),"\ub97c"),(0,a.kt)("li",{parentName:"ul"},"\ube4c\ub4dc\ud558\uaca0\ub2e4\ub77c\ub294 \uba85\ub839\uc5b4")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc774\ubbf8\uc9c0 \ube4c\ub4dc\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"# grep : my-image \uac00 \uc788\ub294\uc9c0\ub97c \uc7a1\uc544\ub0b4\ub294 (grep) \ud558\ub294 \uba85\ub839\uc5b4\ndocker images | grep my-image\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"my-image v1.0.0 143114710b2d 3 seconds ago 87.9MB\n")),(0,a.kt)("h2",{id:"5-docker-run-from-dockerfile"},"5. Docker run from Dockerfile"),(0,a.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \ubc29\uae08 \ube4c\ub4dc\ud55c ",(0,a.kt)("inlineCode",{parentName:"p"},"my-image:v1.0.0")," \uc774\ubbf8\uc9c0\ub85c docker \ucee8\ud14c\uc774\ub108\ub97c ",(0,a.kt)("strong",{parentName:"p"},"run")," \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run my-image:v1.0.0\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"hello\n")),(0,a.kt)("h2",{id:"6-docker-run-with-env"},"6. Docker run with env"),(0,a.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 \ubc29\uae08 \ube4c\ub4dc\ud55c ",(0,a.kt)("inlineCode",{parentName:"p"},"my-image:v1.0.0")," \uc774\ubbf8\uc9c0\ub97c \uc2e4\ud589\ud558\ub294 \uc2dc\uc810\uc5d0, ",(0,a.kt)("inlineCode",{parentName:"p"},"TEST")," env var \uc758 \uac12\uc744 \ubcc0\uacbd\ud558\uc5ec docker \ucee8\ud14c\uc774\ub108\ub97c run \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -e TEST=bye my-image:v1.0.0\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"bye\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c07e8a62.ea1ea215.js b/assets/js/c07e8a62.ea1ea215.js deleted file mode 100644 index f28649a0..00000000 --- a/assets/js/c07e8a62.ea1ea215.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1800],{3905:(e,t,r)=>{r.d(t,{Zo:()=>k,kt:()=>s});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},k=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,k=i(e,["components","mdxType","originalType","parentName"]),m=c(r),u=a,s=m["".concat(p,".").concat(u)]||m[u]||d[u]||l;return r?n.createElement(s,o(o({ref:t},k),{},{components:r})):n.createElement(s,o({ref:t},k))}));function s(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[m]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const l={title:"[Practice] Docker images",description:"Practice to use docker image.",sidebar_position:5,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/images",id:"version-1.0/prerequisites/docker/images",title:"[Practice] Docker images",description:"Practice to use docker image.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/images.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/images",permalink:"/docs/1.0/prerequisites/docker/images",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/images.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"[Practice] Docker images",description:"Practice to use docker image.",sidebar_position:5,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"[Practice] Docker command",permalink:"/docs/1.0/prerequisites/docker/command"},next:{title:"[Practice] Docker Advanced",permalink:"/docs/1.0/prerequisites/docker/advanced"}},p={},c=[{value:"1. Dockerfile \ub9cc\ub4e4\uae30",id:"1-dockerfile-\ub9cc\ub4e4\uae30",level:2},{value:"2. Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4",id:"2-dockerfile-\ub0b4\uc7a5-\uba85\ub839\uc5b4",level:2},{value:"FROM",id:"from",level:3},{value:"COPY",id:"copy",level:3},{value:"RUN",id:"run",level:3},{value:"CMD",id:"cmd",level:3},{value:"WORKDIR",id:"workdir",level:3},{value:"ENV",id:"env",level:3},{value:"EXPOSE",id:"expose",level:3},{value:"3. \uac04\ub2e8\ud55c Dockerfile \uc791\uc131\ud574\ubcf4\uae30",id:"3-\uac04\ub2e8\ud55c-dockerfile-\uc791\uc131\ud574\ubcf4\uae30",level:2},{value:"4. Docker build from Dockerfile",id:"4-docker-build-from-dockerfile",level:2},{value:"5. Docker run from Dockerfile",id:"5-docker-run-from-dockerfile",level:2},{value:"6. Docker run with env",id:"6-docker-run-with-env",level:2}],k={toc:c},m="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(m,(0,n.Z)({},k,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-dockerfile-\ub9cc\ub4e4\uae30"},"1. Dockerfile \ub9cc\ub4e4\uae30"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4dc\ub294 \uac00\uc7a5 \uc26c\uc6b4 \ubc29\ubc95\uc740 \ub3c4\ucee4\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf\uc778 Dockerfile\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\uc678\uc5d0\ub294 running container \ub97c docker image \ub85c \ub9cc\ub4dc\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker commit")," \ub4f1\uc744 \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\uc790\uac00 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub3c4\ub85d, \uc81c\uacf5\ud558\ub294 \ud15c\ud50c\ub9bf"),(0,a.kt)("li",{parentName:"ul"},"\ud30c\uc77c\uba85\uc740 \uaf2d ",(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile")," \uc774 \uc544\ub2c8\uc5b4\ub3c4 \uc0c1\uad00\uc5c6\uc9c0\ub9cc, ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build")," \uc218\ud589 \uc2dc, default \ub85c \uc0ac\uc6a9\ud558\ub294 \ud30c\uc77c\uba85\uc774 ",(0,a.kt)("inlineCode",{parentName:"li"},"Dockerfile")," \uc785\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ul"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4dc\ub294 ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build")," \ub97c \uc218\ud589\ud560 \ub54c, ",(0,a.kt)("inlineCode",{parentName:"li"},"-f")," \uc635\uc158\uc744 \uc8fc\uba74 \ub2e4\ub978 \ud30c\uc77c\uba85\uc73c\ub85c\ub3c4 \uc0ac\uc6a9 \uac00\ub2a5\ud569\ub2c8\ub2e4.",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"ex) ",(0,a.kt)("inlineCode",{parentName:"li"},"docker build -f dockerfile-asdf .")," \ub3c4 \uac00\ub2a5")))))),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc2e4\uc2b5\uc744 \uc704\ud574\uc11c \ud3b8\ud55c \ub514\ub809\ud1a0\ub9ac\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd \n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"docker-practice \ub77c\ub294 \uc774\ub984\uc758 \ud3f4\ub354\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir docker-practice\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"docker-practice \ud3f4\ub354\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd docker-practice\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Dockerfile \uc774\ub77c\ub294 \ube48 \ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"touch Dockerfile\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n")))),(0,a.kt)("h2",{id:"2-dockerfile-\ub0b4\uc7a5-\uba85\ub839\uc5b4"},"2. Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4"),(0,a.kt)("p",null,"Dockerfile \uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ubcf8\uc801\uc778 \uba85\ub839\uc5b4\uc5d0 \ub300\ud574\uc11c \ud558\ub098\uc529 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"from"},"FROM"),(0,a.kt)("p",null,"Dockerfile \uc774 base image \ub85c \uc5b4\ub5a0\ud55c \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud560 \uac83\uc778\uc9c0\ub97c \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c, \uc544\ubb34\uac83\ub3c4 \uc5c6\ub294 \ube48 \ud658\uacbd\uc5d0\uc11c\ubd80\ud130 \ud558\ub098\ud558\ub098\uc529 \uc81c\uac00 \uc758\ub3c4\ud55c \ud658\uacbd\uc744 \ub9cc\ub4e4\uc5b4\uac00\ub294\uac8c \uc544\ub2c8\ub77c, python 3.9 \ubc84\uc804\uc774 \uc124\uce58\ub41c \ud658\uacbd\uc744 \ubca0\uc774\uc2a4\ub85c\ud574\ub450\uace0, \uc800\ub294 pytorch \ub97c \uc124\uce58\ud558\uace0, \uc81c \uc18c\uc2a4\ucf54\ub4dc\ub9cc \ub123\uc5b4\ub450\ub294 \ud615\ud0dc\ub85c \ud65c\uc6a9\ud560 \uc218\uac00 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \uacbd\uc6b0\uc5d0\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"python:3.9"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"python-3.9-alpine"),", ... \ub4f1\uc758 \uc798 \ub9cc\ub4e4\uc5b4\uc9c4 \uc774\ubbf8\uc9c0\ub97c \ubca0\uc774\uc2a4\ub85c \ud65c\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"FROM [:] [AS ]\n\n# \uc608\uc2dc\nFROM ubuntu\nFROM ubuntu:18.04\nFROM nginx:latest AS ngx\n")),(0,a.kt)("h3",{id:"copy"},"COPY"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"host(\ub85c\uceec)\uc5d0\uc11c\uc758 ",(0,a.kt)("inlineCode",{parentName:"strong"},""))," \uacbd\ub85c\uc758 \ud30c\uc77c \ud639\uc740 \ub514\ub809\ud1a0\ub9ac\ub97c ",(0,a.kt)("strong",{parentName:"p"},"container \ub0b4\ubd80\uc5d0\uc11c\uc758 ",(0,a.kt)("inlineCode",{parentName:"strong"},""))," \uacbd\ub85c\uc5d0 \ubcf5\uc0ac\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"COPY ... \n\n# \uc608\uc2dc\nCOPY a.txt /some-directory/b.txt\nCOPY my-directory /some-directory-2\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ADD")," \ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY")," \uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc \ucd94\uac00\uc801\uc778 \uae30\ub2a5\uc744 \ud488\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# 1 - \ud638\uc2a4\ud2b8\uc5d0 \uc555\ucd95\ub418\uc5b4\uc788\ub294 \ud30c\uc77c\uc744 \ud480\uba74\uc11c \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\ub85c copy \ud560 \uc218 \uc788\uc74c\nADD scripts.tar.gz /tmp\n# 2 - Remote URLs \uc5d0 \uc788\ub294 \ud30c\uc77c\uc744 \uc18c\uc2a4 \uacbd\ub85c\ub85c \uc9c0\uc815\ud560 \uc218 \uc788\uc74c\nADD http://www.example.com/script.sh /tmp\n\n# \uc704 \ub450 \uac00\uc9c0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc744 \uacbd\uc6b0\uc5d0\ub9cc COPY \ub300\uc2e0 ADD \ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\n")),(0,a.kt)("h3",{id:"run"},"RUN"),(0,a.kt)("p",null,"\uba85\uc2dc\ud55c \ucee4\ub9e8\ub4dc\ub97c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc2e4\ud589\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 \ud574\ub2f9 \ucee4\ub9e8\ub4dc\ub4e4\uc774 \uc2e4\ud589\ub41c \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'RUN \nRUN ["executable-command", "parameter1", "parameter2"]\n\n# \uc608\uc2dc\nRUN pip install torch\nRUN pip install -r requirements.txt\n')),(0,a.kt)("h3",{id:"cmd"},"CMD"),(0,a.kt)("p",null,"\uba85\uc2dc\ud55c \ucee4\ub9e8\ub4dc\ub97c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uac00 ",(0,a.kt)("strong",{parentName:"p"},"\uc2dc\uc791\ub420 \ub54c"),", \uc2e4\ud589\ud558\ub294 \uac83\uc744 \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud558\ub294 \uba85\ub839\uc5b4\ub85c ",(0,a.kt)("strong",{parentName:"p"},"ENTRYPOINT")," \uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub458\uc758 \ucc28\uc774\uc5d0 \ub300\ud574\uc11c\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\ub4a4\uc5d0\uc11c")," \ub2e4\ub8f9\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\ub098\uc758 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\uc5d0\uc11c\ub294 \ud558\ub098\uc758 ",(0,a.kt)("strong",{parentName:"p"},"CMD")," \ub9cc \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"RUN")," \uba85\ub839\uc5b4\uc640 \ub2e4\ub985\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'CMD \nCMD ["executable-command", "parameter1", "parameter2"]\nCMD ["parameter1", "parameter2"] # ENTRYPOINT \uc640 \ud568\uaed8 \uc0ac\uc6a9\ub420 \ub54c\n\n# \uc608\uc2dc\nCMD python main.py\n')),(0,a.kt)("h3",{id:"workdir"},"WORKDIR"),(0,a.kt)("p",null,"\uc774\ud6c4 \ucd94\uac00\ub420 \uba85\ub839\uc5b4\ub97c \ucee8\ud14c\uc774\ub108 \ub0b4\uc758 \uc5b4\ub5a4 \ub514\ub809\ud1a0\ub9ac\uc5d0\uc11c \uc218\ud589\ud560 \uac83\uc778\uc9c0\ub97c \uba85\uc2dc\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \ud574\ub2f9 \ub514\ub809\ud1a0\ub9ac\uac00 \uc5c6\ub2e4\uba74 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"WORKDIR /path/to/workdir\n\n# \uc608\uc2dc\nWORKDIR /home/demo\nRUN pwd # /home/demo \uac00 \ucd9c\ub825\ub428\n")),(0,a.kt)("h3",{id:"env"},"ENV"),(0,a.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc9c0\uc18d\uc801\uc73c\ub85c \uc0ac\uc6a9\ub420 environment variable \uc758 \uac12\uc744 \uc124\uc815\ud558\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"ENV \nENV =\n\n# \uc608\uc2dc\n# default \uc5b8\uc5b4 \uc124\uc815\nRUN locale-gen ko_KR.UTF-8\nENV LANG ko_KR.UTF-8\nENV LANGUAGE ko_KR.UTF-8\nENV LC_ALL ko_KR.UTF-8\n")),(0,a.kt)("h3",{id:"expose"},"EXPOSE"),(0,a.kt)("p",null,"\ucee8\ud14c\uc774\ub108\uc5d0\uc11c \ub6ab\uc5b4\uc904 \ud3ec\ud2b8/\ud504\ub85c\ud1a0\ucf5c\uc744 \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("inlineCode",{parentName:"p"},"")," \uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 TCP \uac00 \ub514\ud3f4\ud2b8\ub85c \uc124\uc815\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"EXPOSE \nEXPOSE /\n\n# \uc608\uc2dc\nEXPOSE 8080\n")),(0,a.kt)("h2",{id:"3-\uac04\ub2e8\ud55c-dockerfile-\uc791\uc131\ud574\ubcf4\uae30"},"3. \uac04\ub2e8\ud55c Dockerfile \uc791\uc131\ud574\ubcf4\uae30"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"vim Dockerfile")," \ud639\uc740 vscode \ub4f1 \ubcf8\uc778\uc774 \uc0ac\uc6a9\ud558\ub294 \ud3b8\uc9d1\uae30\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \uc744 \uc5f4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud574\uc90d\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# base image \ub97c ubuntu 18.04 \ub85c \uc124\uc815\ud569\ub2c8\ub2e4.\nFROM ubuntu:18.04\n\n# apt-get update \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.\nRUN apt-get update\n\n# TEST env var\uc758 \uac12\uc744 hello \ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4.\nENV TEST hello\n\n# DOCKER CONTAINER \uac00 \uc2dc\uc791\ub420 \ub54c, \ud658\uacbd\ubcc0\uc218 TEST \uc758 \uac12\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.\nCMD echo $TEST\n")),(0,a.kt)("h2",{id:"4-docker-build-from-dockerfile"},"4. Docker build from Dockerfile"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"docker build")," \uba85\ub839\uc5b4\ub85c Dockerfile \ub85c\ubd80\ud130 Docker Image \ub97c \ub9cc\ub4e4\uc5b4\ubd05\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker build --help\n")),(0,a.kt)("p",null,"Dockerfile \uc774 \uc788\ub294 \uacbd\ub85c\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker build -t my-image:v1.0.0 .\n")),(0,a.kt)("p",null,"\uc704 \ucee4\ub9e8\ub4dc\ub97c \uc124\uba85\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},".")," : ",(0,a.kt)("strong",{parentName:"li"},"\ud604\uc7ac \uacbd\ub85c"),"\uc5d0 \uc788\ub294 Dockerfile \ub85c\ubd80\ud130"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-t")," : my-image \ub77c\ub294 ",(0,a.kt)("strong",{parentName:"li"},"\uc774\ub984"),"\uacfc v1.0.0 \uc774\ub77c\ub294 ",(0,a.kt)("strong",{parentName:"li"},"\ud0dc\uadf8"),"\ub85c ",(0,a.kt)("strong",{parentName:"li"},"\uc774\ubbf8\uc9c0"),"\ub97c"),(0,a.kt)("li",{parentName:"ul"},"\ube4c\ub4dc\ud558\uaca0\ub2e4\ub77c\ub294 \uba85\ub839\uc5b4")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc774\ubbf8\uc9c0 \ube4c\ub4dc\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"# grep : my-image \uac00 \uc788\ub294\uc9c0\ub97c \uc7a1\uc544\ub0b4\ub294 (grep) \ud558\ub294 \uba85\ub839\uc5b4\ndocker images | grep my-image\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"my-image v1.0.0 143114710b2d 3 seconds ago 87.9MB\n")),(0,a.kt)("h2",{id:"5-docker-run-from-dockerfile"},"5. Docker run from Dockerfile"),(0,a.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \ubc29\uae08 \ube4c\ub4dc\ud55c ",(0,a.kt)("inlineCode",{parentName:"p"},"my-image:v1.0.0")," \uc774\ubbf8\uc9c0\ub85c docker \ucee8\ud14c\uc774\ub108\ub97c ",(0,a.kt)("strong",{parentName:"p"},"run")," \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run my-image:v1.0.0\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"hello\n")),(0,a.kt)("h2",{id:"6-docker-run-with-env"},"6. Docker run with env"),(0,a.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 \ubc29\uae08 \ube4c\ub4dc\ud55c ",(0,a.kt)("inlineCode",{parentName:"p"},"my-image:v1.0.0")," \uc774\ubbf8\uc9c0\ub97c \uc2e4\ud589\ud558\ub294 \uc2dc\uc810\uc5d0, ",(0,a.kt)("inlineCode",{parentName:"p"},"TEST")," env var \uc758 \uac12\uc744 \ubcc0\uacbd\ud558\uc5ec docker \ucee8\ud14c\uc774\ub108\ub97c run \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -e TEST=bye my-image:v1.0.0\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub41c\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"bye\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c1115317.22c55ab3.js b/assets/js/c1115317.22c55ab3.js new file mode 100644 index 00000000..3c4db9ed --- /dev/null +++ b/assets/js/c1115317.22c55ab3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6639],{3905:(e,t,n)=>{n.d(t,{Zo:()=>k,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},k=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,k=i(e,["components","mdxType","originalType","parentName"]),d=c(n),u=a,m=d["".concat(p,".").concat(u)]||d[u]||s[u]||l;return n?r.createElement(m,o(o({ref:t},k),{},{components:n})):r.createElement(m,o({ref:t},k))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>s,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const l={title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",sidebar_position:6,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/advanced",id:"version-1.0/prerequisites/docker/advanced",title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/advanced.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/advanced",permalink:"/docs/1.0/prerequisites/docker/advanced",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/advanced.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",sidebar_position:6,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"[Practice] Docker images",permalink:"/docs/1.0/prerequisites/docker/images"}},p={},c=[{value:"\ub3c4\ucee4 \uc774\ubbf8\uc9c0 \uc798 \ub9cc\ub4e4\uae30",id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0-\uc798-\ub9cc\ub4e4\uae30",level:2},{value:"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uace0\ub824\ud574\uc57c \ub420 \uc810",id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0\ub97c-\ub9cc\ub4e4-\ub54c-\uace0\ub824\ud574\uc57c-\ub420-\uc810",level:3},{value:"ENTRYPOINT vs CMD",id:"entrypoint-vs-cmd",level:3},{value:"Docker tag \uc774\ub984 \uc9d3\uae30",id:"docker-tag-\uc774\ub984-\uc9d3\uae30",level:3},{value:"ETC",id:"etc",level:3},{value:"docker run \uc758 \ub2e4\uc591\ud55c \uc635\uc158",id:"docker-run-\uc758-\ub2e4\uc591\ud55c-\uc635\uc158",level:2},{value:"docker run with volume",id:"docker-run-with-volume",level:3},{value:"Docker volume",id:"docker-volume",level:4},{value:"Bind mount",id:"bind-mount",level:4},{value:"How to use?",id:"how-to-use",level:4},{value:"docker run with resource limit",id:"docker-run-with-resource-limit",level:3},{value:"docker run with restart policy",id:"docker-run-with-restart-policy",level:3},{value:"docker run as a background process",id:"docker-run-as-a-background-process",level:3},{value:"First Practice",id:"first-practice",level:4},{value:"Second Practice",id:"second-practice",level:4},{value:"Third Practice",id:"third-practice",level:4},{value:"References",id:"references",level:2}],k={toc:c},d="wrapper";function s(e){let{components:t,...l}=e;return(0,a.kt)(d,(0,r.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0-\uc798-\ub9cc\ub4e4\uae30"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0 \uc798 \ub9cc\ub4e4\uae30"),(0,a.kt)("h3",{id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0\ub97c-\ub9cc\ub4e4-\ub54c-\uace0\ub824\ud574\uc57c-\ub420-\uc810"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uace0\ub824\ud574\uc57c \ub420 \uc810"),(0,a.kt)("p",null,"Dockerfile \uc744 \ud65c\uc6a9\ud558\uc5ec \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c\ub294 \uba85\ub839\uc5b4\uc758 ",(0,a.kt)("strong",{parentName:"p"},"\uc21c\uc11c"),"\uac00 \uc911\uc694\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8 \uc774\uc720\ub294 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 \uc5ec\ub7ec \uac1c\uc758 Read-Only Layer \ub85c \uad6c\uc131\ub418\uc5b4\uc788\uace0, \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud560 \ub54c \uc774\ubbf8 \uc874\uc7ac\ud558\ub294 \ub808\uc774\uc5b4\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\uce90\uc2dc\ub418\uc5b4")," \uc7ac\uc0ac\uc6a9\ub418\uae30 \ub54c\ubb38\uc5d0, \uc774\ub97c \uc0dd\uac01\ud574\uc11c Dockerfile \uc744 \uad6c\uc131\ud55c\ub2e4\uba74 ",(0,a.kt)("strong",{parentName:"p"},"\ube4c\ub4dc \uc2dc\uac04\uc744 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,a.kt)("p",null,"Dockerfile\uc5d0\uc11c ",(0,a.kt)("inlineCode",{parentName:"p"},"RUN"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"ADD"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY")," \uba85\ub839\uc5b4 \ud558\ub098\uac00 \ud558\ub098\uc758 \ub808\uc774\uc5b4\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Layer 1\nFROM ubuntu:latest\n\n# Layer 2\nRUN apt-get update && apt-get install python3 pip3 -y\n\n# Layer 3\nRUN pip3 install -U pip && pip3 install torch\n\n# Layer 4\nCOPY src/ src/\n\n# Layer 5\nCMD python src/app.py\n")),(0,a.kt)("p",null,"\uc704\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\ub85c \ube4c\ub4dc\ub41c \uc774\ubbf8\uc9c0\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run -it app:latest /bin/bash")," \uba85\ub839\uc5b4\ub85c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ub808\uc774\uc5b4\ub85c \ud45c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"layers.png",src:n(3116).Z,width:"1080",height:"612"})),(0,a.kt)("p",null,"\ucd5c\uc0c1\ub2e8\uc758 R/W Layer \ub294 \uc774\ubbf8\uc9c0\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc989, \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc791\uc5c5\ud55c \ub0b4\uc5ed\uc740 \ubaa8\ub450 \ud718\ubc1c\uc131\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ud558\ub2e8\uc758 \ub808\uc774\uc5b4\uac00 \ubcc0\uacbd\ub418\uba74, \uadf8 \uc704\uc758 \ub808\uc774\uc5b4\ub294 \ubaa8\ub450 \uc0c8\ub85c \ube4c\ub4dc\ub429\ub2c8\ub2e4. \uadf8\ub798\uc11c Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4\uc758 \uc21c\uc11c\uac00 \uc911\uc694\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uba74, ",(0,a.kt)("strong",{parentName:"p"},"\uc790\uc8fc \ubcc0\uacbd"),"\ub418\ub294 \ubd80\ubd84\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ucd5c\ub300\ud55c \ub4a4\ucabd\uc73c\ub85c")," \uc815\ub82c\ud558\ub294 \uac83\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4. (ex. ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY src/ app/src/"),")"),(0,a.kt)("p",null,"\uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \ubc18\ub300\ub85c \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294 \ubd80\ubd84\uc740 \ucd5c\ub300\ud55c \uc55e\ucabd\uc73c\ub85c \uc815\ub82c\ud558\ub294\uac8c \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ub9cc\uc57d \uac70\uc758 ",(0,a.kt)("strong",{parentName:"p"},"\ubcc0\uacbd\ub418\uc9c0 \uc54a\uc9c0\ub9cc"),", \uc5ec\ub7ec \uacf3\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\uc790\uc8fc")," \uc4f0\uc774\ub294 \ubd80\ubd84\uc744 \uacf5\ud1b5\ud654\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\n\ud574\ub2f9 \uacf5\ud1b5\ubd80\ubd84\ub9cc \ubb36\uc5b4\uc11c \ubcc4\ub3c4\uc758 \uc774\ubbf8\uc9c0\ub294 \ubbf8\ub9ac \ub9cc\ub4e4\uc5b4\ub454 \ub2e4\uc74c, ",(0,a.kt)("strong",{parentName:"p"},"\ubca0\uc774\uc2a4 \uc774\ubbf8\uc9c0")," \ub85c \ud65c\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \ub2e4\ub978 \uac74 \uac70\uc758 \ub611\uac19\uc740\ub370, tensorflow-cpu \ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\ubbf8\uc9c0\uc640, tensorflow-gpu \ub97c \uc0ac\uc6a9\ud558\ub294 \ud658\uacbd\uc744 \ubd84\ub9ac\ud574\uc11c \uc774\ubbf8\uc9c0\ub85c \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","python \uacfc \uae30\ud0c0 \uae30\ubcf8\uc801\uc778 \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub41c ",(0,a.kt)("a",{parentName:"p",href:"http://ghcr.io/makinarocks/python:3.8-base-cpu"},(0,a.kt)("inlineCode",{parentName:"a"},"ghcr.io/makinarocks/python:3.8-base"))," \ub97c \ub9cc\ub4e4\uc5b4\ub450\uace0, ",(0,a.kt)("strong",{parentName:"p"},"tensorflow cpu \ubc84\uc804\uacfc gpu \ubc84\uc804\uc774")," \uc124\uce58\ub41c \uc774\ubbf8\uc9c0 \uc0c8\ub85c \ub9cc\ub4e4\ub54c\ub294, \uc704\uc758 \uc774\ubbf8\uc9c0\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"FROM")," \uc73c\ub85c \ubd88\ub7ec\uc628 \ub2e4\uc74c, tensorflow install \ud558\ub294 \ubd80\ubd84\ub9cc \ubcc4\ub3c4\ub85c \uc791\uc131\ud574\uc11c Dockerfile \uc744 2 \uac1c\ub85c \uad00\ub9ac\ud55c\ub2e4\uba74 \uac00\ub3c5\uc131\ub3c4 \uc88b\uace0 \ube4c\ub4dc \uc2dc\uac04\ub3c4 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\ud569\uce60 \uc218 \uc788\ub294 Layer \ub294 \ud569\uce58\ub294 \uac83"),"\uc774 Old version \uc758 \ub3c4\ucee4\uc5d0\uc11c\ub294 \uc131\ub2a5 \ud5a5\uc0c1 \ud6a8\uacfc\ub97c \uc774\ub04c\uc5c8\uc2b5\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\uc758 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uac00 \uc5b4\ub5a4 \ub3c4\ucee4 \ubc84\uc804\uc5d0\uc11c \uc2e4\ud589\ub420 \uac83\uc778\uc9c0 \ubcf4\uc7a5\ud560 \uc218 \uc5c6\uc73c\uba70, ",(0,a.kt)("strong",{parentName:"p"},"\uac00\ub3c5\uc131"),"\uc744 \uc704\ud574\uc11c\ub3c4 \ud569\uce60 \uc218 \uc788\ub294 Layer \ub294 \uc801\uc808\ud788 \ud569\uce58\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ub41c ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Bad Case\nRUN apt-get update\nRUN apt-get install build-essential -y\nRUN apt-get install curl -y\nRUN apt-get install jq -y\nRUN apt-get install git -y\n")),(0,a.kt)("p",null,"\uc774\ub97c \uc544\ub798\uc640 \uac19\uc774 \ud569\uccd0\uc11c \uc801\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Better Case\nRUN apt-get update && \\\n apt-get install -y \\\n build-essential \\\n curl \\\n jq \\\n git\n")),(0,a.kt)("p",null,"\ud3b8\uc758\ub97c \uc704\ud574\uc11c\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},".dockerignore")," \ub3c4 \uc0ac\uc6a9\ud558\ub294\uac8c \uc88b\uc2b5\ub2c8\ub2e4.\n",(0,a.kt)("inlineCode",{parentName:"p"},".dockerignore"),"\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},".gitignore")," \uc640 \ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud55c\ub2e4\uace0 \uc774\ud574\ud558\uba74 \ub429\ub2c8\ub2e4. (git add \ud560 \ub54c \uc81c\uc678\ud560 \uc218 \uc788\ub4ef\uc774, docker build \ud560 \ub54c \uc790\ub3d9\uc73c\ub85c \uc81c\uc678)"),(0,a.kt)("p",null,"\ub354 \ub9ce\uc740 \uc815\ubcf4\ub294 ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/develop/develop-images/dockerfile_best-practices/"},"Docker \uacf5\uc2dd \ubb38\uc11c"),"\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"entrypoint-vs-cmd"},"ENTRYPOINT vs CMD"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc640 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," \ub294 \ubaa8\ub450 \ucee8\ud14c\uc774\ub108\uc758 \uc2e4\ud589 \uc2dc\uc810\uc5d0\uc11c \uc5b4\ub5a4 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\uc2dc\ud0a4\uace0 \uc2f6\uc744 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \uc774 \ub458 \uc911 \ud558\ub098\ub294 \ubc18\ub4dc\uc2dc \uc874\uc7ac\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\ucc28\uc774\uc810"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CMD"),": docker run \uc744 \uc218\ud589\ud560 \ub54c, \uc27d\uac8c \ubcc0\uacbd\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc74c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENTRYPOINT"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"--entrypoint")," \ub97c \uc0ac\uc6a9\ud574\uc57c \ubcc0\uacbd\ud560 \uc218 \uc788\uc74c")))),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc640 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," \uac00 \ud568\uaed8 \uc4f0\uc77c \ub54c\ub294 \ubcf4\ud1b5 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD"),"\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc5d0\uc11c \uc801\uc740 \uba85\ub839\uc758 arguments(parameters) \ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'FROM ubuntu:latest\n\n# \uc544\ub798 4 \uac00\uc9c0 option \uc744 \ubc14\uafd4\uac00\uba70 \uc9c1\uc811 \ud14c\uc2a4\ud2b8\ud574\ubcf4\uc2dc\uba74 \uc774\ud574\ud558\uae30 \ud3b8\ud569\ub2c8\ub2e4.\n# \ub2e8, NO ENTRYPOINT \uc635\uc158\uc740 base image \uc778 ubuntu:latest \uc5d0 \uc774\ubbf8 \uc788\uc5b4\uc11c \ud14c\uc2a4\ud2b8\ud574\ubcfc \uc218\ub294 \uc5c6\uace0 \ub098\uba38\uc9c0 v2, 3, 5, 6, 8, 9, 11, 12 \ub97c \ud14c\uc2a4\ud2b8\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n# ENTRYPOINT echo "Hello ENTRYPOINT"\n# ENTRYPOINT ["echo", "Hello ENTRYPOINT"]\n# CMD echo "Hello CMD"\n# CMD ["echo", "Hello CMD"]\n')),(0,a.kt)("p",null,"\uc704\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc5d0\uc11c \uc8fc\uc11d\uc73c\ub85c \ud45c\uc2dc\ub41c \ubd80\ubd84\ub4e4\uc744 \ud574\uc81c\ud558\uba70 \ube4c\ub4dc\ud558\uace0 \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null}),(0,a.kt)("th",{parentName:"tr",align:null},"No ENTRYPOINT"),(0,a.kt)("th",{parentName:"tr",align:null},"ENTRYPOINT a b"),(0,a.kt)("th",{parentName:"tr",align:null},"ENTRYPOINT ",'["a", "b"]'))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"NO CMD")),(0,a.kt)("td",{parentName:"tr",align:null},"Error!"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"CMD ",'["x", "y"]')),(0,a.kt)("td",{parentName:"tr",align:null},"x y"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b x y")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"CMD x y")),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c x y"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b /bin/sh -c x y")))),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"In Kubernetes pod",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENTRYPOINT")," \u2192 command"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CMD")," \u2192 args")))),(0,a.kt)("h3",{id:"docker-tag-\uc774\ub984-\uc9d3\uae30"},"Docker tag \uc774\ub984 \uc9d3\uae30"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\uc758 tag \ub85c ",(0,a.kt)("strong",{parentName:"p"},"latest \ub294 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uac83\uc744 \uad8c\uc7a5"),"\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\uc720\ub294 latest \ub294 default tag name \uc774\ubbc0\ub85c ",(0,a.kt)("strong",{parentName:"p"},"\uc758\ub3c4\uce58 \uc54a\uac8c overwritten")," \ub418\ub294 \uacbd\uc6b0\uac00 \ub108\ubb34 \ub9ce\uc774 \ubc1c\uc0dd\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ud558\ub098\uc758 \uc774\ubbf8\uc9c0\ub294 \ud558\ub098\uc758 \ud0dc\uadf8\ub97c \uac00\uc9d0(",(0,a.kt)("strong",{parentName:"p"},"uniqueness"),")\uc744 \ubcf4\uc7a5\ud574\uc57c \ucd94\ud6c4 Production \ub2e8\uacc4\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\ud611\uc5c5/\ub514\ubc84\uae45"),"\uc5d0 \uc6a9\uc774\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub0b4\uc6a9\uc740 \ub2e4\ub974\uc9c0\ub9cc, \ub3d9\uc77c\ud55c tag \ub97c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 \ucd94\ud6c4 dangling image \ub85c \ucde8\uae09\ub418\uc5b4 \uad00\ub9ac\ud558\uae30 \uc5b4\ub824\uc6cc\uc9d1\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","dangling image\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker images"),"\uc5d0\ub294 \ub098\uc624\uc9c0 \uc54a\uc9c0\ub9cc \uacc4\uc18d\ud574\uc11c \uc800\uc7a5\uc18c\ub97c \ucc28\uc9c0\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"etc"},"ETC"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"log \ub4f1\uc758 \uc815\ubcf4\ub294 container \ub0b4\ubd80\uac00 \uc544\ub2cc \uacf3\uc5d0 \ub530\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4.\ncontainer \ub0b4\ubd80\uc5d0\uc11c write \ud55c data \ub294 \uc5b8\uc81c\ub4e0\uc9c0 \uc0ac\ub77c\uc9c8 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ol"},"secret \ud55c \uc815\ubcf4, \ud658\uacbd(dev/prod) dependent \ud55c \uc815\ubcf4 \ub4f1\uc740 Dockerfile \uc5d0 \uc9c1\uc811 \uc801\ub294 \uac8c \uc544\ub2c8\ub77c, env var \ub610\ub294 .env config file \uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ol"},"Dockerfile ",(0,a.kt)("strong",{parentName:"li"},"linter")," \ub3c4 \uc874\uc7ac\ud558\ubbc0\ub85c, \ud611\uc5c5 \uc2dc\uc5d0\ub294 \ud65c\uc6a9\ud558\uba74 \uc88b\uc2b5\ub2c8\ub2e4.\n",(0,a.kt)("a",{parentName:"li",href:"https://github.com/hadolint/hadolint"},"https://github.com/hadolint/hadolint"))),(0,a.kt)("h2",{id:"docker-run-\uc758-\ub2e4\uc591\ud55c-\uc635\uc158"},"docker run \uc758 \ub2e4\uc591\ud55c \uc635\uc158"),(0,a.kt)("h3",{id:"docker-run-with-volume"},"docker run with volume"),(0,a.kt)("p",null,"Docker container \uc0ac\uc6a9 \uc2dc \ubd88\ud3b8\ud55c \uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.\n\ubc14\ub85c Docker\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Docker ",(0,a.kt)("strong",{parentName:"p"},"container \ub0b4\ubd80\uc5d0\uc11c \uc791\uc5c5\ud55c \ubaa8\ub4e0 \uc0ac\ud56d\uc740 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),"\n\uc774\uc720\ub294 Docker container \ub294 \uac01\uac01 \uaca9\ub9ac\ub41c \ud30c\uc77c\uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, ",(0,a.kt)("strong",{parentName:"p"},"\uc5ec\ub7ec docker container \ub07c\ub9ac \ub370\uc774\ud130\ub97c \uacf5\uc720\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.")),(0,a.kt)("p",null,"\uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574\uc11c Docker\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc740 ",(0,a.kt)("strong",{parentName:"p"},"2 \uac00\uc9c0"),"\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"storage.png",src:n(7229).Z,width:"501",height:"255"})),(0,a.kt)("h4",{id:"docker-volume"},"Docker volume"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"docker cli \ub97c \uc0ac\uc6a9\ud574 ",(0,a.kt)("inlineCode",{parentName:"li"},"volume")," \uc774\ub77c\ub294 \ub9ac\uc18c\uc2a4\ub97c \uc9c1\uc811 \uad00\ub9ac"),(0,a.kt)("li",{parentName:"ul"},"host \uc5d0\uc11c Docker area(",(0,a.kt)("inlineCode",{parentName:"li"},"/var/lib/docker"),") \uc544\ub798\uc5d0 \ud2b9\uc815 \ub514\ub809\ud1a0\ub9ac\ub97c \uc0dd\uc131\ud55c \ub2e4\uc74c, \ud574\ub2f9 \uacbd\ub85c\ub97c docker container \uc5d0 mount")),(0,a.kt)("h4",{id:"bind-mount"},"Bind mount"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"host \uc758 \ud2b9\uc815 \uacbd\ub85c\ub97c docker container \uc5d0 mount")),(0,a.kt)("h4",{id:"how-to-use"},"How to use?"),(0,a.kt)("p",null,"\uc0ac\uc6a9 \ubc29\uc2dd\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ub3d9\uc77c\ud55c \uc778\ud130\ud398\uc774\uc2a4"),"\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"-v")," \uc635\uc158\uc744 \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub2e4\ub9cc, volume \uc744 \uc0ac\uc6a9\ud560 \ub54c\uc5d0\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume create"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume ls"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume rm")," \ub4f1\uc744 \uc218\ud589\ud558\uc5ec \uc9c1\uc811 \uad00\ub9ac\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Docker volume"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run \\\n -v my_volume:/app \\\n nginx:latest\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Blind mount"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run \\\n -v /home/user/some/path:/app \\\n nginx:latest\n")))),(0,a.kt)("p",null,"\ub85c\uceec\uc5d0\uc11c \uac1c\ubc1c\ud560 \ub54c\ub294 bind mount \uac00 \ud3b8\ud558\uae34 \ud558\uc9c0\ub9cc, \ud658\uacbd\uc744 \uae54\ub054\ud558\uac8c \uc720\uc9c0\ud558\uace0 \uc2f6\ub2e4\uba74 docker volume \uc744 \uc0ac\uc6a9\ud558\uc5ec create, rm \uc744 \uba85\uc2dc\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uac83\ub3c4 \ud558\ub098\uc758 \ubc29\ubc95\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\ub3c4 \uacb0\uad6d docker \uc758 bind mount \ub97c \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-with-resource-limit"},"docker run with resource limit"),(0,a.kt)("p",null,"\uae30\ubcf8\uc801\uc73c\ub85c docker container \ub294 ",(0,a.kt)("strong",{parentName:"p"},"host OS \uc758 cpu, memory \uc790\uc6d0\uc744 fully \uc0ac\uc6a9"),"\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774\ub807\uac8c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 host OS \uc758 \uc790\uc6d0 \uc0c1\ud669\uc5d0 \ub530\ub77c\uc11c ",(0,a.kt)("strong",{parentName:"p"},"OOM")," \ub4f1\uc758 \uc774\uc288\ub85c docker container \uac00 \ube44\uc815\uc0c1\uc801\uc73c\ub85c \uc885\ub8cc\ub418\ub294 \uc0c1\ud669\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub7f0 \ubb38\uc81c\ub97c \ub2e4\ub8e8\uae30 \uc704\ud574 ",(0,a.kt)("strong",{parentName:"p"},"docker container \uc2e4\ud589 \uc2dc, cpu \uc640 memory \uc758 \uc0ac\uc6a9\ub7c9 \uc81c\ud55c"),"\uc744 \uac78 \uc218 \uc788\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"-m")," ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory"},"\uc635\uc158"),"\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d -m 512m --memory-reservation=256m --name 512-limit ubuntu sleep 3600\ndocker run -d -m 1g --memory-reservation=256m --name 1g-limit ubuntu sleep 3600\n")),(0,a.kt)("p",null,"\uc704\uc758 \ub3c4\ucee4\ub97c \uc2e4\ud589 \ud6c4 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker stats")," \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 \uc0ac\uc6a9\ub7c9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS\n4ea1258e2e09 1g-limit 0.00% 300KiB / 1GiB 0.03% 1kB / 0B 0B / 0B 1\n4edf94b9a3e5 512-limit 0.00% 296KiB / 512MiB 0.06% 1.11kB / 0B 0B / 0B 1\n")),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c pod \ub77c\ub294 \ub9ac\uc18c\uc2a4\uc5d0 cpu, memory \uc81c\ud55c\uc744 \uc904 \ub54c, \uc774 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-with-restart-policy"},"docker run with restart policy"),(0,a.kt)("p",null,"\ud2b9\uc815 \ucee8\ud14c\uc774\ub108\uac00 \uacc4\uc18d\ud574\uc11c running \uc0c1\ud0dc\ub97c \uc720\uc9c0\uc2dc\ucf1c\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc774\ub7f0 \uacbd\uc6b0\ub97c \uc704\ud574\uc11c \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uac00 \uc885\ub8cc\ub418\uc790\ub9c8\uc790 \ubc14\ub85c \uc7ac\uc0dd\uc131\uc744 \uc2dc\ub3c4\ud560 \uc218 \uc788\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"--restart=always")," \uc635\uc158\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc635\uc158 \uc785\ub825 \ud6c4 \ub3c4\ucee4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run --restart=always ubuntu\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"watch -n1 docker ps"),"\ub97c \ud1b5\ud574 \uc7ac\uc2e4\ud589\uc774 \ub418\uace0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.\n\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uace0 \uc788\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 STATUS\uc5d0 ",(0,a.kt)("inlineCode",{parentName:"p"},"Restarting (0)")," \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\na911850276e8 ubuntu "bash" 35 seconds ago Restarting (0) 6 seconds ago hungry_vaughan\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart"},"https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"on-failure with max retries"),(0,a.kt)("li",{parentName:"ul"},"always \ub4f1\uc758 \uc120\ud0dd\uc9c0 \uc81c\uacf5")))),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c job \uc774\ub77c\ub294 resource \uc758 restart \uc635\uc158\uc744 \uc904 \ub54c, \uc774 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-as-a-background-process"},"docker run as a background process"),(0,a.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud560 \ub54c\ub294 \uae30\ubcf8\uc801\uc73c\ub85c foreground process \ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc989, \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud55c \ud130\ubbf8\ub110\uc774 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uc5d0 \uc790\ub3d9\uc73c\ub85c attach \ub418\uc5b4 \uc788\uc5b4, \ub2e4\ub978 \uba85\ub839\uc744 \uc2e4\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc608\uc2dc\ub97c \uc218\ud589\ud574\ubd05\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc6b0\uc120 \ud130\ubbf8\ub110 2 \uac1c\ub97c \uc5f4\uc5b4, \ud558\ub098\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker ps")," \ub97c \uc9c0\ucf1c\ubcf4\uace0, \ub2e4\ub978 \ud558\ub098\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc744 \ucc28\ub840\ub85c \uc2e4\ud589\ud574\ubcf4\uba70 \ub3d9\uc791\uc744 \uc9c0\ucf1c\ubd05\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"first-practice"},"First Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it ubuntu sleep 10\n")),(0,a.kt)("p",null,"10 \ucd08\ub3d9\uc548 \uba48\ucdb0 \uc788\uc5b4\uc57c \ud558\uace0, \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \ub2e4\ub978 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. 10\ucd08 \ub4a4\uc5d0\ub294 docker ps \uc5d0\uc11c container \uac00 \uc885\ub8cc\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"second-practice"},"Second Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it ubuntu sleep 10\n")),(0,a.kt)("p",null,"\uc774\ud6c4, ",(0,a.kt)("inlineCode",{parentName:"p"},"ctrl + p")," -> ",(0,a.kt)("inlineCode",{parentName:"p"},"ctrl + q")),(0,a.kt)("p",null,"\ud574\ub2f9 \ud130\ubbf8\ub110\uc5d0\uc11c \uc774\uc81c \ub2e4\ub978 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc73c\uba70, docker ps \ub85c\ub3c4 10\ucd08\uae4c\uc9c0\ub294 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uac00 \uc0b4\uc544\uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub807\uac8c docker container \ub0b4\ubd80\uc5d0\uc11c \ube60\uc838\ub098\uc628 \uc0c1\ud669\uc744 detached \ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4.\n\ub3c4\ucee4\uc5d0\uc11c\ub294 run \uc744 \uc2e4\ud589\ud568\uacfc \ub3d9\uc2dc\uc5d0 detached mode \ub85c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\ub294 \uc635\uc158\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"third-practice"},"Third Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d ubuntu sleep 10\n")),(0,a.kt)("p",null,"detached mode \uc774\ubbc0\ub85c \ud574\ub2f9 \uba85\ub839\uc744 \uc2e4\ud589\uc2dc\ud0a8 \ud130\ubbf8\ub110\uc5d0\uc11c \ub2e4\ub978 \uc561\uc158\uc744 \uc218\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc0c1\ud669\uc5d0 \ub530\ub77c detached mode \ub97c \uc801\uc808\ud788 \ud65c\uc6a9\ud558\uba74 \uc88b\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4, DB \uc640 \ud1b5\uc2e0\ud558\ub294 Backend API server \ub97c \uac1c\ubc1c\ud560 \ub54c Backend API server \ub294 source code \ub97c \ubcc0\uacbd\uc2dc\ucf1c\uac00\uba74\uc11c hot-loading \uc73c\ub85c \uacc4\uc18d\ud574\uc11c \ub85c\uadf8\ub97c \ud655\uc778\ud574\ubd10\uc57c \ud558\uc9c0\ub9cc, DB \ub294 \ub85c\uadf8\ub97c \uc9c0\ucf1c\ubcfc \ud544\uc694\ub294 \uc5c6\ub294 \uacbd\uc6b0\ub77c\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","DB \ub294 docker container \ub97c detached mode \ub85c \uc2e4\ud589\uc2dc\ud0a4\uace0, Backend API server \ub294 attached mode \ub85c log \ub97c following \ud558\uba74\uc11c \uc2e4\ud589\uc2dc\ud0a4\uba74 \ud6a8\uc728\uc801\uc785\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"references"},"References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://towardsdatascience.com/docker-storage-598e385f4efe"},"https://towardsdatascience.com/docker-storage-598e385f4efe")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://vsupalov.com/docker-latest-tag/"},"https://vsupalov.com/docker-latest-tag/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/ko-kr/azure/container-registry/container-registry-image-tag-version"},"https://docs.microsoft.com/ko-kr/azure/container-registry/container-registry-image-tag-version")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/"},"https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/"))))}s.isMDXComponent=!0},3116:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/layers-d934a487c19f428867e8d460015e8747.png"},7229:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/storage-2d2649699364f46922716d1fe9b5470a.png"}}]); \ No newline at end of file diff --git a/assets/js/c1115317.58b2e4e5.js b/assets/js/c1115317.58b2e4e5.js deleted file mode 100644 index 0aabc6cd..00000000 --- a/assets/js/c1115317.58b2e4e5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6639],{3905:(e,t,n)=>{n.d(t,{Zo:()=>k,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},k=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,k=i(e,["components","mdxType","originalType","parentName"]),d=c(n),u=a,m=d["".concat(p,".").concat(u)]||d[u]||s[u]||l;return n?r.createElement(m,o(o({ref:t},k),{},{components:n})):r.createElement(m,o({ref:t},k))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:a,o[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>s,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const l={title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",sidebar_position:6,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/advanced",id:"version-1.0/prerequisites/docker/advanced",title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/advanced.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/advanced",permalink:"/docs/1.0/prerequisites/docker/advanced",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/advanced.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"[Practice] Docker Advanced",description:"Practice to use docker more advanced way.",sidebar_position:6,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",previous:{title:"[Practice] Docker images",permalink:"/docs/1.0/prerequisites/docker/images"}},p={},c=[{value:"\ub3c4\ucee4 \uc774\ubbf8\uc9c0 \uc798 \ub9cc\ub4e4\uae30",id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0-\uc798-\ub9cc\ub4e4\uae30",level:2},{value:"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uace0\ub824\ud574\uc57c \ub420 \uc810",id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0\ub97c-\ub9cc\ub4e4-\ub54c-\uace0\ub824\ud574\uc57c-\ub420-\uc810",level:3},{value:"ENTRYPOINT vs CMD",id:"entrypoint-vs-cmd",level:3},{value:"Docker tag \uc774\ub984 \uc9d3\uae30",id:"docker-tag-\uc774\ub984-\uc9d3\uae30",level:3},{value:"ETC",id:"etc",level:3},{value:"docker run \uc758 \ub2e4\uc591\ud55c \uc635\uc158",id:"docker-run-\uc758-\ub2e4\uc591\ud55c-\uc635\uc158",level:2},{value:"docker run with volume",id:"docker-run-with-volume",level:3},{value:"Docker volume",id:"docker-volume",level:4},{value:"Bind mount",id:"bind-mount",level:4},{value:"How to use?",id:"how-to-use",level:4},{value:"docker run with resource limit",id:"docker-run-with-resource-limit",level:3},{value:"docker run with restart policy",id:"docker-run-with-restart-policy",level:3},{value:"docker run as a background process",id:"docker-run-as-a-background-process",level:3},{value:"First Practice",id:"first-practice",level:4},{value:"Second Practice",id:"second-practice",level:4},{value:"Third Practice",id:"third-practice",level:4},{value:"References",id:"references",level:2}],k={toc:c},d="wrapper";function s(e){let{components:t,...l}=e;return(0,a.kt)(d,(0,r.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0-\uc798-\ub9cc\ub4e4\uae30"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0 \uc798 \ub9cc\ub4e4\uae30"),(0,a.kt)("h3",{id:"\ub3c4\ucee4-\uc774\ubbf8\uc9c0\ub97c-\ub9cc\ub4e4-\ub54c-\uace0\ub824\ud574\uc57c-\ub420-\uc810"},"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c \uace0\ub824\ud574\uc57c \ub420 \uc810"),(0,a.kt)("p",null,"Dockerfile \uc744 \ud65c\uc6a9\ud558\uc5ec \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c\ub294 \uba85\ub839\uc5b4\uc758 ",(0,a.kt)("strong",{parentName:"p"},"\uc21c\uc11c"),"\uac00 \uc911\uc694\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8 \uc774\uc720\ub294 \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub294 \uc5ec\ub7ec \uac1c\uc758 Read-Only Layer \ub85c \uad6c\uc131\ub418\uc5b4\uc788\uace0, \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud560 \ub54c \uc774\ubbf8 \uc874\uc7ac\ud558\ub294 \ub808\uc774\uc5b4\ub294 ",(0,a.kt)("strong",{parentName:"p"},"\uce90\uc2dc\ub418\uc5b4")," \uc7ac\uc0ac\uc6a9\ub418\uae30 \ub54c\ubb38\uc5d0, \uc774\ub97c \uc0dd\uac01\ud574\uc11c Dockerfile \uc744 \uad6c\uc131\ud55c\ub2e4\uba74 ",(0,a.kt)("strong",{parentName:"p"},"\ube4c\ub4dc \uc2dc\uac04\uc744 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,a.kt)("p",null,"Dockerfile\uc5d0\uc11c ",(0,a.kt)("inlineCode",{parentName:"p"},"RUN"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"ADD"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY")," \uba85\ub839\uc5b4 \ud558\ub098\uac00 \ud558\ub098\uc758 \ub808\uc774\uc5b4\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Layer 1\nFROM ubuntu:latest\n\n# Layer 2\nRUN apt-get update && apt-get install python3 pip3 -y\n\n# Layer 3\nRUN pip3 install -U pip && pip3 install torch\n\n# Layer 4\nCOPY src/ src/\n\n# Layer 5\nCMD python src/app.py\n")),(0,a.kt)("p",null,"\uc704\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\ub85c \ube4c\ub4dc\ub41c \uc774\ubbf8\uc9c0\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run -it app:latest /bin/bash")," \uba85\ub839\uc5b4\ub85c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ub808\uc774\uc5b4\ub85c \ud45c\ud604\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"layers.png",src:n(3116).Z,width:"1080",height:"612"})),(0,a.kt)("p",null,"\ucd5c\uc0c1\ub2e8\uc758 R/W Layer \ub294 \uc774\ubbf8\uc9c0\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc989, \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \uc791\uc5c5\ud55c \ub0b4\uc5ed\uc740 \ubaa8\ub450 \ud718\ubc1c\uc131\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ud558\ub2e8\uc758 \ub808\uc774\uc5b4\uac00 \ubcc0\uacbd\ub418\uba74, \uadf8 \uc704\uc758 \ub808\uc774\uc5b4\ub294 \ubaa8\ub450 \uc0c8\ub85c \ube4c\ub4dc\ub429\ub2c8\ub2e4. \uadf8\ub798\uc11c Dockerfile \ub0b4\uc7a5 \uba85\ub839\uc5b4\uc758 \uc21c\uc11c\uac00 \uc911\uc694\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uba74, ",(0,a.kt)("strong",{parentName:"p"},"\uc790\uc8fc \ubcc0\uacbd"),"\ub418\ub294 \ubd80\ubd84\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ucd5c\ub300\ud55c \ub4a4\ucabd\uc73c\ub85c")," \uc815\ub82c\ud558\ub294 \uac83\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4. (ex. ",(0,a.kt)("inlineCode",{parentName:"p"},"COPY src/ app/src/"),")"),(0,a.kt)("p",null,"\uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 \ubc18\ub300\ub85c \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294 \ubd80\ubd84\uc740 \ucd5c\ub300\ud55c \uc55e\ucabd\uc73c\ub85c \uc815\ub82c\ud558\ub294\uac8c \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ub9cc\uc57d \uac70\uc758 ",(0,a.kt)("strong",{parentName:"p"},"\ubcc0\uacbd\ub418\uc9c0 \uc54a\uc9c0\ub9cc"),", \uc5ec\ub7ec \uacf3\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\uc790\uc8fc")," \uc4f0\uc774\ub294 \ubd80\ubd84\uc744 \uacf5\ud1b5\ud654\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\n\ud574\ub2f9 \uacf5\ud1b5\ubd80\ubd84\ub9cc \ubb36\uc5b4\uc11c \ubcc4\ub3c4\uc758 \uc774\ubbf8\uc9c0\ub294 \ubbf8\ub9ac \ub9cc\ub4e4\uc5b4\ub454 \ub2e4\uc74c, ",(0,a.kt)("strong",{parentName:"p"},"\ubca0\uc774\uc2a4 \uc774\ubbf8\uc9c0")," \ub85c \ud65c\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \ub2e4\ub978 \uac74 \uac70\uc758 \ub611\uac19\uc740\ub370, tensorflow-cpu \ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\ubbf8\uc9c0\uc640, tensorflow-gpu \ub97c \uc0ac\uc6a9\ud558\ub294 \ud658\uacbd\uc744 \ubd84\ub9ac\ud574\uc11c \uc774\ubbf8\uc9c0\ub85c \ub9cc\ub4e4\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","python \uacfc \uae30\ud0c0 \uae30\ubcf8\uc801\uc778 \ud328\ud0a4\uc9c0\uac00 \uc124\uce58\ub41c ",(0,a.kt)("a",{parentName:"p",href:"http://ghcr.io/makinarocks/python:3.8-base-cpu"},(0,a.kt)("inlineCode",{parentName:"a"},"ghcr.io/makinarocks/python:3.8-base"))," \ub97c \ub9cc\ub4e4\uc5b4\ub450\uace0, ",(0,a.kt)("strong",{parentName:"p"},"tensorflow cpu \ubc84\uc804\uacfc gpu \ubc84\uc804\uc774")," \uc124\uce58\ub41c \uc774\ubbf8\uc9c0 \uc0c8\ub85c \ub9cc\ub4e4\ub54c\ub294, \uc704\uc758 \uc774\ubbf8\uc9c0\ub97c ",(0,a.kt)("inlineCode",{parentName:"p"},"FROM")," \uc73c\ub85c \ubd88\ub7ec\uc628 \ub2e4\uc74c, tensorflow install \ud558\ub294 \ubd80\ubd84\ub9cc \ubcc4\ub3c4\ub85c \uc791\uc131\ud574\uc11c Dockerfile \uc744 2 \uac1c\ub85c \uad00\ub9ac\ud55c\ub2e4\uba74 \uac00\ub3c5\uc131\ub3c4 \uc88b\uace0 \ube4c\ub4dc \uc2dc\uac04\ub3c4 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\ud569\uce60 \uc218 \uc788\ub294 Layer \ub294 \ud569\uce58\ub294 \uac83"),"\uc774 Old version \uc758 \ub3c4\ucee4\uc5d0\uc11c\ub294 \uc131\ub2a5 \ud5a5\uc0c1 \ud6a8\uacfc\ub97c \uc774\ub04c\uc5c8\uc2b5\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\uc758 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uac00 \uc5b4\ub5a4 \ub3c4\ucee4 \ubc84\uc804\uc5d0\uc11c \uc2e4\ud589\ub420 \uac83\uc778\uc9c0 \ubcf4\uc7a5\ud560 \uc218 \uc5c6\uc73c\uba70, ",(0,a.kt)("strong",{parentName:"p"},"\uac00\ub3c5\uc131"),"\uc744 \uc704\ud574\uc11c\ub3c4 \ud569\uce60 \uc218 \uc788\ub294 Layer \ub294 \uc801\uc808\ud788 \ud569\uce58\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ub41c ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Bad Case\nRUN apt-get update\nRUN apt-get install build-essential -y\nRUN apt-get install curl -y\nRUN apt-get install jq -y\nRUN apt-get install git -y\n")),(0,a.kt)("p",null,"\uc774\ub97c \uc544\ub798\uc640 \uac19\uc774 \ud569\uccd0\uc11c \uc801\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},"# Better Case\nRUN apt-get update && \\\n apt-get install -y \\\n build-essential \\\n curl \\\n jq \\\n git\n")),(0,a.kt)("p",null,"\ud3b8\uc758\ub97c \uc704\ud574\uc11c\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},".dockerignore")," \ub3c4 \uc0ac\uc6a9\ud558\ub294\uac8c \uc88b\uc2b5\ub2c8\ub2e4.\n",(0,a.kt)("inlineCode",{parentName:"p"},".dockerignore"),"\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},".gitignore")," \uc640 \ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud55c\ub2e4\uace0 \uc774\ud574\ud558\uba74 \ub429\ub2c8\ub2e4. (git add \ud560 \ub54c \uc81c\uc678\ud560 \uc218 \uc788\ub4ef\uc774, docker build \ud560 \ub54c \uc790\ub3d9\uc73c\ub85c \uc81c\uc678)"),(0,a.kt)("p",null,"\ub354 \ub9ce\uc740 \uc815\ubcf4\ub294 ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/develop/develop-images/dockerfile_best-practices/"},"Docker \uacf5\uc2dd \ubb38\uc11c"),"\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"entrypoint-vs-cmd"},"ENTRYPOINT vs CMD"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc640 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," \ub294 \ubaa8\ub450 \ucee8\ud14c\uc774\ub108\uc758 \uc2e4\ud589 \uc2dc\uc810\uc5d0\uc11c \uc5b4\ub5a4 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\uc2dc\ud0a4\uace0 \uc2f6\uc744 \ub54c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \uc774 \ub458 \uc911 \ud558\ub098\ub294 \ubc18\ub4dc\uc2dc \uc874\uc7ac\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\ucc28\uc774\uc810"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CMD"),": docker run \uc744 \uc218\ud589\ud560 \ub54c, \uc27d\uac8c \ubcc0\uacbd\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc74c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENTRYPOINT"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"--entrypoint")," \ub97c \uc0ac\uc6a9\ud574\uc57c \ubcc0\uacbd\ud560 \uc218 \uc788\uc74c")))),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc640 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD")," \uac00 \ud568\uaed8 \uc4f0\uc77c \ub54c\ub294 \ubcf4\ud1b5 ",(0,a.kt)("inlineCode",{parentName:"p"},"CMD"),"\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"ENTRYPOINT")," \uc5d0\uc11c \uc801\uc740 \uba85\ub839\uc758 arguments(parameters) \ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-docker"},'FROM ubuntu:latest\n\n# \uc544\ub798 4 \uac00\uc9c0 option \uc744 \ubc14\uafd4\uac00\uba70 \uc9c1\uc811 \ud14c\uc2a4\ud2b8\ud574\ubcf4\uc2dc\uba74 \uc774\ud574\ud558\uae30 \ud3b8\ud569\ub2c8\ub2e4.\n# \ub2e8, NO ENTRYPOINT \uc635\uc158\uc740 base image \uc778 ubuntu:latest \uc5d0 \uc774\ubbf8 \uc788\uc5b4\uc11c \ud14c\uc2a4\ud2b8\ud574\ubcfc \uc218\ub294 \uc5c6\uace0 \ub098\uba38\uc9c0 v2, 3, 5, 6, 8, 9, 11, 12 \ub97c \ud14c\uc2a4\ud2b8\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n# ENTRYPOINT echo "Hello ENTRYPOINT"\n# ENTRYPOINT ["echo", "Hello ENTRYPOINT"]\n# CMD echo "Hello CMD"\n# CMD ["echo", "Hello CMD"]\n')),(0,a.kt)("p",null,"\uc704\uc758 ",(0,a.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uc5d0\uc11c \uc8fc\uc11d\uc73c\ub85c \ud45c\uc2dc\ub41c \ubd80\ubd84\ub4e4\uc744 \ud574\uc81c\ud558\uba70 \ube4c\ub4dc\ud558\uace0 \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null}),(0,a.kt)("th",{parentName:"tr",align:null},"No ENTRYPOINT"),(0,a.kt)("th",{parentName:"tr",align:null},"ENTRYPOINT a b"),(0,a.kt)("th",{parentName:"tr",align:null},"ENTRYPOINT ",'["a", "b"]'))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"NO CMD")),(0,a.kt)("td",{parentName:"tr",align:null},"Error!"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"CMD ",'["x", "y"]')),(0,a.kt)("td",{parentName:"tr",align:null},"x y"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b x y")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("strong",{parentName:"td"},"CMD x y")),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c x y"),(0,a.kt)("td",{parentName:"tr",align:null},"/bin/sh -c a b"),(0,a.kt)("td",{parentName:"tr",align:null},"a b /bin/sh -c x y")))),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"In Kubernetes pod",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ENTRYPOINT")," \u2192 command"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CMD")," \u2192 args")))),(0,a.kt)("h3",{id:"docker-tag-\uc774\ub984-\uc9d3\uae30"},"Docker tag \uc774\ub984 \uc9d3\uae30"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc774\ubbf8\uc9c0\uc758 tag \ub85c ",(0,a.kt)("strong",{parentName:"p"},"latest \ub294 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uac83\uc744 \uad8c\uc7a5"),"\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\uc720\ub294 latest \ub294 default tag name \uc774\ubbc0\ub85c ",(0,a.kt)("strong",{parentName:"p"},"\uc758\ub3c4\uce58 \uc54a\uac8c overwritten")," \ub418\ub294 \uacbd\uc6b0\uac00 \ub108\ubb34 \ub9ce\uc774 \ubc1c\uc0dd\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ud558\ub098\uc758 \uc774\ubbf8\uc9c0\ub294 \ud558\ub098\uc758 \ud0dc\uadf8\ub97c \uac00\uc9d0(",(0,a.kt)("strong",{parentName:"p"},"uniqueness"),")\uc744 \ubcf4\uc7a5\ud574\uc57c \ucd94\ud6c4 Production \ub2e8\uacc4\uc5d0\uc11c ",(0,a.kt)("strong",{parentName:"p"},"\ud611\uc5c5/\ub514\ubc84\uae45"),"\uc5d0 \uc6a9\uc774\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub0b4\uc6a9\uc740 \ub2e4\ub974\uc9c0\ub9cc, \ub3d9\uc77c\ud55c tag \ub97c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 \ucd94\ud6c4 dangling image \ub85c \ucde8\uae09\ub418\uc5b4 \uad00\ub9ac\ud558\uae30 \uc5b4\ub824\uc6cc\uc9d1\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","dangling image\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker images"),"\uc5d0\ub294 \ub098\uc624\uc9c0 \uc54a\uc9c0\ub9cc \uacc4\uc18d\ud574\uc11c \uc800\uc7a5\uc18c\ub97c \ucc28\uc9c0\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"etc"},"ETC"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"log \ub4f1\uc758 \uc815\ubcf4\ub294 container \ub0b4\ubd80\uac00 \uc544\ub2cc \uacf3\uc5d0 \ub530\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4.\ncontainer \ub0b4\ubd80\uc5d0\uc11c write \ud55c data \ub294 \uc5b8\uc81c\ub4e0\uc9c0 \uc0ac\ub77c\uc9c8 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ol"},"secret \ud55c \uc815\ubcf4, \ud658\uacbd(dev/prod) dependent \ud55c \uc815\ubcf4 \ub4f1\uc740 Dockerfile \uc5d0 \uc9c1\uc811 \uc801\ub294 \uac8c \uc544\ub2c8\ub77c, env var \ub610\ub294 .env config file \uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("li",{parentName:"ol"},"Dockerfile ",(0,a.kt)("strong",{parentName:"li"},"linter")," \ub3c4 \uc874\uc7ac\ud558\ubbc0\ub85c, \ud611\uc5c5 \uc2dc\uc5d0\ub294 \ud65c\uc6a9\ud558\uba74 \uc88b\uc2b5\ub2c8\ub2e4.\n",(0,a.kt)("a",{parentName:"li",href:"https://github.com/hadolint/hadolint"},"https://github.com/hadolint/hadolint"))),(0,a.kt)("h2",{id:"docker-run-\uc758-\ub2e4\uc591\ud55c-\uc635\uc158"},"docker run \uc758 \ub2e4\uc591\ud55c \uc635\uc158"),(0,a.kt)("h3",{id:"docker-run-with-volume"},"docker run with volume"),(0,a.kt)("p",null,"Docker container \uc0ac\uc6a9 \uc2dc \ubd88\ud3b8\ud55c \uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.\n\ubc14\ub85c Docker\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Docker ",(0,a.kt)("strong",{parentName:"p"},"container \ub0b4\ubd80\uc5d0\uc11c \uc791\uc5c5\ud55c \ubaa8\ub4e0 \uc0ac\ud56d\uc740 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),"\n\uc774\uc720\ub294 Docker container \ub294 \uac01\uac01 \uaca9\ub9ac\ub41c \ud30c\uc77c\uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, ",(0,a.kt)("strong",{parentName:"p"},"\uc5ec\ub7ec docker container \ub07c\ub9ac \ub370\uc774\ud130\ub97c \uacf5\uc720\ud558\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.")),(0,a.kt)("p",null,"\uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574\uc11c Docker\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc740 ",(0,a.kt)("strong",{parentName:"p"},"2 \uac00\uc9c0"),"\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"storage.png",src:n(7229).Z,width:"501",height:"255"})),(0,a.kt)("h4",{id:"docker-volume"},"Docker volume"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"docker cli \ub97c \uc0ac\uc6a9\ud574 ",(0,a.kt)("inlineCode",{parentName:"li"},"volume")," \uc774\ub77c\ub294 \ub9ac\uc18c\uc2a4\ub97c \uc9c1\uc811 \uad00\ub9ac"),(0,a.kt)("li",{parentName:"ul"},"host \uc5d0\uc11c Docker area(",(0,a.kt)("inlineCode",{parentName:"li"},"/var/lib/docker"),") \uc544\ub798\uc5d0 \ud2b9\uc815 \ub514\ub809\ud1a0\ub9ac\ub97c \uc0dd\uc131\ud55c \ub2e4\uc74c, \ud574\ub2f9 \uacbd\ub85c\ub97c docker container \uc5d0 mount")),(0,a.kt)("h4",{id:"bind-mount"},"Bind mount"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"host \uc758 \ud2b9\uc815 \uacbd\ub85c\ub97c docker container \uc5d0 mount")),(0,a.kt)("h4",{id:"how-to-use"},"How to use?"),(0,a.kt)("p",null,"\uc0ac\uc6a9 \ubc29\uc2dd\uc740 ",(0,a.kt)("strong",{parentName:"p"},"\ub3d9\uc77c\ud55c \uc778\ud130\ud398\uc774\uc2a4"),"\ub85c ",(0,a.kt)("inlineCode",{parentName:"p"},"-v")," \uc635\uc158\uc744 \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub2e4\ub9cc, volume \uc744 \uc0ac\uc6a9\ud560 \ub54c\uc5d0\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume create"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume ls"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"docker volume rm")," \ub4f1\uc744 \uc218\ud589\ud558\uc5ec \uc9c1\uc811 \uad00\ub9ac\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Docker volume"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run \\\n -v my_volume:/app \\\n nginx:latest\n"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Blind mount"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run \\\n -v /home/user/some/path:/app \\\n nginx:latest\n")))),(0,a.kt)("p",null,"\ub85c\uceec\uc5d0\uc11c \uac1c\ubc1c\ud560 \ub54c\ub294 bind mount \uac00 \ud3b8\ud558\uae34 \ud558\uc9c0\ub9cc, \ud658\uacbd\uc744 \uae54\ub054\ud558\uac8c \uc720\uc9c0\ud558\uace0 \uc2f6\ub2e4\uba74 docker volume \uc744 \uc0ac\uc6a9\ud558\uc5ec create, rm \uc744 \uba85\uc2dc\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uac83\ub3c4 \ud558\ub098\uc758 \ubc29\ubc95\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c \uc2a4\ud1a0\ub9ac\uc9c0\ub97c \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\ub3c4 \uacb0\uad6d docker \uc758 bind mount \ub97c \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-with-resource-limit"},"docker run with resource limit"),(0,a.kt)("p",null,"\uae30\ubcf8\uc801\uc73c\ub85c docker container \ub294 ",(0,a.kt)("strong",{parentName:"p"},"host OS \uc758 cpu, memory \uc790\uc6d0\uc744 fully \uc0ac\uc6a9"),"\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc774\ub807\uac8c \uc0ac\uc6a9\ud558\uac8c \ub418\uba74 host OS \uc758 \uc790\uc6d0 \uc0c1\ud669\uc5d0 \ub530\ub77c\uc11c ",(0,a.kt)("strong",{parentName:"p"},"OOM")," \ub4f1\uc758 \uc774\uc288\ub85c docker container \uac00 \ube44\uc815\uc0c1\uc801\uc73c\ub85c \uc885\ub8cc\ub418\ub294 \uc0c1\ud669\uc774 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub7f0 \ubb38\uc81c\ub97c \ub2e4\ub8e8\uae30 \uc704\ud574 ",(0,a.kt)("strong",{parentName:"p"},"docker container \uc2e4\ud589 \uc2dc, cpu \uc640 memory \uc758 \uc0ac\uc6a9\ub7c9 \uc81c\ud55c"),"\uc744 \uac78 \uc218 \uc788\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"-m")," ",(0,a.kt)("a",{parentName:"p",href:"https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory"},"\uc635\uc158"),"\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d -m 512m --memory-reservation=256m --name 512-limit ubuntu sleep 3600\ndocker run -d -m 1g --memory-reservation=256m --name 1g-limit ubuntu sleep 3600\n")),(0,a.kt)("p",null,"\uc704\uc758 \ub3c4\ucee4\ub97c \uc2e4\ud589 \ud6c4 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker stats")," \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 \uc0ac\uc6a9\ub7c9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS\n4ea1258e2e09 1g-limit 0.00% 300KiB / 1GiB 0.03% 1kB / 0B 0B / 0B 1\n4edf94b9a3e5 512-limit 0.00% 296KiB / 512MiB 0.06% 1.11kB / 0B 0B / 0B 1\n")),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c pod \ub77c\ub294 \ub9ac\uc18c\uc2a4\uc5d0 cpu, memory \uc81c\ud55c\uc744 \uc904 \ub54c, \uc774 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-with-restart-policy"},"docker run with restart policy"),(0,a.kt)("p",null,"\ud2b9\uc815 \ucee8\ud14c\uc774\ub108\uac00 \uacc4\uc18d\ud574\uc11c running \uc0c1\ud0dc\ub97c \uc720\uc9c0\uc2dc\ucf1c\uc57c \ud558\ub294 \uacbd\uc6b0\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc774\ub7f0 \uacbd\uc6b0\ub97c \uc704\ud574\uc11c \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uac00 \uc885\ub8cc\ub418\uc790\ub9c8\uc790 \ubc14\ub85c \uc7ac\uc0dd\uc131\uc744 \uc2dc\ub3c4\ud560 \uc218 \uc788\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"--restart=always")," \uc635\uc158\uc744 \uc81c\uacf5\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc635\uc158 \uc785\ub825 \ud6c4 \ub3c4\ucee4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run --restart=always ubuntu\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"watch -n1 docker ps"),"\ub97c \ud1b5\ud574 \uc7ac\uc2e4\ud589\uc774 \ub418\uace0 \uc788\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.\n\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uace0 \uc788\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 STATUS\uc5d0 ",(0,a.kt)("inlineCode",{parentName:"p"},"Restarting (0)")," \uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\na911850276e8 ubuntu "bash" 35 seconds ago Restarting (0) 6 seconds ago hungry_vaughan\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart"},"https://docs.docker.com/engine/reference/commandline/run/#restart-policies---restart"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"on-failure with max retries"),(0,a.kt)("li",{parentName:"ul"},"always \ub4f1\uc758 \uc120\ud0dd\uc9c0 \uc81c\uacf5")))),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0\uc11c job \uc774\ub77c\ub294 resource \uc758 restart \uc635\uc158\uc744 \uc904 \ub54c, \uc774 \ubc29\uc2dd\uc744 \ud65c\uc6a9\ud558\uc5ec \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"docker-run-as-a-background-process"},"docker run as a background process"),(0,a.kt)("p",null,"\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud560 \ub54c\ub294 \uae30\ubcf8\uc801\uc73c\ub85c foreground process \ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4. \uc989, \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud55c \ud130\ubbf8\ub110\uc774 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uc5d0 \uc790\ub3d9\uc73c\ub85c attach \ub418\uc5b4 \uc788\uc5b4, \ub2e4\ub978 \uba85\ub839\uc744 \uc2e4\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc608\uc2dc\ub97c \uc218\ud589\ud574\ubd05\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc6b0\uc120 \ud130\ubbf8\ub110 2 \uac1c\ub97c \uc5f4\uc5b4, \ud558\ub098\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"docker ps")," \ub97c \uc9c0\ucf1c\ubcf4\uace0, \ub2e4\ub978 \ud558\ub098\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc744 \ucc28\ub840\ub85c \uc2e4\ud589\ud574\ubcf4\uba70 \ub3d9\uc791\uc744 \uc9c0\ucf1c\ubd05\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"first-practice"},"First Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it ubuntu sleep 10\n")),(0,a.kt)("p",null,"10 \ucd08\ub3d9\uc548 \uba48\ucdb0 \uc788\uc5b4\uc57c \ud558\uace0, \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \ub2e4\ub978 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. 10\ucd08 \ub4a4\uc5d0\ub294 docker ps \uc5d0\uc11c container \uac00 \uc885\ub8cc\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"second-practice"},"Second Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -it ubuntu sleep 10\n")),(0,a.kt)("p",null,"\uc774\ud6c4, ",(0,a.kt)("inlineCode",{parentName:"p"},"ctrl + p")," -> ",(0,a.kt)("inlineCode",{parentName:"p"},"ctrl + q")),(0,a.kt)("p",null,"\ud574\ub2f9 \ud130\ubbf8\ub110\uc5d0\uc11c \uc774\uc81c \ub2e4\ub978 \uba85\ub839\uc744 \uc218\ud589\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc73c\uba70, docker ps \ub85c\ub3c4 10\ucd08\uae4c\uc9c0\ub294 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\uac00 \uc0b4\uc544\uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ub807\uac8c docker container \ub0b4\ubd80\uc5d0\uc11c \ube60\uc838\ub098\uc628 \uc0c1\ud669\uc744 detached \ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4.\n\ub3c4\ucee4\uc5d0\uc11c\ub294 run \uc744 \uc2e4\ud589\ud568\uacfc \ub3d9\uc2dc\uc5d0 detached mode \ub85c \uc2e4\ud589\uc2dc\ud0ac \uc218 \uc788\ub294 \uc635\uc158\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,a.kt)("h4",{id:"third-practice"},"Third Practice"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"docker run -d ubuntu sleep 10\n")),(0,a.kt)("p",null,"detached mode \uc774\ubbc0\ub85c \ud574\ub2f9 \uba85\ub839\uc744 \uc2e4\ud589\uc2dc\ud0a8 \ud130\ubbf8\ub110\uc5d0\uc11c \ub2e4\ub978 \uc561\uc158\uc744 \uc218\ud589\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc0c1\ud669\uc5d0 \ub530\ub77c detached mode \ub97c \uc801\uc808\ud788 \ud65c\uc6a9\ud558\uba74 \uc88b\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4, DB \uc640 \ud1b5\uc2e0\ud558\ub294 Backend API server \ub97c \uac1c\ubc1c\ud560 \ub54c Backend API server \ub294 source code \ub97c \ubcc0\uacbd\uc2dc\ucf1c\uac00\uba74\uc11c hot-loading \uc73c\ub85c \uacc4\uc18d\ud574\uc11c \ub85c\uadf8\ub97c \ud655\uc778\ud574\ubd10\uc57c \ud558\uc9c0\ub9cc, DB \ub294 \ub85c\uadf8\ub97c \uc9c0\ucf1c\ubcfc \ud544\uc694\ub294 \uc5c6\ub294 \uacbd\uc6b0\ub77c\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","DB \ub294 docker container \ub97c detached mode \ub85c \uc2e4\ud589\uc2dc\ud0a4\uace0, Backend API server \ub294 attached mode \ub85c log \ub97c following \ud558\uba74\uc11c \uc2e4\ud589\uc2dc\ud0a4\uba74 \ud6a8\uc728\uc801\uc785\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"references"},"References"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://towardsdatascience.com/docker-storage-598e385f4efe"},"https://towardsdatascience.com/docker-storage-598e385f4efe")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://vsupalov.com/docker-latest-tag/"},"https://vsupalov.com/docker-latest-tag/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/ko-kr/azure/container-registry/container-registry-image-tag-version"},"https://docs.microsoft.com/ko-kr/azure/container-registry/container-registry-image-tag-version")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/"},"https://stevelasker.blog/2018/03/01/docker-tagging-best-practices-for-tagging-and-versioning-docker-images/"))))}s.isMDXComponent=!0},3116:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/layers-d934a487c19f428867e8d460015e8747.png"},7229:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/storage-2d2649699364f46922716d1fe9b5470a.png"}}]); \ No newline at end of file diff --git a/assets/js/c1242cde.8f97c05b.js b/assets/js/c1242cde.8f97c05b.js deleted file mode 100644 index 9f411549..00000000 --- a/assets/js/c1242cde.8f97c05b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2508],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(r),k=a,m=d["".concat(s,".").concat(k)]||d[k]||u[k]||o;return r?n.createElement(m,l(l({ref:t},c),{},{components:r})):n.createElement(m,l({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:a,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"Install Docker",description:"Install docker to start.",sidebar_position:1,contributors:["Jongseob Jeon","Jaeyeon Kim"]},l=void 0,i={unversionedId:"prerequisites/docker/install",id:"version-1.0/prerequisites/docker/install",title:"Install Docker",description:"Install docker to start.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/install.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/install",permalink:"/docs/1.0/prerequisites/docker/install",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/install.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"Install Docker",description:"Install docker to start.",sidebar_position:1,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",next:{title:"Why Docker & Kubernetes ?",permalink:"/docs/1.0/prerequisites/docker/introduction"}},s={},p=[{value:"Docker",id:"docker",level:2},{value:"\uc124\uce58 \ud655\uc778",id:"\uc124\uce58-\ud655\uc778",level:2},{value:"\ub4e4\uc5b4\uac00\uae30 \uc55e\uc11c\uc11c..",id:"\ub4e4\uc5b4\uac00\uae30-\uc55e\uc11c\uc11c",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"docker"},"Docker"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc2e4\uc2b5\uc744 \uc704\ud574 \ub3c4\ucee4\ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc124\uce58\ub294 \uc5b4\ub5a4 OS\ub97c \uc0ac\uc6a9\ud558\ub294\uc9c0\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9d1\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uac01 \ud658\uacbd\uc5d0 \ub9de\ub294 \ub3c4\ucee4 \uc124\uce58\ub294 \uacf5\uc2dd \ud648\ud398\uc774\uc9c0\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/ubuntu/"},"ubuntu")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/desktop/mac/install/"},"mac")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/desktop/windows/install/"},"windows"))),(0,a.kt)("h2",{id:"\uc124\uce58-\ud655\uc778"},"\uc124\uce58 \ud655\uc778"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"docker run hello-world")," \uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294 OS, \ud130\ubbf8\ub110 \ud658\uacbd\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"OS"),(0,a.kt)("th",{parentName:"tr",align:null},"Docker Engine"),(0,a.kt)("th",{parentName:"tr",align:null},"Terminal"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"MacOS"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"zsh")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Windows"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"Powershell")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Windows"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"WSL2")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Ubuntu"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Engine"),(0,a.kt)("td",{parentName:"tr",align:null},"bash")))),(0,a.kt)("h2",{id:"\ub4e4\uc5b4\uac00\uae30-\uc55e\uc11c\uc11c"},"\ub4e4\uc5b4\uac00\uae30 \uc55e\uc11c\uc11c.."),(0,a.kt)("p",null,"MLOps\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \ub3c4\ucee4 \uc0ac\uc6a9\ubc95\uc744 \uc124\uba85\ud558\ub2c8 \ub9ce\uc740 \ube44\uc720\uc640 \uc608\uc2dc\uac00 MLOps \ucabd\uc73c\ub85c \uce58\uc911\ub418\uc5b4 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c1242cde.f1905197.js b/assets/js/c1242cde.f1905197.js new file mode 100644 index 00000000..3e210864 --- /dev/null +++ b/assets/js/c1242cde.f1905197.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2508],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(r),k=a,m=d["".concat(s,".").concat(k)]||d[k]||u[k]||l;return r?n.createElement(m,o(o({ref:t},c),{},{components:r})):n.createElement(m,o({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=k;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:a,o[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const l={title:"Install Docker",description:"Install docker to start.",sidebar_position:1,contributors:["Jongseob Jeon","Jaeyeon Kim"]},o=void 0,i={unversionedId:"prerequisites/docker/install",id:"version-1.0/prerequisites/docker/install",title:"Install Docker",description:"Install docker to start.",source:"@site/versioned_docs/version-1.0/prerequisites/docker/install.md",sourceDirName:"prerequisites/docker",slug:"/prerequisites/docker/install",permalink:"/docs/1.0/prerequisites/docker/install",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/prerequisites/docker/install.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"Install Docker",description:"Install docker to start.",sidebar_position:1,contributors:["Jongseob Jeon","Jaeyeon Kim"]},sidebar:"preSidebar",next:{title:"Why Docker & Kubernetes ?",permalink:"/docs/1.0/prerequisites/docker/introduction"}},s={},p=[{value:"Docker",id:"docker",level:2},{value:"\uc124\uce58 \ud655\uc778",id:"\uc124\uce58-\ud655\uc778",level:2},{value:"\ub4e4\uc5b4\uac00\uae30 \uc55e\uc11c\uc11c..",id:"\ub4e4\uc5b4\uac00\uae30-\uc55e\uc11c\uc11c",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"docker"},"Docker"),(0,a.kt)("p",null,"\ub3c4\ucee4 \uc2e4\uc2b5\uc744 \uc704\ud574 \ub3c4\ucee4\ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4 \uc124\uce58\ub294 \uc5b4\ub5a4 OS\ub97c \uc0ac\uc6a9\ud558\ub294\uc9c0\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9d1\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uac01 \ud658\uacbd\uc5d0 \ub9de\ub294 \ub3c4\ucee4 \uc124\uce58\ub294 \uacf5\uc2dd \ud648\ud398\uc774\uc9c0\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/engine/install/ubuntu/"},"ubuntu")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/desktop/mac/install/"},"mac")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/desktop/windows/install/"},"windows"))),(0,a.kt)("h2",{id:"\uc124\uce58-\ud655\uc778"},"\uc124\uce58 \ud655\uc778"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"docker run hello-world")," \uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294 OS, \ud130\ubbf8\ub110 \ud658\uacbd\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"OS"),(0,a.kt)("th",{parentName:"tr",align:null},"Docker Engine"),(0,a.kt)("th",{parentName:"tr",align:null},"Terminal"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"MacOS"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"zsh")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Windows"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"Powershell")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Windows"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Desktop"),(0,a.kt)("td",{parentName:"tr",align:null},"WSL2")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Ubuntu"),(0,a.kt)("td",{parentName:"tr",align:null},"Docker Engine"),(0,a.kt)("td",{parentName:"tr",align:null},"bash")))),(0,a.kt)("h2",{id:"\ub4e4\uc5b4\uac00\uae30-\uc55e\uc11c\uc11c"},"\ub4e4\uc5b4\uac00\uae30 \uc55e\uc11c\uc11c.."),(0,a.kt)("p",null,"MLOps\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \ub3c4\ucee4 \uc0ac\uc6a9\ubc95\uc744 \uc124\uba85\ud558\ub2c8 \ub9ce\uc740 \ube44\uc720\uc640 \uc608\uc2dc\uac00 MLOps \ucabd\uc73c\ub85c \uce58\uc911\ub418\uc5b4 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c37072e4.9bc09db3.js b/assets/js/c37072e4.9bc09db3.js deleted file mode 100644 index 8aa51c95..00000000 --- a/assets/js/c37072e4.9bc09db3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9325],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),o=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,u=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),c=o(n),f=i,m=c["".concat(u,".").concat(f)]||c[f]||d[f]||a;return n?r.createElement(m,l(l({ref:t},s),{},{components:n})):r.createElement(m,l({ref:t},s))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,l=new Array(a);l[0]=f;var p={};for(var u in t)hasOwnProperty.call(t,u)&&(p[u]=t[u]);p.originalType=e,p[c]="string"==typeof e?e:i,l[1]=p;for(var o=2;o{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>p,toc:()=>o});var r=n(7462),i=(n(7294),n(3905));const a={title:"7. Pipeline - Run",description:"",sidebar_position:7,contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"kubeflow/basic-run",id:"version-1.0/kubeflow/basic-run",title:"7. Pipeline - Run",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-run.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-run",permalink:"/docs/1.0/kubeflow/basic-run",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-run.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:7,frontMatter:{title:"7. Pipeline - Run",description:"",sidebar_position:7,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"6. Pipeline - Upload",permalink:"/docs/1.0/kubeflow/basic-pipeline-upload"},next:{title:"8. Component - InputPath/OutputPath",permalink:"/docs/1.0/kubeflow/advanced-component"}},u={},o=[{value:"Run Pipeline",id:"run-pipeline",level:2},{value:"Before Run",id:"before-run",level:2},{value:"1. Create Experiment",id:"1-create-experiment",level:3},{value:"2. Name \uc785\ub825",id:"2-name-\uc785\ub825",level:3},{value:"Run Pipeline",id:"run-pipeline-1",level:2},{value:"1. Create Run \uc120\ud0dd",id:"1-create-run-\uc120\ud0dd",level:3},{value:"2. Experiment \uc120\ud0dd",id:"2-experiment-\uc120\ud0dd",level:3},{value:"3. Pipeline Config \uc785\ub825",id:"3-pipeline-config-\uc785\ub825",level:3},{value:"4. Start",id:"4-start",level:3},{value:"Run Result",id:"run-result",level:2}],s={toc:o},c="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(c,(0,r.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"run-pipeline"},"Run Pipeline"),(0,i.kt)("p",null,"\uc774\uc81c \uc5c5\ub85c\ub4dc\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\uc2dc\ucf1c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"before-run"},"Before Run"),(0,i.kt)("h3",{id:"1-create-experiment"},"1. Create Experiment"),(0,i.kt)("p",null,"Experiment\ub780 Kubeflow \uc5d0\uc11c \uc2e4\ud589\ub418\ub294 Run\uc744 \ub17c\ub9ac\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ub2e8\uc704\uc785\ub2c8\ub2e4. "),(0,i.kt)("p",null,"Kubeflow\uc5d0\uc11c namespace\ub97c \ucc98\uc74c \ub4e4\uc5b4\uc624\uba74 \uc0dd\uc131\ub418\uc5b4 \uc788\ub294 Experiment\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 \ubbf8\ub9ac Experiment\ub97c \uc0dd\uc131\ud574\ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4. Experiment\uc774 \uc788\ub2e4\uba74 ",(0,i.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-run#run-pipeline-1"},"Run Pipeline"),"\uc73c\ub85c \ub118\uc5b4\uac00\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"Experiment\ub294 Create Experiment \ubc84\ud2bc\uc744 \ud1b5\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-0.png",src:n(5997).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"2-name-\uc785\ub825"},"2. Name \uc785\ub825"),(0,i.kt)("p",null,"Experiment\ub85c \uc0ac\uc6a9\ud560 \uc774\ub984\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.\n",(0,i.kt)("img",{alt:"run-1.png",src:n(7523).Z,width:"3360",height:"2100"})),(0,i.kt)("h2",{id:"run-pipeline-1"},"Run Pipeline"),(0,i.kt)("h3",{id:"1-create-run-\uc120\ud0dd"},"1. Create Run \uc120\ud0dd"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-2.png",src:n(9005).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"2-experiment-\uc120\ud0dd"},"2. Experiment \uc120\ud0dd"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-9.png",src:n(4048).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-10.png",src:n(1363).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"3-pipeline-config-\uc785\ub825"},"3. Pipeline Config \uc785\ub825"),(0,i.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc0dd\uc131\ud560 \ub54c \uc785\ub825\ud55c Config \uac12\ub4e4\uc744 \ucc44\uc6cc \ub123\uc2b5\ub2c8\ub2e4.\n\uc5c5\ub85c\ub4dc\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc740 number_1\uacfc number_2\ub97c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-3.png",src:n(7705).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"4-start"},"4. Start"),(0,i.kt)("p",null,"\uc785\ub825 \ud6c4 Start \ubc84\ud2bc\uc744 \ub204\ub974\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-4.png",src:n(576).Z,width:"3360",height:"2100"})),(0,i.kt)("h2",{id:"run-result"},"Run Result"),(0,i.kt)("p",null,"\uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\ub4e4\uc740 Runs \ud0ed\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nRun\uc744 \ud074\ub9ad\ud558\uba74 \uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\uacfc \uad00\ub828\ub41c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-5.png",src:n(3297).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,"\ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ub098\uc635\ub2c8\ub2e4. \uc544\uc9c1 \uc2e4\ud589\ub418\uc9c0 \uc54a\uc740 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ud68c\uc0c9 \ud45c\uc2dc\ub85c \ub098\uc635\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-6.png",src:n(7895).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\uc774 \uc644\ub8cc\ub418\uba74 \ucd08\ub85d\uc0c9 \uccb4\ud06c \ud45c\uc2dc\uac00 \ub098\uc635\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-7.png",src:n(2687).Z,width:"3408",height:"2156"})),(0,i.kt)("p",null,"\uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ubcf4\uba74 \uc785\ub825\ud55c Config\uc778 3\uacfc 5\uc758 \ud569\uc778 8\uc774 \ucd9c\ub825\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-8.png",src:n(4786).Z,width:"3360",height:"2100"})))}d.isMDXComponent=!0},5997:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-0-89a074cf253ad20e9315a21b2a3f0e9d.png"},7523:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-1-665e6047b848cee9383180a6a146a1a7.png"},1363:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-10-2177a6d36d33136d1b22445a2bfde87b.png"},9005:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-2-e1d4347b0c3974602d7f848dd39139a1.png"},7705:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-3-4d37c68448d8d5a8930ace230463e41e.png"},576:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-4-b6f1160b622f53a449e9022b42a0969c.png"},3297:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-5-165361ea6e50ef9626ff848ca5901332.png"},7895:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-6-c0df9defda8fb66fd249cfe650168103.png"},2687:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-7-53ba486fe934b320289bf98ddbf9a4b6.png"},4786:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-8-ffde114f1b8e8f33c58e40927a2d28c6.png"},4048:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-9-845cae1b0883fa77fb58717001557edb.png"}}]); \ No newline at end of file diff --git a/assets/js/c37072e4.dd4d9766.js b/assets/js/c37072e4.dd4d9766.js new file mode 100644 index 00000000..0cf806d0 --- /dev/null +++ b/assets/js/c37072e4.dd4d9766.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9325],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),o=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,u=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),c=o(n),f=i,m=c["".concat(u,".").concat(f)]||c[f]||d[f]||a;return n?r.createElement(m,l(l({ref:t},s),{},{components:n})):r.createElement(m,l({ref:t},s))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,l=new Array(a);l[0]=f;var p={};for(var u in t)hasOwnProperty.call(t,u)&&(p[u]=t[u]);p.originalType=e,p[c]="string"==typeof e?e:i,l[1]=p;for(var o=2;o{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>p,toc:()=>o});var r=n(7462),i=(n(7294),n(3905));const a={title:"7. Pipeline - Run",description:"",sidebar_position:7,contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"kubeflow/basic-run",id:"version-1.0/kubeflow/basic-run",title:"7. Pipeline - Run",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-run.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-run",permalink:"/docs/1.0/kubeflow/basic-run",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-run.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:7,frontMatter:{title:"7. Pipeline - Run",description:"",sidebar_position:7,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"6. Pipeline - Upload",permalink:"/docs/1.0/kubeflow/basic-pipeline-upload"},next:{title:"8. Component - InputPath/OutputPath",permalink:"/docs/1.0/kubeflow/advanced-component"}},u={},o=[{value:"Run Pipeline",id:"run-pipeline",level:2},{value:"Before Run",id:"before-run",level:2},{value:"1. Create Experiment",id:"1-create-experiment",level:3},{value:"2. Name \uc785\ub825",id:"2-name-\uc785\ub825",level:3},{value:"Run Pipeline",id:"run-pipeline-1",level:2},{value:"1. Create Run \uc120\ud0dd",id:"1-create-run-\uc120\ud0dd",level:3},{value:"2. Experiment \uc120\ud0dd",id:"2-experiment-\uc120\ud0dd",level:3},{value:"3. Pipeline Config \uc785\ub825",id:"3-pipeline-config-\uc785\ub825",level:3},{value:"4. Start",id:"4-start",level:3},{value:"Run Result",id:"run-result",level:2}],s={toc:o},c="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(c,(0,r.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"run-pipeline"},"Run Pipeline"),(0,i.kt)("p",null,"\uc774\uc81c \uc5c5\ub85c\ub4dc\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\uc2dc\ucf1c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h2",{id:"before-run"},"Before Run"),(0,i.kt)("h3",{id:"1-create-experiment"},"1. Create Experiment"),(0,i.kt)("p",null,"Experiment\ub780 Kubeflow \uc5d0\uc11c \uc2e4\ud589\ub418\ub294 Run\uc744 \ub17c\ub9ac\uc801\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \ub2e8\uc704\uc785\ub2c8\ub2e4. "),(0,i.kt)("p",null,"Kubeflow\uc5d0\uc11c namespace\ub97c \ucc98\uc74c \ub4e4\uc5b4\uc624\uba74 \uc0dd\uc131\ub418\uc5b4 \uc788\ub294 Experiment\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uae30 \uc804\uc5d0 \ubbf8\ub9ac Experiment\ub97c \uc0dd\uc131\ud574\ub450\uc5b4\uc57c \ud569\ub2c8\ub2e4. Experiment\uc774 \uc788\ub2e4\uba74 ",(0,i.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-run#run-pipeline-1"},"Run Pipeline"),"\uc73c\ub85c \ub118\uc5b4\uac00\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,"Experiment\ub294 Create Experiment \ubc84\ud2bc\uc744 \ud1b5\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-0.png",src:n(5997).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"2-name-\uc785\ub825"},"2. Name \uc785\ub825"),(0,i.kt)("p",null,"Experiment\ub85c \uc0ac\uc6a9\ud560 \uc774\ub984\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.\n",(0,i.kt)("img",{alt:"run-1.png",src:n(7523).Z,width:"3360",height:"2100"})),(0,i.kt)("h2",{id:"run-pipeline-1"},"Run Pipeline"),(0,i.kt)("h3",{id:"1-create-run-\uc120\ud0dd"},"1. Create Run \uc120\ud0dd"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-2.png",src:n(9005).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"2-experiment-\uc120\ud0dd"},"2. Experiment \uc120\ud0dd"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-9.png",src:n(4048).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-10.png",src:n(1363).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"3-pipeline-config-\uc785\ub825"},"3. Pipeline Config \uc785\ub825"),(0,i.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc0dd\uc131\ud560 \ub54c \uc785\ub825\ud55c Config \uac12\ub4e4\uc744 \ucc44\uc6cc \ub123\uc2b5\ub2c8\ub2e4.\n\uc5c5\ub85c\ub4dc\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc740 number_1\uacfc number_2\ub97c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-3.png",src:n(7705).Z,width:"3360",height:"2100"})),(0,i.kt)("h3",{id:"4-start"},"4. Start"),(0,i.kt)("p",null,"\uc785\ub825 \ud6c4 Start \ubc84\ud2bc\uc744 \ub204\ub974\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc774 \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-4.png",src:n(576).Z,width:"3360",height:"2100"})),(0,i.kt)("h2",{id:"run-result"},"Run Result"),(0,i.kt)("p",null,"\uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\ub4e4\uc740 Runs \ud0ed\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nRun\uc744 \ud074\ub9ad\ud558\uba74 \uc2e4\ud589\ub41c \ud30c\uc774\ud504\ub77c\uc778\uacfc \uad00\ub828\ub41c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \ud655\uc778\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-5.png",src:n(3297).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,"\ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ub098\uc635\ub2c8\ub2e4. \uc544\uc9c1 \uc2e4\ud589\ub418\uc9c0 \uc54a\uc740 \ucef4\ud3ec\ub10c\ud2b8\ub294 \ud68c\uc0c9 \ud45c\uc2dc\ub85c \ub098\uc635\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-6.png",src:n(7895).Z,width:"3360",height:"2100"})),(0,i.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc2e4\ud589\uc774 \uc644\ub8cc\ub418\uba74 \ucd08\ub85d\uc0c9 \uccb4\ud06c \ud45c\uc2dc\uac00 \ub098\uc635\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-7.png",src:n(2687).Z,width:"3408",height:"2156"})),(0,i.kt)("p",null,"\uac00\uc7a5 \ub9c8\uc9c0\ub9c9 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ubcf4\uba74 \uc785\ub825\ud55c Config\uc778 3\uacfc 5\uc758 \ud569\uc778 8\uc774 \ucd9c\ub825\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"run-8.png",src:n(4786).Z,width:"3360",height:"2100"})))}d.isMDXComponent=!0},5997:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-0-89a074cf253ad20e9315a21b2a3f0e9d.png"},7523:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-1-665e6047b848cee9383180a6a146a1a7.png"},1363:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-10-2177a6d36d33136d1b22445a2bfde87b.png"},9005:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-2-e1d4347b0c3974602d7f848dd39139a1.png"},7705:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-3-4d37c68448d8d5a8930ace230463e41e.png"},576:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-4-b6f1160b622f53a449e9022b42a0969c.png"},3297:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-5-165361ea6e50ef9626ff848ca5901332.png"},7895:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-6-c0df9defda8fb66fd249cfe650168103.png"},2687:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-7-53ba486fe934b320289bf98ddbf9a4b6.png"},4786:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-8-ffde114f1b8e8f33c58e40927a2d28c6.png"},4048:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/run-9-845cae1b0883fa77fb58717001557edb.png"}}]); \ No newline at end of file diff --git a/assets/js/c430b8da.8a88d952.js b/assets/js/c430b8da.8a88d952.js new file mode 100644 index 00000000..e22a1dbe --- /dev/null +++ b/assets/js/c430b8da.8a88d952.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3684],{3905:(e,n,t)=>{t.d(n,{Zo:()=>v,kt:()=>y});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},v=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,r=e.originalType,s=e.parentName,v=o(e,["components","mdxType","originalType","parentName"]),u=p(t),c=l,y=u["".concat(s,".").concat(c)]||u[c]||h[c]||r;return t?a.createElement(y,i(i({ref:n},v),{},{components:t})):a.createElement(y,i({ref:n},v))}));function y(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var r=t.length,i=new Array(r);i[0]=c;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o[u]="string"==typeof e?e:l,i[1]=o;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const r={title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",sidebar_position:1},i=void 0,o={unversionedId:"appendix/pyenv",id:"version-1.0/appendix/pyenv",title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",description:"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd",source:"@site/versioned_docs/version-1.0/appendix/pyenv.md",sourceDirName:"appendix",slug:"/appendix/pyenv",permalink:"/docs/1.0/appendix/pyenv",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/appendix/pyenv.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"6. Multi Models",permalink:"/docs/1.0/api-deployment/seldon-children"},next:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",permalink:"/docs/1.0/appendix/metallb"}},s={},p=[{value:"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd",id:"\ud30c\uc774\uc36c-\uac00\uc0c1\ud658\uacbd",level:2},{value:"pyenv \uc124\uce58",id:"pyenv-\uc124\uce58",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"\uc124\uce58 - macOS",id:"\uc124\uce58---macos",level:3},{value:"\uc124\uce58 - Ubuntu",id:"\uc124\uce58---ubuntu",level:3},{value:"pyenv \uc0ac\uc6a9",id:"pyenv-\uc0ac\uc6a9",level:2},{value:"Python \ubc84\uc804 \uc124\uce58",id:"python-\ubc84\uc804-\uc124\uce58",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \uc0dd\uc131",id:"python-\uac00\uc0c1\ud658\uacbd-\uc0dd\uc131",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9",id:"python-\uac00\uc0c1\ud658\uacbd-\uc0ac\uc6a9",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \ube44\ud65c\uc131\ud654",id:"python-\uac00\uc0c1\ud658\uacbd-\ube44\ud65c\uc131\ud654",level:3}],v={toc:p},u="wrapper";function h(e){let{components:n,...t}=e;return(0,l.kt)(u,(0,a.Z)({},v,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"\ud30c\uc774\uc36c-\uac00\uc0c1\ud658\uacbd"},"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),(0,l.kt)("p",null,"Python \ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\ub2e4 \ubcf4\uba74 \uc5ec\ub7ec \ubc84\uc804\uc758 Python \ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\ub098, \uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\ubcc4 \ud328\ud0a4\uc9c0 \ubc84\uc804\uc744 \ub530\ub85c \uad00\ub9ac\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\ucc98\ub7fc Python \ud658\uacbd \ud639\uc740 Python Package \ud658\uacbd\uc744 \uac00\uc0c1\ud654\ud558\uc5ec \uad00\ub9ac\ud558\ub294 \uac83\uc744 \uc27d\uac8c \ub3c4\uc640\uc8fc\ub294 \ub3c4\uad6c\ub85c\ub294 pyenv, conda, virtualenv, venv \ub4f1\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774 \uc911 ",(0,l.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv"},"pyenv"),"\uc640 ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv-virtualenv"},"pyenv-virtualenv"),"\ub97c \uc124\uce58\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","pyenv\ub294 Python \ubc84\uc804\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc8fc\uba70, pyenv-virtualenv\ub294 pyenv\uc758 plugin\uc73c\ub85c\uc368 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0 \ud658\uacbd\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc90d\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"pyenv-\uc124\uce58"},"pyenv \uc124\uce58"),(0,l.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,l.kt)("p",null,"\uc6b4\uc601 \uccb4\uc81c\ubcc4\ub85c Prerequisites\uac00 \ub2e4\ub985\ub2c8\ub2e4. ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv/wiki#suggested-build-environment"},"\ub2e4\uc74c \ud398\uc774\uc9c0"),"\ub97c \ucc38\uace0\ud558\uc5ec \ud544\uc218 \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud574\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"\uc124\uce58---macos"},"\uc124\uce58 - macOS"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"pyenv, pyenv-virtualenv \uc124\uce58")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"brew update\nbrew install pyenv\nbrew install pyenv-virtualenv\n")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"pyenv \uc124\uc815")),(0,l.kt)("p",null,"macOS\uc758 \uacbd\uc6b0 \uce74\ud0c8\ub9ac\ub098 \ubc84\uc804 \uc774\ud6c4 \uae30\ubcf8 shell\uc774 zsh\ub85c \ubcc0\uacbd\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 zsh\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"echo 'eval \"$(pyenv init -)\"' >> ~/.zshrc\necho 'eval \"$(pyenv virtualenv-init -)\"' >> ~/.zshrc\nsource ~/.zshrc\n")),(0,l.kt)("p",null,"pyenv \uba85\ub839\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv --help\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv --help\nUsage: pyenv []\n\nSome useful pyenv commands are:\n --version Display the version of pyenv\n activate Activate virtual environment\n commands List all available pyenv commands\n deactivate Deactivate virtual environment\n exec Run an executable with the selected Python version\n global Set or show the global Python version(s)\n help Display help for a command\n hooks List hook scripts for a given pyenv command\n init Configure the shell environment for pyenv\n install Install a Python version using python-build\n local Set or show the local application-specific Python version(s)\n prefix Display prefix for a Python version\n rehash Rehash pyenv shims (run this after installing executables)\n root Display the root directory where versions and shims are kept\n shell Set or show the shell-specific Python version\n shims List existing pyenv shims\n uninstall Uninstall a specific Python version\n version Show the current Python version(s) and its origin\n version-file Detect the file that sets the current pyenv version\n version-name Show the current Python version\n version-origin Explain how the current Python version is set\n versions List all Python versions available to pyenv\n virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin\n virtualenv-delete Uninstall a specific Python virtualenv\n virtualenv-init Configure the shell environment for pyenv-virtualenv\n virtualenv-prefix Display real_prefix for a Python virtualenv version\n virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.\n whence List all Python versions that contain the given executable\n which Display the full path to an executable\n\nSee `pyenv help ' for information on a specific command.\nFor full documentation, see: https://github.com/pyenv/pyenv#readme\n")),(0,l.kt)("h3",{id:"\uc124\uce58---ubuntu"},"\uc124\uce58 - Ubuntu"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"pyenv, pyenv-virtualenv \uc124\uce58")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"curl https://pyenv.run | bash\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"}," % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n 0 0 0 0 0 0 0 0 --:--:-- --:--:-- 0 0 0 0 0 0 0 0 --:--:-- --:--:-- 100 270 100 270 0 0 239 0 0:00:01 0:00:01 --:--:-- 239\nCloning into '/home/mlops/.pyenv'...\nr\n...\n\uc911\ub7b5...\n...\nremote: Enumerating objects: 10, done.\nremote: Counting objects: 100% (10/10), done.\nremote: Compressing objects: 100% (6/6), done.\nremote: Total 10 (delta 1), reused 6 (delta 0), pack-reused 0\nUnpacking objects: 100% (10/10), 2.92 KiB | 2.92 MiB/s, done.\n\nWARNING: seems you still have not added 'pyenv' to the load path.\n\n\n# See the README for instructions on how to set up\n# your shell environment for Pyenv.\n\n# Load pyenv-virtualenv automatically by adding\n# the following to ~/.bashrc:\n\neval \"$(pyenv virtualenv-init -)\"\n\n")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"pyenv \uc124\uc815")),(0,l.kt)("p",null,"\uae30\ubcf8 shell\ub85c bash shell\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4.\nbash\uc5d0\uc11c pyenv\uc640 pyenv-virtualenv \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo vi ~/.bashrc\n")),(0,l.kt)("p",null,"\ub2e4\uc74c \ubb38\uc790\uc5f4\uc744 \uc785\ub825\ud55c \ud6c4 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'export PATH="$HOME/.pyenv/bin:$PATH"\neval "$(pyenv init -)"\neval "$(pyenv virtualenv-init -)"\n')),(0,l.kt)("p",null,"shell\uc744 restart \ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"exec $SHELL\n")),(0,l.kt)("p",null,"pyenv \uba85\ub839\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv --help\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv\npyenv 2.2.2\nUsage: pyenv []\n\nSome useful pyenv commands are:\n --version Display the version of pyenv\n activate Activate virtual environment\n commands List all available pyenv commands\n deactivate Deactivate virtual environment\n doctor Verify pyenv installation and development tools to build pythons.\n exec Run an executable with the selected Python version\n global Set or show the global Python version(s)\n help Display help for a command\n hooks List hook scripts for a given pyenv command\n init Configure the shell environment for pyenv\n install Install a Python version using python-build\n local Set or show the local application-specific Python version(s)\n prefix Display prefix for a Python version\n rehash Rehash pyenv shims (run this after installing executables)\n root Display the root directory where versions and shims are kept\n shell Set or show the shell-specific Python version\n shims List existing pyenv shims\n uninstall Uninstall a specific Python version\n version Show the current Python version(s) and its origin\n version-file Detect the file that sets the current pyenv version\n version-name Show the current Python version\n version-origin Explain how the current Python version is set\n versions List all Python versions available to pyenv\n virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin\n virtualenv-delete Uninstall a specific Python virtualenv\n virtualenv-init Configure the shell environment for pyenv-virtualenv\n virtualenv-prefix Display real_prefix for a Python virtualenv version\n virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.\n whence List all Python versions that contain the given executable\n which Display the full path to an executable\n\nSee `pyenv help ' for information on a specific command.\nFor full documentation, see: https://github.com/pyenv/pyenv#readme\n")),(0,l.kt)("h2",{id:"pyenv-\uc0ac\uc6a9"},"pyenv \uc0ac\uc6a9"),(0,l.kt)("h3",{id:"python-\ubc84\uc804-\uc124\uce58"},"Python \ubc84\uc804 \uc124\uce58"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv install ")," \uba85\ub839\uc744 \ud1b5\ud574 \uc6d0\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc744 \uc124\uce58\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc608\uc2dc\ub85c kubeflow\uc5d0\uc11c \uae30\ubcf8\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ud30c\uc774\uc36c 3.7.12 \ubc84\uc804\uc744 \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv install 3.7.12\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv install 3.7.12\nDownloading Python-3.7.12.tar.xz...\n-> https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tar.xz\nInstalling Python-3.7.12...\npatching file Doc/library/ctypes.rst\npatching file Lib/test/test_unicode.py\npatching file Modules/_ctypes/_ctypes.c\npatching file Modules/_ctypes/callproc.c\npatching file Modules/_ctypes/ctypes.h\npatching file setup.py\npatching file 'Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst'\npatching file Modules/_decimal/libmpdec/mpdecimal.h\nInstalled Python-3.7.12 to /home/mlops/.pyenv/versions/3.7.12\n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\uc0dd\uc131"},"Python \uac00\uc0c1\ud658\uacbd \uc0dd\uc131"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv virtualenv <\uac00\uc0c1\ud658\uacbd-\uc774\ub984>")," \uba85\ub839\uc744 \ud1b5\ud574 \uc6d0\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc758 \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\uc2dc\ub85c Python 3.7.12 \ubc84\uc804\uc758 ",(0,l.kt)("inlineCode",{parentName:"p"},"demo"),"\ub77c\ub294 \uc774\ub984\uc758 Python \uac00\uc0c1\ud658\uacbd\uc744 \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv virtualenv 3.7.12 demo\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv virtualenv 3.7.12 demo\nLooking in links: /tmp/tmpffqys0gv\nRequirement already satisfied: setuptools in /home/mlops/.pyenv/versions/3.7.12/envs/demo/lib/python3.7/site-packages (47.1.0)\nRequirement already satisfied: pip in /home/mlops/.pyenv/versions/3.7.12/envs/demo/lib/python3.7/site-packages (20.1.1)\n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\uc0ac\uc6a9"},"Python \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv activate <\uac00\uc0c1\ud658\uacbd \uc774\ub984>")," \uba85\ub839\uc744 \ud1b5\ud574 \uc704\uc640 \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \uc0dd\uc131\ud55c \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\uc2dc\ub85c\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"demo"),"\ub77c\ub294 \uc774\ub984\uc758 Python \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv activate demo\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ud604\uc7ac \uac00\uc0c1\ud658\uacbd\uc758 \uc815\ubcf4\uac00 shell\uc758 \ub9e8 \uc55e\uc5d0 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null," Before"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ pyenv activate demo\n")),(0,l.kt)("p",null," After"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.\n(demo) mlops@ubuntu:~$ \n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\ube44\ud65c\uc131\ud654"},"Python \uac00\uc0c1\ud658\uacbd \ube44\ud65c\uc131\ud654"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"source deactivate")," \uba85\ub839\uc744 \ud1b5\ud574 \ud604\uc7ac \uc0ac\uc6a9 \uc911\uc778 \uac00\uc0c1\ud658\uacbd\uc744 \ube44\ud65c\uc131\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source deactivate\n")),(0,l.kt)("p",null," Before"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"(demo) mlops@ubuntu:~$ source deactivate\n")),(0,l.kt)("p",null," After"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ \n")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c430b8da.e5ada619.js b/assets/js/c430b8da.e5ada619.js deleted file mode 100644 index c4d72aab..00000000 --- a/assets/js/c430b8da.e5ada619.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3684],{3905:(e,n,t)=>{t.d(n,{Zo:()=>v,kt:()=>y});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},v=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,i=e.originalType,s=e.parentName,v=o(e,["components","mdxType","originalType","parentName"]),u=p(t),c=l,y=u["".concat(s,".").concat(c)]||u[c]||h[c]||i;return t?a.createElement(y,r(r({ref:n},v),{},{components:t})):a.createElement(y,r({ref:n},v))}));function y(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var i=t.length,r=new Array(i);r[0]=c;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o[u]="string"==typeof e?e:l,r[1]=o;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const i={title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",sidebar_position:1},r=void 0,o={unversionedId:"appendix/pyenv",id:"version-1.0/appendix/pyenv",title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",description:"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd",source:"@site/versioned_docs/version-1.0/appendix/pyenv.md",sourceDirName:"appendix",slug:"/appendix/pyenv",permalink:"/docs/1.0/appendix/pyenv",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/appendix/pyenv.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"6. Multi Models",permalink:"/docs/1.0/api-deployment/seldon-children"},next:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",permalink:"/docs/1.0/appendix/metallb"}},s={},p=[{value:"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd",id:"\ud30c\uc774\uc36c-\uac00\uc0c1\ud658\uacbd",level:2},{value:"pyenv \uc124\uce58",id:"pyenv-\uc124\uce58",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"\uc124\uce58 - macOS",id:"\uc124\uce58---macos",level:3},{value:"\uc124\uce58 - Ubuntu",id:"\uc124\uce58---ubuntu",level:3},{value:"pyenv \uc0ac\uc6a9",id:"pyenv-\uc0ac\uc6a9",level:2},{value:"Python \ubc84\uc804 \uc124\uce58",id:"python-\ubc84\uc804-\uc124\uce58",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \uc0dd\uc131",id:"python-\uac00\uc0c1\ud658\uacbd-\uc0dd\uc131",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9",id:"python-\uac00\uc0c1\ud658\uacbd-\uc0ac\uc6a9",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \ube44\ud65c\uc131\ud654",id:"python-\uac00\uc0c1\ud658\uacbd-\ube44\ud65c\uc131\ud654",level:3}],v={toc:p},u="wrapper";function h(e){let{components:n,...t}=e;return(0,l.kt)(u,(0,a.Z)({},v,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"\ud30c\uc774\uc36c-\uac00\uc0c1\ud658\uacbd"},"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),(0,l.kt)("p",null,"Python \ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\ub2e4 \ubcf4\uba74 \uc5ec\ub7ec \ubc84\uc804\uc758 Python \ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\ub098, \uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\ubcc4 \ud328\ud0a4\uc9c0 \ubc84\uc804\uc744 \ub530\ub85c \uad00\ub9ac\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\ucc98\ub7fc Python \ud658\uacbd \ud639\uc740 Python Package \ud658\uacbd\uc744 \uac00\uc0c1\ud654\ud558\uc5ec \uad00\ub9ac\ud558\ub294 \uac83\uc744 \uc27d\uac8c \ub3c4\uc640\uc8fc\ub294 \ub3c4\uad6c\ub85c\ub294 pyenv, conda, virtualenv, venv \ub4f1\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774 \uc911 ",(0,l.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv"},"pyenv"),"\uc640 ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv-virtualenv"},"pyenv-virtualenv"),"\ub97c \uc124\uce58\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","pyenv\ub294 Python \ubc84\uc804\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc8fc\uba70, pyenv-virtualenv\ub294 pyenv\uc758 plugin\uc73c\ub85c\uc368 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0 \ud658\uacbd\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc90d\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"pyenv-\uc124\uce58"},"pyenv \uc124\uce58"),(0,l.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,l.kt)("p",null,"\uc6b4\uc601 \uccb4\uc81c\ubcc4\ub85c Prerequisites\uac00 \ub2e4\ub985\ub2c8\ub2e4. ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv/wiki#suggested-build-environment"},"\ub2e4\uc74c \ud398\uc774\uc9c0"),"\ub97c \ucc38\uace0\ud558\uc5ec \ud544\uc218 \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud574\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"\uc124\uce58---macos"},"\uc124\uce58 - macOS"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"pyenv, pyenv-virtualenv \uc124\uce58")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"brew update\nbrew install pyenv\nbrew install pyenv-virtualenv\n")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"pyenv \uc124\uc815")),(0,l.kt)("p",null,"macOS\uc758 \uacbd\uc6b0 \uce74\ud0c8\ub9ac\ub098 \ubc84\uc804 \uc774\ud6c4 \uae30\ubcf8 shell\uc774 zsh\ub85c \ubcc0\uacbd\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 zsh\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"echo 'eval \"$(pyenv init -)\"' >> ~/.zshrc\necho 'eval \"$(pyenv virtualenv-init -)\"' >> ~/.zshrc\nsource ~/.zshrc\n")),(0,l.kt)("p",null,"pyenv \uba85\ub839\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv --help\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv --help\nUsage: pyenv []\n\nSome useful pyenv commands are:\n --version Display the version of pyenv\n activate Activate virtual environment\n commands List all available pyenv commands\n deactivate Deactivate virtual environment\n exec Run an executable with the selected Python version\n global Set or show the global Python version(s)\n help Display help for a command\n hooks List hook scripts for a given pyenv command\n init Configure the shell environment for pyenv\n install Install a Python version using python-build\n local Set or show the local application-specific Python version(s)\n prefix Display prefix for a Python version\n rehash Rehash pyenv shims (run this after installing executables)\n root Display the root directory where versions and shims are kept\n shell Set or show the shell-specific Python version\n shims List existing pyenv shims\n uninstall Uninstall a specific Python version\n version Show the current Python version(s) and its origin\n version-file Detect the file that sets the current pyenv version\n version-name Show the current Python version\n version-origin Explain how the current Python version is set\n versions List all Python versions available to pyenv\n virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin\n virtualenv-delete Uninstall a specific Python virtualenv\n virtualenv-init Configure the shell environment for pyenv-virtualenv\n virtualenv-prefix Display real_prefix for a Python virtualenv version\n virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.\n whence List all Python versions that contain the given executable\n which Display the full path to an executable\n\nSee `pyenv help ' for information on a specific command.\nFor full documentation, see: https://github.com/pyenv/pyenv#readme\n")),(0,l.kt)("h3",{id:"\uc124\uce58---ubuntu"},"\uc124\uce58 - Ubuntu"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"pyenv, pyenv-virtualenv \uc124\uce58")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"curl https://pyenv.run | bash\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"}," % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n 0 0 0 0 0 0 0 0 --:--:-- --:--:-- 0 0 0 0 0 0 0 0 --:--:-- --:--:-- 100 270 100 270 0 0 239 0 0:00:01 0:00:01 --:--:-- 239\nCloning into '/home/mlops/.pyenv'...\nr\n...\n\uc911\ub7b5...\n...\nremote: Enumerating objects: 10, done.\nremote: Counting objects: 100% (10/10), done.\nremote: Compressing objects: 100% (6/6), done.\nremote: Total 10 (delta 1), reused 6 (delta 0), pack-reused 0\nUnpacking objects: 100% (10/10), 2.92 KiB | 2.92 MiB/s, done.\n\nWARNING: seems you still have not added 'pyenv' to the load path.\n\n\n# See the README for instructions on how to set up\n# your shell environment for Pyenv.\n\n# Load pyenv-virtualenv automatically by adding\n# the following to ~/.bashrc:\n\neval \"$(pyenv virtualenv-init -)\"\n\n")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"pyenv \uc124\uc815")),(0,l.kt)("p",null,"\uae30\ubcf8 shell\ub85c bash shell\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4.\nbash\uc5d0\uc11c pyenv\uc640 pyenv-virtualenv \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo vi ~/.bashrc\n")),(0,l.kt)("p",null,"\ub2e4\uc74c \ubb38\uc790\uc5f4\uc744 \uc785\ub825\ud55c \ud6c4 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'export PATH="$HOME/.pyenv/bin:$PATH"\neval "$(pyenv init -)"\neval "$(pyenv virtualenv-init -)"\n')),(0,l.kt)("p",null,"shell\uc744 restart \ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"exec $SHELL\n")),(0,l.kt)("p",null,"pyenv \uba85\ub839\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv --help\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv\npyenv 2.2.2\nUsage: pyenv []\n\nSome useful pyenv commands are:\n --version Display the version of pyenv\n activate Activate virtual environment\n commands List all available pyenv commands\n deactivate Deactivate virtual environment\n doctor Verify pyenv installation and development tools to build pythons.\n exec Run an executable with the selected Python version\n global Set or show the global Python version(s)\n help Display help for a command\n hooks List hook scripts for a given pyenv command\n init Configure the shell environment for pyenv\n install Install a Python version using python-build\n local Set or show the local application-specific Python version(s)\n prefix Display prefix for a Python version\n rehash Rehash pyenv shims (run this after installing executables)\n root Display the root directory where versions and shims are kept\n shell Set or show the shell-specific Python version\n shims List existing pyenv shims\n uninstall Uninstall a specific Python version\n version Show the current Python version(s) and its origin\n version-file Detect the file that sets the current pyenv version\n version-name Show the current Python version\n version-origin Explain how the current Python version is set\n versions List all Python versions available to pyenv\n virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin\n virtualenv-delete Uninstall a specific Python virtualenv\n virtualenv-init Configure the shell environment for pyenv-virtualenv\n virtualenv-prefix Display real_prefix for a Python virtualenv version\n virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.\n whence List all Python versions that contain the given executable\n which Display the full path to an executable\n\nSee `pyenv help ' for information on a specific command.\nFor full documentation, see: https://github.com/pyenv/pyenv#readme\n")),(0,l.kt)("h2",{id:"pyenv-\uc0ac\uc6a9"},"pyenv \uc0ac\uc6a9"),(0,l.kt)("h3",{id:"python-\ubc84\uc804-\uc124\uce58"},"Python \ubc84\uc804 \uc124\uce58"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv install ")," \uba85\ub839\uc744 \ud1b5\ud574 \uc6d0\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc744 \uc124\uce58\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc608\uc2dc\ub85c kubeflow\uc5d0\uc11c \uae30\ubcf8\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ud30c\uc774\uc36c 3.7.12 \ubc84\uc804\uc744 \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv install 3.7.12\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv install 3.7.12\nDownloading Python-3.7.12.tar.xz...\n-> https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tar.xz\nInstalling Python-3.7.12...\npatching file Doc/library/ctypes.rst\npatching file Lib/test/test_unicode.py\npatching file Modules/_ctypes/_ctypes.c\npatching file Modules/_ctypes/callproc.c\npatching file Modules/_ctypes/ctypes.h\npatching file setup.py\npatching file 'Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst'\npatching file Modules/_decimal/libmpdec/mpdecimal.h\nInstalled Python-3.7.12 to /home/mlops/.pyenv/versions/3.7.12\n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\uc0dd\uc131"},"Python \uac00\uc0c1\ud658\uacbd \uc0dd\uc131"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv virtualenv <\uac00\uc0c1\ud658\uacbd-\uc774\ub984>")," \uba85\ub839\uc744 \ud1b5\ud574 \uc6d0\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc758 \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\uc2dc\ub85c Python 3.7.12 \ubc84\uc804\uc758 ",(0,l.kt)("inlineCode",{parentName:"p"},"demo"),"\ub77c\ub294 \uc774\ub984\uc758 Python \uac00\uc0c1\ud658\uacbd\uc744 \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv virtualenv 3.7.12 demo\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv virtualenv 3.7.12 demo\nLooking in links: /tmp/tmpffqys0gv\nRequirement already satisfied: setuptools in /home/mlops/.pyenv/versions/3.7.12/envs/demo/lib/python3.7/site-packages (47.1.0)\nRequirement already satisfied: pip in /home/mlops/.pyenv/versions/3.7.12/envs/demo/lib/python3.7/site-packages (20.1.1)\n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\uc0ac\uc6a9"},"Python \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv activate <\uac00\uc0c1\ud658\uacbd \uc774\ub984>")," \uba85\ub839\uc744 \ud1b5\ud574 \uc704\uc640 \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \uc0dd\uc131\ud55c \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\uc2dc\ub85c\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"demo"),"\ub77c\ub294 \uc774\ub984\uc758 Python \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv activate demo\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ud604\uc7ac \uac00\uc0c1\ud658\uacbd\uc758 \uc815\ubcf4\uac00 shell\uc758 \ub9e8 \uc55e\uc5d0 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null," Before"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ pyenv activate demo\n")),(0,l.kt)("p",null," After"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.\n(demo) mlops@ubuntu:~$ \n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\ube44\ud65c\uc131\ud654"},"Python \uac00\uc0c1\ud658\uacbd \ube44\ud65c\uc131\ud654"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"source deactivate")," \uba85\ub839\uc744 \ud1b5\ud574 \ud604\uc7ac \uc0ac\uc6a9 \uc911\uc778 \uac00\uc0c1\ud658\uacbd\uc744 \ube44\ud65c\uc131\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source deactivate\n")),(0,l.kt)("p",null," Before"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"(demo) mlops@ubuntu:~$ source deactivate\n")),(0,l.kt)("p",null," After"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ \n")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c4afae5c.c6d6319f.js b/assets/js/c4afae5c.b50eb756.js similarity index 53% rename from assets/js/c4afae5c.c6d6319f.js rename to assets/js/c4afae5c.b50eb756.js index eb972ce2..2fdd44f3 100644 --- a/assets/js/c4afae5c.c6d6319f.js +++ b/assets/js/c4afae5c.b50eb756.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5825],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=a,b=c["".concat(s,".").concat(m)]||c[m]||d[m]||o;return r?n.createElement(b,i(i({ref:t},p),{},{components:r})):n.createElement(b,i({ref:t},p))}));function b(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={title:"1. Central Dashboard",description:"",sidebar_position:1,contributors:["Jaeyeon Kim","SeungTae Kim"]},i=void 0,l={unversionedId:"kubeflow-dashboard-guide/intro",id:"kubeflow-dashboard-guide/intro",title:"1. Central Dashboard",description:"",source:"@site/docs/kubeflow-dashboard-guide/intro.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/intro",permalink:"/docs/kubeflow-dashboard-guide/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/intro.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Central Dashboard",description:"",sidebar_position:1,contributors:["Jaeyeon Kim","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Prometheus & Grafana",permalink:"/docs/setup-components/install-components-pg"},next:{title:"2. Notebooks",permalink:"/docs/kubeflow-dashboard-guide/notebooks"}},s={},u=[],p={toc:u},c="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(c,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-kf"},"Kubeflow \uc124\uce58"),"\ub97c \uc644\ub8cc\ud558\uba74, \ub2e4\uc74c \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward --address 0.0.0.0 svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"after-login",src:r(5215).Z,width:"4008",height:"1266"})),(0,a.kt)("p",null,"Central Dashboard\ub294 Kubeflow\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \ud1b5\ud569\ud558\uc5ec \uc81c\uacf5\ud558\ub294 UI\uc785\ub2c8\ub2e4. Central Dashboard\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uae30\ub2a5\uc740 \ud06c\uac8c \uc67c\ucabd\uc758 \ud0ed\uc744 \uae30\uc900\uc73c\ub85c \uad6c\ubd84\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Home"),(0,a.kt)("li",{parentName:"ul"},"Notebooks"),(0,a.kt)("li",{parentName:"ul"},"Tensorboards"),(0,a.kt)("li",{parentName:"ul"},"Volumes"),(0,a.kt)("li",{parentName:"ul"},"Models"),(0,a.kt)("li",{parentName:"ul"},"Experiments(AutoML)"),(0,a.kt)("li",{parentName:"ul"},"Experiments(KFP)"),(0,a.kt)("li",{parentName:"ul"},"Pipelines"),(0,a.kt)("li",{parentName:"ul"},"Runs"),(0,a.kt)("li",{parentName:"ul"},"Recurring Runs"),(0,a.kt)("li",{parentName:"ul"},"Artifacts"),(0,a.kt)("li",{parentName:"ul"},"Executions")),(0,a.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uae30\ub2a5\ubcc4 \uac04\ub2e8\ud55c \uc0ac\uc6a9\ubc95\uc744 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},5215:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/after-login-4b41daca6d9a97824552770b832d59b0.png"},7511:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5825],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),u=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=a,b=c["".concat(s,".").concat(m)]||c[m]||d[m]||o;return r?n.createElement(b,i(i({ref:t},p),{},{components:r})):n.createElement(b,i({ref:t},p))}));function b(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const o={title:"1. Central Dashboard",description:"",sidebar_position:1,contributors:["Jaeyeon Kim","SeungTae Kim"]},i=void 0,l={unversionedId:"kubeflow-dashboard-guide/intro",id:"kubeflow-dashboard-guide/intro",title:"1. Central Dashboard",description:"",source:"@site/docs/kubeflow-dashboard-guide/intro.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/intro",permalink:"/docs/kubeflow-dashboard-guide/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow-dashboard-guide/intro.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Central Dashboard",description:"",sidebar_position:1,contributors:["Jaeyeon Kim","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Prometheus & Grafana",permalink:"/docs/setup-components/install-components-pg"},next:{title:"2. Notebooks",permalink:"/docs/kubeflow-dashboard-guide/notebooks"}},s={},u=[],p={toc:u},c="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(c,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-kf"},"Kubeflow \uc124\uce58"),"\ub97c \uc644\ub8cc\ud558\uba74, \ub2e4\uc74c \ucee4\ub9e8\ub4dc\ub97c \ud1b5\ud574 \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc811\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward --address 0.0.0.0 svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"after-login",src:r(5215).Z,width:"4008",height:"1266"})),(0,a.kt)("p",null,"Central Dashboard\ub294 Kubeflow\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \ud1b5\ud569\ud558\uc5ec \uc81c\uacf5\ud558\ub294 UI\uc785\ub2c8\ub2e4. Central Dashboard\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uae30\ub2a5\uc740 \ud06c\uac8c \uc67c\ucabd\uc758 \ud0ed\uc744 \uae30\uc900\uc73c\ub85c \uad6c\ubd84\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"left-tabs",src:r(7511).Z,width:"3940",height:"1278"})),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Home"),(0,a.kt)("li",{parentName:"ul"},"Notebooks"),(0,a.kt)("li",{parentName:"ul"},"Tensorboards"),(0,a.kt)("li",{parentName:"ul"},"Volumes"),(0,a.kt)("li",{parentName:"ul"},"Models"),(0,a.kt)("li",{parentName:"ul"},"Experiments(AutoML)"),(0,a.kt)("li",{parentName:"ul"},"Experiments(KFP)"),(0,a.kt)("li",{parentName:"ul"},"Pipelines"),(0,a.kt)("li",{parentName:"ul"},"Runs"),(0,a.kt)("li",{parentName:"ul"},"Recurring Runs"),(0,a.kt)("li",{parentName:"ul"},"Artifacts"),(0,a.kt)("li",{parentName:"ul"},"Executions")),(0,a.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uae30\ub2a5\ubcc4 \uac04\ub2e8\ud55c \uc0ac\uc6a9\ubc95\uc744 \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},5215:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/after-login-4b41daca6d9a97824552770b832d59b0.png"},7511:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file diff --git a/assets/js/c58e39e2.3c7573b1.js b/assets/js/c58e39e2.3c7573b1.js deleted file mode 100644 index a40352c1..00000000 --- a/assets/js/c58e39e2.3c7573b1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1804],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>b});var n=i(7294);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function p(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(l[i]=e[i]);return l}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(l[i]=e[i])}return l}var o=n.createContext({}),s=function(e){var t=n.useContext(o),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},c=function(e){var t=s(e.components);return n.createElement(o.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var i=e.components,l=e.mdxType,p=e.originalType,o=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),u=s(i),g=l,b=u["".concat(o,".").concat(g)]||u[g]||d[g]||p;return i?n.createElement(b,a(a({ref:t},c),{},{components:i})):n.createElement(b,a({ref:t},c))}));function b(e,t){var i=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var p=i.length,a=new Array(p);a[0]=g;var r={};for(var o in t)hasOwnProperty.call(t,o)&&(r[o]=t[o]);r.originalType=e,r[u]="string"==typeof e?e:l,a[1]=r;for(var s=2;s{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>d,frontMatter:()=>p,metadata:()=>r,toc:()=>s});var n=i(7462),l=(i(7294),i(3905));const p={title:"6. Pipeline - Upload",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},a=void 0,r={unversionedId:"kubeflow/basic-pipeline-upload",id:"kubeflow/basic-pipeline-upload",title:"6. Pipeline - Upload",description:"",source:"@site/docs/kubeflow/basic-pipeline-upload.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-pipeline-upload",permalink:"/docs/kubeflow/basic-pipeline-upload",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-pipeline-upload.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"6. Pipeline - Upload",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"5. Pipeline - Write",permalink:"/docs/kubeflow/basic-pipeline"},next:{title:"7. Pipeline - Run",permalink:"/docs/kubeflow/basic-run"}},o={},s=[{value:"Upload Pipeline",id:"upload-pipeline",level:2},{value:"1. Pipelines \ud0ed \uc120\ud0dd",id:"1-pipelines-\ud0ed-\uc120\ud0dd",level:3},{value:"2. Upload Pipeline \uc120\ud0dd",id:"2-upload-pipeline-\uc120\ud0dd",level:3},{value:"3. Choose file \uc120\ud0dd",id:"3-choose-file-\uc120\ud0dd",level:3},{value:"4. \uc0dd\uc131\ub41c yaml\ud30c\uc77c \uc5c5\ub85c\ub4dc",id:"4-\uc0dd\uc131\ub41c-yaml\ud30c\uc77c-\uc5c5\ub85c\ub4dc",level:3},{value:"5. Create",id:"5-create",level:3},{value:"Upload Pipeline Version",id:"upload-pipeline-version",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...p}=e;return(0,l.kt)(u,(0,n.Z)({},c,p,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"upload-pipeline"},"Upload Pipeline"),(0,l.kt)("p",null,"\uc774\uc81c \uc6b0\ub9ac\uac00 \ub9cc\ub4e0 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc9c1\uc811 kubeflow\uc5d0\uc11c \uc5c5\ub85c\ub4dc \ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ud30c\uc774\ud504\ub77c\uc778 \uc5c5\ub85c\ub4dc\ub294 kubeflow \ub300\uc2dc\ubcf4\ub4dc UI\ub97c \ud1b5\ud574 \uc9c4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n",(0,l.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-kf#%EC%A0%95%EC%83%81-%EC%84%A4%EC%B9%98-%ED%99%95%EC%9D%B8"},"Install Kubeflow")," \uc5d0\uc11c \uc0ac\uc6a9\ud55c \ubc29\ubc95\uc744 \uc774\uc6a9\ud574 \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"http://localhost:8080"},"http://localhost:8080"),"\uc5d0 \uc811\uc18d\ud574 \ub300\uc2dc\ubcf4\ub4dc\ub97c \uc5f4\uc5b4\uc90d\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-pipelines-\ud0ed-\uc120\ud0dd"},"1. Pipelines \ud0ed \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-0.png",src:i(8924).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"2-upload-pipeline-\uc120\ud0dd"},"2. Upload Pipeline \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-1.png",src:i(2893).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"3-choose-file-\uc120\ud0dd"},"3. Choose file \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-2.png",src:i(3951).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"4-\uc0dd\uc131\ub41c-yaml\ud30c\uc77c-\uc5c5\ub85c\ub4dc"},"4. \uc0dd\uc131\ub41c yaml\ud30c\uc77c \uc5c5\ub85c\ub4dc"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-3.png",src:i(6439).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"5-create"},"5. Create"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-4.png",src:i(4181).Z,width:"3360",height:"2100"})),(0,l.kt)("h2",{id:"upload-pipeline-version"},"Upload Pipeline Version"),(0,l.kt)("p",null,"\uc5c5\ub85c\ub4dc\ub41c \ud30c\uc774\ud504\ub77c\uc778\uc740 \uc5c5\ub85c\ub4dc\ub97c \ud1b5\ud574\uc11c \ubc84\uc804\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ub9cc \uae43\ud5d9\uacfc \uac19\uc740 \ucf54\ub4dc \ucc28\uc6d0\uc758 \ubc84\uc804 \uad00\ub9ac\uac00 \uc544\ub2cc \uac19\uc740 \uc774\ub984\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubaa8\uc544\uc11c \ubcf4\uc5ec\uc8fc\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.\n\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud55c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 example_pipeline\uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-5.png",src:i(536).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-4.png",src:i(4181).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"Upload Version\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud560 \uc218 \uc788\ub294 \ud654\uba74\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-6.png",src:i(7375).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc \ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-7.png",src:i(8568).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\uc5c5\ub85c\ub4dc\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ud30c\uc774\ud504\ub77c\uc778 \ubc84\uc804\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-8.png",src:i(6975).Z,width:"3360",height:"2100"})))}d.isMDXComponent=!0},8924:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-0-f7b76be96957b718745ed2097584c522.png"},2893:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-1-db1f71e3803fa7f7864928391e5b515e.png"},3951:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-2-3ebafe6d26ce8382bed6c39fdb949ffc.png"},6439:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-3-39b0f036fc76c0832ea02dc835db627a.png"},4181:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-4-c6013b589b7ab9ec9b83fbbb68f41b2d.png"},536:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-5-0b90b4869ebaf0654826f5763609e34a.png"},7375:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-6-2a94de3824c6e38732d1d18ecb4b7d10.png"},8568:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-7-af0c439edb4ba0f0b7d7e11488d9c971.png"},6975:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-8-2aecbdbeaa0c064cb224d77c268717ca.png"}}]); \ No newline at end of file diff --git a/assets/js/c58e39e2.4eb7efba.js b/assets/js/c58e39e2.4eb7efba.js new file mode 100644 index 00000000..29785b91 --- /dev/null +++ b/assets/js/c58e39e2.4eb7efba.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1804],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>b});var n=i(7294);function l(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function p(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(l[i]=e[i]);return l}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(l[i]=e[i])}return l}var o=n.createContext({}),s=function(e){var t=n.useContext(o),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},c=function(e){var t=s(e.components);return n.createElement(o.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var i=e.components,l=e.mdxType,p=e.originalType,o=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),u=s(i),g=l,b=u["".concat(o,".").concat(g)]||u[g]||d[g]||p;return i?n.createElement(b,a(a({ref:t},c),{},{components:i})):n.createElement(b,a({ref:t},c))}));function b(e,t){var i=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var p=i.length,a=new Array(p);a[0]=g;var r={};for(var o in t)hasOwnProperty.call(t,o)&&(r[o]=t[o]);r.originalType=e,r[u]="string"==typeof e?e:l,a[1]=r;for(var s=2;s{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>d,frontMatter:()=>p,metadata:()=>r,toc:()=>s});var n=i(7462),l=(i(7294),i(3905));const p={title:"6. Pipeline - Upload",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},a=void 0,r={unversionedId:"kubeflow/basic-pipeline-upload",id:"kubeflow/basic-pipeline-upload",title:"6. Pipeline - Upload",description:"",source:"@site/docs/kubeflow/basic-pipeline-upload.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-pipeline-upload",permalink:"/docs/kubeflow/basic-pipeline-upload",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-pipeline-upload.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"6. Pipeline - Upload",description:"",sidebar_position:6,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"5. Pipeline - Write",permalink:"/docs/kubeflow/basic-pipeline"},next:{title:"7. Pipeline - Run",permalink:"/docs/kubeflow/basic-run"}},o={},s=[{value:"Upload Pipeline",id:"upload-pipeline",level:2},{value:"1. Pipelines \ud0ed \uc120\ud0dd",id:"1-pipelines-\ud0ed-\uc120\ud0dd",level:3},{value:"2. Upload Pipeline \uc120\ud0dd",id:"2-upload-pipeline-\uc120\ud0dd",level:3},{value:"3. Choose file \uc120\ud0dd",id:"3-choose-file-\uc120\ud0dd",level:3},{value:"4. \uc0dd\uc131\ub41c yaml\ud30c\uc77c \uc5c5\ub85c\ub4dc",id:"4-\uc0dd\uc131\ub41c-yaml\ud30c\uc77c-\uc5c5\ub85c\ub4dc",level:3},{value:"5. Create",id:"5-create",level:3},{value:"Upload Pipeline Version",id:"upload-pipeline-version",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...p}=e;return(0,l.kt)(u,(0,n.Z)({},c,p,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"upload-pipeline"},"Upload Pipeline"),(0,l.kt)("p",null,"\uc774\uc81c \uc6b0\ub9ac\uac00 \ub9cc\ub4e0 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc9c1\uc811 kubeflow\uc5d0\uc11c \uc5c5\ub85c\ub4dc \ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ud30c\uc774\ud504\ub77c\uc778 \uc5c5\ub85c\ub4dc\ub294 kubeflow \ub300\uc2dc\ubcf4\ub4dc UI\ub97c \ud1b5\ud574 \uc9c4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n",(0,l.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-kf#%EC%A0%95%EC%83%81-%EC%84%A4%EC%B9%98-%ED%99%95%EC%9D%B8"},"Install Kubeflow")," \uc5d0\uc11c \uc0ac\uc6a9\ud55c \ubc29\ubc95\uc744 \uc774\uc6a9\ud574 \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n")),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"http://localhost:8080"},"http://localhost:8080"),"\uc5d0 \uc811\uc18d\ud574 \ub300\uc2dc\ubcf4\ub4dc\ub97c \uc5f4\uc5b4\uc90d\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"1-pipelines-\ud0ed-\uc120\ud0dd"},"1. Pipelines \ud0ed \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-0.png",src:i(8924).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"2-upload-pipeline-\uc120\ud0dd"},"2. Upload Pipeline \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-1.png",src:i(2893).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"3-choose-file-\uc120\ud0dd"},"3. Choose file \uc120\ud0dd"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-2.png",src:i(3951).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"4-\uc0dd\uc131\ub41c-yaml\ud30c\uc77c-\uc5c5\ub85c\ub4dc"},"4. \uc0dd\uc131\ub41c yaml\ud30c\uc77c \uc5c5\ub85c\ub4dc"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-3.png",src:i(6439).Z,width:"3360",height:"2100"})),(0,l.kt)("h3",{id:"5-create"},"5. Create"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-4.png",src:i(4181).Z,width:"3360",height:"2100"})),(0,l.kt)("h2",{id:"upload-pipeline-version"},"Upload Pipeline Version"),(0,l.kt)("p",null,"\uc5c5\ub85c\ub4dc\ub41c \ud30c\uc774\ud504\ub77c\uc778\uc740 \uc5c5\ub85c\ub4dc\ub97c \ud1b5\ud574\uc11c \ubc84\uc804\uc744 \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ub9cc \uae43\ud5d9\uacfc \uac19\uc740 \ucf54\ub4dc \ucc28\uc6d0\uc758 \ubc84\uc804 \uad00\ub9ac\uac00 \uc544\ub2cc \uac19\uc740 \uc774\ub984\uc758 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubaa8\uc544\uc11c \ubcf4\uc5ec\uc8fc\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.\n\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud55c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 example_pipeline\uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-5.png",src:i(536).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-4.png",src:i(4181).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"Upload Version\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc\ud560 \uc218 \uc788\ub294 \ud654\uba74\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-6.png",src:i(7375).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc744 \uc5c5\ub85c\ub4dc \ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-7.png",src:i(8568).Z,width:"3360",height:"2100"})),(0,l.kt)("p",null,"\uc5c5\ub85c\ub4dc\ub41c \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc774 \ud30c\uc774\ud504\ub77c\uc778 \ubc84\uc804\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"pipeline-gui-8.png",src:i(6975).Z,width:"3360",height:"2100"})))}d.isMDXComponent=!0},8924:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-0-f7b76be96957b718745ed2097584c522.png"},2893:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-1-db1f71e3803fa7f7864928391e5b515e.png"},3951:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-2-3ebafe6d26ce8382bed6c39fdb949ffc.png"},6439:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-3-39b0f036fc76c0832ea02dc835db627a.png"},4181:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-4-c6013b589b7ab9ec9b83fbbb68f41b2d.png"},536:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-5-0b90b4869ebaf0654826f5763609e34a.png"},7375:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-6-2a94de3824c6e38732d1d18ecb4b7d10.png"},8568:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-7-af0c439edb4ba0f0b7d7e11488d9c971.png"},6975:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/pipeline-gui-8-2aecbdbeaa0c064cb224d77c268717ca.png"}}]); \ No newline at end of file diff --git a/assets/js/c8feb4f8.3be15691.js b/assets/js/c8feb4f8.3be15691.js new file mode 100644 index 00000000..f74529dc --- /dev/null +++ b/assets/js/c8feb4f8.3be15691.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6540],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),u=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=o,f=c["".concat(i,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,s(s({ref:t},p),{},{components:r})):n.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,s=new Array(a);s[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const a={title:"4. Volumes",description:"",sidebar_position:4,contributors:["Jaeyeon Kim"]},s=void 0,l={unversionedId:"kubeflow-dashboard-guide/volumes",id:"version-1.0/kubeflow-dashboard-guide/volumes",title:"4. Volumes",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/volumes.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/volumes",permalink:"/docs/1.0/kubeflow-dashboard-guide/volumes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/volumes.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Volumes",description:"",sidebar_position:4,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Tensorboards",permalink:"/docs/1.0/kubeflow-dashboard-guide/tensorboards"},next:{title:"5. Experiments(AutoML)",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments"}},i={},u=[{value:"Volumes",id:"volumes",level:2},{value:"\ubcfc\ub968 \uc0dd\uc131\ud558\uae30",id:"\ubcfc\ub968-\uc0dd\uc131\ud558\uae30",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"volumes"},"Volumes"),(0,o.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Volumes\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"volumes",src:r(4144).Z,width:"1386",height:"382"})),(0,o.kt)("p",null,"Volumes \ud0ed\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/volumes/"},"Kubernetes\uc758 \ubcfc\ub968(Volume)"),", \uc815\ud655\ud788\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/"},"\ud37c\uc2dc\uc2a4\ud134\ud2b8 \ubcfc\ub968 \ud074\ub808\uc784(Persistent Volume Claim, \uc774\ud558 pvc)")," \uc911 \ud604\uc7ac user\uc758 namespace\uc5d0 \uc18d\ud55c pvc\ub97c \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc704 \uc2a4\ud06c\ub9b0\uc0f7\uc744 \ubcf4\uba74, ",(0,o.kt)("a",{parentName:"p",href:"../kubeflow-dashboard-guide/notebooks"},"1. Notebooks")," \ud398\uc774\uc9c0\uc5d0\uc11c \uc0dd\uc131\ud55c Volume\uc758 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 Volume\uc758 Storage Class\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc124\uce58 \ub2f9\uc2dc \uc124\uce58\ud55c Default Storage Class\uc778 local-path\ub85c \uc124\uc815\ub418\uc5b4\uc788\uc74c\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\uc678\uc5d0\ub3c4 user namespace\uc5d0 \uc0c8\ub85c\uc6b4 \ubcfc\ub968\uc744 \uc0dd\uc131\ud558\uac70\ub098, \uc870\ud68c\ud558\uac70\ub098, \uc0ad\uc81c\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0 Volumes \ud398\uc774\uc9c0\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("hr",null),(0,o.kt)("h2",{id:"\ubcfc\ub968-\uc0dd\uc131\ud558\uae30"},"\ubcfc\ub968 \uc0dd\uc131\ud558\uae30"),(0,o.kt)("p",null,"\uc624\ub978\ucabd \uc704\uc758 ",(0,o.kt)("inlineCode",{parentName:"p"},"+ NEW VOLUME")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"new-volume",src:r(5166).Z,width:"1192",height:"934"})),(0,o.kt)("p",null,"name, size, storage class, access mode\ub97c \uc9c0\uc815\ud558\uc5ec \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc6d0\ud558\ub294 \ub9ac\uc18c\uc2a4 \uc2a4\ud399\uc744 \uc9c0\uc815\ud558\uc5ec \uc0dd\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc\ub968\uc758 Status\uac00 ",(0,o.kt)("inlineCode",{parentName:"p"},"Pending"),"\uc73c\ub85c \uc870\ud68c\ub429\ub2c8\ub2e4. ",(0,o.kt)("inlineCode",{parentName:"p"},"Status")," \uc544\uc774\ucf58\uc5d0 \ub9c8\uc6b0\uc2a4 \ucee4\uc11c\ub97c \uac00\uc838\ub2e4 \ub300\uba74 ",(0,o.kt)("em",{parentName:"p"},"\ud574\ub2f9 \ubcfc\ub968\uc740 mount\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 first consumer\uac00 \ub098\ud0c0\ub0a0 \ub54c \uc2e4\uc81c\ub85c \uc0dd\uc131\uc744 \uc9c4\ud589\ud55c\ub2e4(This volume will be bound when its first consumer is created.)"),"\ub294 \uba54\uc2dc\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud558\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/storage-classes/"},"StorageClass"),"\uc778 ",(0,o.kt)("inlineCode",{parentName:"p"},"local-path"),"\uc758 \ubcfc\ub968 \uc0dd\uc131 \uc815\ucc45\uc5d0 \ud574\ub2f9\ud558\uba70, ",(0,o.kt)("strong",{parentName:"p"},"\ubb38\uc81c \uc0c1\ud669\uc774 \uc544\ub2d9\ub2c8\ub2e4."),(0,o.kt)("br",{parentName:"p"}),"\n","\ud574\ub2f9 \ud398\uc774\uc9c0\uc5d0\uc11c Status\uac00 ",(0,o.kt)("inlineCode",{parentName:"p"},"Pending")," \uc73c\ub85c \ubcf4\uc774\ub354\ub77c\ub3c4 \ud574\ub2f9 \ubcfc\ub968\uc744 \uc0ac\uc6a9\ud558\uae38 \uc6d0\ud558\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84 \ud639\uc740 \ud30c\ub4dc(Pod)\uc5d0\uc11c\ub294 \ud574\ub2f9 \ubcfc\ub968\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\uba70, \uadf8\ub54c \uc2e4\uc81c\ub85c \ubcfc\ub968 \uc0dd\uc131\uc774 \uc9c4\ud589\ub429\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"creating-volume",src:r(9658).Z,width:"1572",height:"450"})))}d.isMDXComponent=!0},9658:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/creating-volume-38085f1d8dcc5f1a0f2df336a6ad99e7.png"},6316:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},5166:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/new-volume-b14c633d4f22b7948f111122da491ccd.png"},4144:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/volumes-8a47fc94771470514efa705ec8b6d0fe.png"}}]); \ No newline at end of file diff --git a/assets/js/c8feb4f8.8372ed8a.js b/assets/js/c8feb4f8.8372ed8a.js deleted file mode 100644 index 9dfbd9fa..00000000 --- a/assets/js/c8feb4f8.8372ed8a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[6540],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i=o.createContext({}),u=function(e){var t=o.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return o.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(r),m=n,f=c["".concat(i,".").concat(m)]||c[m]||d[m]||a;return r?o.createElement(f,s(s({ref:t},p),{},{components:r})):o.createElement(f,s({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[c]="string"==typeof e?e:n,s[1]=l;for(var u=2;u{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=r(7462),n=(r(7294),r(3905));const a={title:"4. Volumes",description:"",sidebar_position:4,contributors:["Jaeyeon Kim"]},s=void 0,l={unversionedId:"kubeflow-dashboard-guide/volumes",id:"version-1.0/kubeflow-dashboard-guide/volumes",title:"4. Volumes",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/volumes.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/volumes",permalink:"/docs/1.0/kubeflow-dashboard-guide/volumes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/volumes.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Volumes",description:"",sidebar_position:4,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Tensorboards",permalink:"/docs/1.0/kubeflow-dashboard-guide/tensorboards"},next:{title:"5. Experiments(AutoML)",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments"}},i={},u=[{value:"Volumes",id:"volumes",level:2},{value:"\ubcfc\ub968 \uc0dd\uc131\ud558\uae30",id:"\ubcfc\ub968-\uc0dd\uc131\ud558\uae30",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...a}=e;return(0,n.kt)(c,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"volumes"},"Volumes"),(0,n.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Volumes\ub97c \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,n.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"volumes",src:r(4144).Z,width:"1386",height:"382"})),(0,n.kt)("p",null,"Volumes \ud0ed\uc740 ",(0,n.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/volumes/"},"Kubernetes\uc758 \ubcfc\ub968(Volume)"),", \uc815\ud655\ud788\ub294 ",(0,n.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/"},"\ud37c\uc2dc\uc2a4\ud134\ud2b8 \ubcfc\ub968 \ud074\ub808\uc784(Persistent Volume Claim, \uc774\ud558 pvc)")," \uc911 \ud604\uc7ac user\uc758 namespace\uc5d0 \uc18d\ud55c pvc\ub97c \uad00\ub9ac\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc704 \uc2a4\ud06c\ub9b0\uc0f7\uc744 \ubcf4\uba74, ",(0,n.kt)("a",{parentName:"p",href:"../kubeflow-dashboard-guide/notebooks"},"1. Notebooks")," \ud398\uc774\uc9c0\uc5d0\uc11c \uc0dd\uc131\ud55c Volume\uc758 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 Volume\uc758 Storage Class\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc124\uce58 \ub2f9\uc2dc \uc124\uce58\ud55c Default Storage Class\uc778 local-path\ub85c \uc124\uc815\ub418\uc5b4\uc788\uc74c\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc774\uc678\uc5d0\ub3c4 user namespace\uc5d0 \uc0c8\ub85c\uc6b4 \ubcfc\ub968\uc744 \uc0dd\uc131\ud558\uac70\ub098, \uc870\ud68c\ud558\uac70\ub098, \uc0ad\uc81c\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0 Volumes \ud398\uc774\uc9c0\ub97c \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("hr",null),(0,n.kt)("h2",{id:"\ubcfc\ub968-\uc0dd\uc131\ud558\uae30"},"\ubcfc\ub968 \uc0dd\uc131\ud558\uae30"),(0,n.kt)("p",null,"\uc624\ub978\ucabd \uc704\uc758 ",(0,n.kt)("inlineCode",{parentName:"p"},"+ NEW VOLUME")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"new-volume",src:r(5166).Z,width:"1192",height:"934"})),(0,n.kt)("p",null,"name, size, storage class, access mode\ub97c \uc9c0\uc815\ud558\uc5ec \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uc6d0\ud558\ub294 \ub9ac\uc18c\uc2a4 \uc2a4\ud399\uc744 \uc9c0\uc815\ud558\uc5ec \uc0dd\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcfc\ub968\uc758 Status\uac00 ",(0,n.kt)("inlineCode",{parentName:"p"},"Pending"),"\uc73c\ub85c \uc870\ud68c\ub429\ub2c8\ub2e4. ",(0,n.kt)("inlineCode",{parentName:"p"},"Status")," \uc544\uc774\ucf58\uc5d0 \ub9c8\uc6b0\uc2a4 \ucee4\uc11c\ub97c \uac00\uc838\ub2e4 \ub300\uba74 ",(0,n.kt)("em",{parentName:"p"},"\ud574\ub2f9 \ubcfc\ub968\uc740 mount\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 first consumer\uac00 \ub098\ud0c0\ub0a0 \ub54c \uc2e4\uc81c\ub85c \uc0dd\uc131\uc744 \uc9c4\ud589\ud55c\ub2e4(This volume will be bound when its first consumer is created.)"),"\ub294 \uba54\uc2dc\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,n.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud558\ub294 ",(0,n.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/storage/storage-classes/"},"StorageClass"),"\uc778 ",(0,n.kt)("inlineCode",{parentName:"p"},"local-path"),"\uc758 \ubcfc\ub968 \uc0dd\uc131 \uc815\ucc45\uc5d0 \ud574\ub2f9\ud558\uba70, ",(0,n.kt)("strong",{parentName:"p"},"\ubb38\uc81c \uc0c1\ud669\uc774 \uc544\ub2d9\ub2c8\ub2e4."),(0,n.kt)("br",{parentName:"p"}),"\n","\ud574\ub2f9 \ud398\uc774\uc9c0\uc5d0\uc11c Status\uac00 ",(0,n.kt)("inlineCode",{parentName:"p"},"Pending")," \uc73c\ub85c \ubcf4\uc774\ub354\ub77c\ub3c4 \ud574\ub2f9 \ubcfc\ub968\uc744 \uc0ac\uc6a9\ud558\uae38 \uc6d0\ud558\ub294 \ub178\ud2b8\ubd81 \uc11c\ubc84 \ud639\uc740 \ud30c\ub4dc(Pod)\uc5d0\uc11c\ub294 \ud574\ub2f9 \ubcfc\ub968\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\uba70, \uadf8\ub54c \uc2e4\uc81c\ub85c \ubcfc\ub968 \uc0dd\uc131\uc774 \uc9c4\ud589\ub429\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"creating-volume",src:r(9658).Z,width:"1572",height:"450"})))}d.isMDXComponent=!0},9658:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/creating-volume-38085f1d8dcc5f1a0f2df336a6ad99e7.png"},6316:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"},5166:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/new-volume-b14c633d4f22b7948f111122da491ccd.png"},4144:(e,t,r)=>{r.d(t,{Z:()=>o});const o=r.p+"assets/images/volumes-8a47fc94771470514efa705ec8b6d0fe.png"}}]); \ No newline at end of file diff --git a/assets/js/cf706b7e.0f34e9b5.js b/assets/js/cf706b7e.0f34e9b5.js new file mode 100644 index 00000000..c3fcddbb --- /dev/null +++ b/assets/js/cf706b7e.0f34e9b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2779],{3905:(e,a,n)=>{n.d(a,{Zo:()=>c,kt:()=>k});var t=n(7294);function l(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var a=1;a=0||(l[n]=e[n]);return l}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=t.createContext({}),p=function(e){var a=t.useContext(i),n=a;return e&&(n="function"==typeof e?e(a):s(s({},a),e)),n},c=function(e){var a=p(e.components);return t.createElement(i.Provider,{value:a},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},d=t.forwardRef((function(e,a){var n=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=p(n),d=l,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||r;return n?t.createElement(k,s(s({ref:a},c),{},{components:n})):t.createElement(k,s({ref:a},c))}));function k(e,a){var n=arguments,l=a&&a.mdxType;if("string"==typeof e||l){var r=n.length,s=new Array(r);s[0]=d;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[m]="string"==typeof e?e:l,s[1]=o;for(var p=2;p{n.r(a),n.d(a,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var t=n(7462),l=(n(7294),n(3905));const r={title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",sidebar_position:2},s=void 0,o={unversionedId:"appendix/metallb",id:"appendix/metallb",title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",description:"MetalLB\ub780?",source:"@site/docs/appendix/metallb.md",sourceDirName:"appendix",slug:"/appendix/metallb",permalink:"/docs/appendix/metallb",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/appendix/metallb.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",permalink:"/docs/appendix/pyenv"},next:{title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",permalink:"/docs/further-readings/info"}},i={},p=[{value:"MetalLB\ub780?",id:"metallb\ub780",level:2},{value:"\uc694\uad6c\uc0ac\ud56d",id:"\uc694\uad6c\uc0ac\ud56d",level:2},{value:"MetalLB \uc124\uce58",id:"metallb-\uc124\uce58",level:2},{value:"Preparation",id:"preparation",level:3},{value:"\uc124\uce58 - Manifest",id:"\uc124\uce58---manifest",level:3},{value:"1. MetalLB \ub97c \uc124\uce58\ud569\ub2c8\ub2e4.",id:"1-metallb-\ub97c-\uc124\uce58\ud569\ub2c8\ub2e4",level:4},{value:"2. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"2-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Layer 2 Configuration",id:"layer-2-configuration",level:3},{value:"metallb_config.yaml",id:"metallb_configyaml",level:4},{value:"MetalLB \uc0ac\uc6a9",id:"metallb-\uc0ac\uc6a9",level:2},{value:"Kubeflow Dashboard",id:"kubeflow-dashboard",level:3},{value:"minio Dashboard",id:"minio-dashboard",level:3},{value:"mlflow Dashboard",id:"mlflow-dashboard",level:3},{value:"Grafana Dashboard",id:"grafana-dashboard",level:3}],c={toc:p},m="wrapper";function u(e){let{components:a,...r}=e;return(0,l.kt)(m,(0,t.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"metallb\ub780"},"MetalLB\ub780?"),(0,l.kt)("p",null,"Kubernetes \uc0ac\uc6a9 \uc2dc AWS, GCP, Azure \uc640 \uac19\uc740 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub294 \uc790\uccb4\uc801\uc73c\ub85c \ub85c\ub4dc \ubca8\ub7f0\uc11c(Load Balancer)\ub97c \uc81c\uacf5\ud574 \uc8fc\uc9c0\ub9cc, \uc628\ud504\ub808\ubbf8\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c\ub294 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ubaa8\ub4c8\uc744 \ucd94\uac00\uc801\uc73c\ub85c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("a",{parentName:"p",href:"https://metallb.universe.tf/"},"MetalLB"),"\ub294 \ubca0\uc5b4\uba54\ud0c8 \ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub85c\ub4dc \ubca8\ub7f0\uc11c\ub97c \uc81c\uacf5\ud558\ub294 \uc624\ud508\uc18c\uc2a4 \ud504\ub85c\uc81d\ud2b8 \uc785\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"\uc694\uad6c\uc0ac\ud56d"},"\uc694\uad6c\uc0ac\ud56d"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"\uc694\uad6c \uc0ac\ud56d"),(0,l.kt)("th",{parentName:"tr",align:null},"\ubc84\uc804 \ubc0f \ub0b4\uc6a9"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Kubernetes"),(0,l.kt)("td",{parentName:"tr",align:null},"\ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc774 \uc5c6\ub294 >= v1.13.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://metallb.universe.tf/installation/network-addons/"},"\ud638\ud658\uac00\ub2a5\ud55c \ub124\ud2b8\uc6cc\ud06c CNI")),(0,l.kt)("td",{parentName:"tr",align:null},"Calico, Canal, Cilium, Flannel, Kube-ovn, Kube-router, Weave Net")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IPv4 \uc8fc\uc18c"),(0,l.kt)("td",{parentName:"tr",align:null},"MetalLB \ubc30\ud3ec\uc5d0 \uc0ac\uc6a9")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BGP \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0"),(0,l.kt)("td",{parentName:"tr",align:null},"BGP \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud558\ub294 \ud558\ub098 \uc774\uc0c1\uc758 \ub77c\uc6b0\ud130")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"\ub178\ub4dc \uac04 \ud3ec\ud2b8 TCP/UDP 7946 \uc624\ud508"),(0,l.kt)("td",{parentName:"tr",align:null},"memberlist \uc694\uad6c \uc0ac\ud56d")))),(0,l.kt)("h2",{id:"metallb-\uc124\uce58"},"MetalLB \uc124\uce58"),(0,l.kt)("h3",{id:"preparation"},"Preparation"),(0,l.kt)("p",null,"IPVS \ubaa8\ub4dc\uc5d0\uc11c kube-proxy\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 Kubernetes v1.14.2 \uc774\ud6c4\ubd80\ud130\ub294 \uc5c4\uaca9\ud55c ARP(strictARP) \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Kube-router\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc5c4\uaca9\ud55c ARP\ub97c \ud65c\uc131\ud654\ud558\ubbc0\ub85c \uc11c\ube44\uc2a4 \ud504\ub85d\uc2dc\ub85c \uc0ac\uc6a9\ud560 \uacbd\uc6b0\uc5d0\ub294 \uc774 \uae30\ub2a5\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\uc5c4\uaca9\ud55c ARP \ubaa8\ub4dc\ub97c \uc801\uc6a9\ud558\uae30\uc5d0 \uc55e\uc11c, \ud604\uc7ac \ubaa8\ub4dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"# see what changes would be made, returns nonzero returncode if different\nkubectl get configmap kube-proxy -n kube-system -o yaml | \\\ngrep strictARP\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"strictARP: false\n")),(0,l.kt)("p",null,"strictARP: false \uac00 \ucd9c\ub825\ub418\ub294 \uacbd\uc6b0 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec strictARP: true\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4.\n(strictARP: true\uac00 \uc774\ubbf8 \ucd9c\ub825\ub41c\ub2e4\uba74 \ub2e4\uc74c \ucee4\ub9e8\ub4dc\ub97c \uc218\ud589\ud558\uc9c0 \uc54a\uc73c\uc154\ub3c4 \ub429\ub2c8\ub2e4.)"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'# actually apply the changes, returns nonzero returncode on errors only\nkubectl get configmap kube-proxy -n kube-system -o yaml | \\\nsed -e "s/strictARP: false/strictARP: true/" | \\\nkubectl apply -f - -n kube-system\n')),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"Warning: resource configmaps/kube-proxy is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.\nconfigmap/kube-proxy configured\n")),(0,l.kt)("h3",{id:"\uc124\uce58---manifest"},"\uc124\uce58 - Manifest"),(0,l.kt)("h4",{id:"1-metallb-\ub97c-\uc124\uce58\ud569\ub2c8\ub2e4"},"1. MetalLB \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml\nkubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml\n")),(0,l.kt)("h4",{id:"2-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"2. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,l.kt)("p",null,"metallb-system namespace \uc758 2 \uac1c\uc758 pod \uc774 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n metallb-system\n")),(0,l.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncontroller-7dcc8764f4-8n92q 1/1 Running 1 1m\nspeaker-fnf8l 1/1 Running 1 1m\n")),(0,l.kt)("p",null,"\ub9e4\ub2c8\ud398\uc2a4\ud2b8\uc758 \uad6c\uc131 \uc694\uc18c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"metallb-system/controller",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"deployment \ub85c \ubc30\ud3ec\ub418\uba70, \ub85c\ub4dc \ubca8\ub7f0\uc2f1\uc744 \uc218\ud589\ud560 external IP \uc8fc\uc18c\uc758 \ud560\ub2f9\uc744 \ucc98\ub9ac\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4."))),(0,l.kt)("li",{parentName:"ul"},"metallb-system/speaker",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"daemonset \ud615\ud0dc\ub85c \ubc30\ud3ec\ub418\uba70, \uc678\ubd80 \ud2b8\ub798\ud53d\uacfc \uc11c\ube44\uc2a4\ub97c \uc5f0\uacb0\ud574 \ub124\ud2b8\uc6cc\ud06c \ud1b5\uc2e0\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \uad6c\uc131\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4.")))),(0,l.kt)("p",null,"\uc11c\ube44\uc2a4\uc5d0\ub294 \ucee8\ud2b8\ub864\ub7ec \ubc0f \uc2a4\ud53c\ucee4\uc640 \uad6c\uc131 \uc694\uc18c\uac00 \uc791\ub3d9\ud558\ub294 \ub370 \ud544\uc694\ud55c RBAC \uc0ac\uc6a9 \uad8c\ud55c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"configuration"},"Configuration"),(0,l.kt)("p",null,"MetalLB \uc758 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uc815\ucc45 \uc124\uc815\uc740 \uad00\ub828 \uc124\uc815 \uc815\ubcf4\ub97c \ub2f4\uc740 configmap \uc744 \ubc30\ud3ec\ud558\uc5ec \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"MetalLB \uc5d0\uc11c \uad6c\uc131\ud560 \uc218 \uc788\ub294 \ubaa8\ub4dc\ub85c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 2\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"https://metallb.universe.tf/concepts/layer2/"},"Layer 2 \ubaa8\ub4dc")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"https://metallb.universe.tf/concepts/bgp/"},"BGP \ubaa8\ub4dc"))),(0,l.kt)("p",null,"\uc5ec\uae30\uc5d0\uc11c\ub294 Layer 2 \ubaa8\ub4dc\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"layer-2-configuration"},"Layer 2 Configuration"),(0,l.kt)("p",null,"Layer 2 \ubaa8\ub4dc\ub294 \uac04\ub2e8\ud558\uac8c \uc0ac\uc6a9\ud560 IP \uc8fc\uc18c\uc758 \ub300\uc5ed\ub9cc \uc124\uc815\ud558\uba74 \ub429\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Layer 2 \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc6cc\ucee4 \ub178\ub4dc\uc758 \ub124\ud2b8\uc6cc\ud06c \uc778\ud130\ud398\uc774\uc2a4\uc5d0 IP\ub97c \ubc14\uc778\ub529 \ud558\uc9c0 \uc54a\uc544\ub3c4 \ub418\ub294\ub370 \ub85c\uceec \ub124\ud2b8\uc6cc\ud06c\uc758 ARP \uc694\uccad\uc5d0 \uc9c1\uc811 \uc751\ub2f5\ud558\uc5ec \ucef4\ud4e8\ud130\uc758 MAC\uc8fc\uc18c\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\ub3d9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub2e4\uc74c ",(0,l.kt)("inlineCode",{parentName:"p"},"metallb_config.yaml")," \ud30c\uc77c\uc740 MetalLB \uac00 192.168.35.100 ~ 192.168.35.110\uc758 IP\uc5d0 \ub300\ud55c \uc81c\uc5b4 \uad8c\ud55c\uc744 \uc81c\uacf5\ud558\uace0 Layer 2 \ubaa8\ub4dc\ub97c \uad6c\uc131\ud558\ub294 \uc124\uc815\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uac00 \ubd84\ub9ac\ub41c \uacbd\uc6b0, 192.168.35.100 ~ 192.168.35.110 \ub300\uc5ed\uc774 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc640 \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc \ubaa8\ub450 \uc811\uadfc \uac00\ub2a5\ud55c \ub300\uc5ed\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,l.kt)("h4",{id:"metallb_configyaml"},"metallb_config.yaml"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nkind: ConfigMap\nmetadata:\n namespace: metallb-system\n name: config\ndata:\n config: |\n address-pools:\n - name: default\n protocol: layer2\n addresses:\n - 192.168.35.100-192.168.35.110 # IP \ub300\uc5ed\ud3ed\n")),(0,l.kt)("p",null,"\uc704\uc758 \uc124\uc815\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-test"},"kubectl apply -f metallb_config.yaml \n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-test"},"configmap/config created\n")),(0,l.kt)("h2",{id:"metallb-\uc0ac\uc6a9"},"MetalLB \uc0ac\uc6a9"),(0,l.kt)("h3",{id:"kubeflow-dashboard"},"Kubeflow Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 kubeflow\uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 istio-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 istio-ingressgateway \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 ",(0,l.kt)("inlineCode",{parentName:"p"},"LoadBalancer"),"\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nistio-ingressgateway ClusterIP 10.103.72.5 15021/TCP,80/TCP,443/TCP,31400/TCP,15443/TCP 4h21m\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"spec:\n clusterIP: 10.103.72.5\n clusterIPs:\n - 10.103.72.5\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: status-port\n port: 15021\n protocol: TCP\n targetPort: 15021\n - name: http2\n port: 80\n protocol: TCP\n targetPort: 8080\n - name: https\n port: 443\n protocol: TCP\n targetPort: 8443\n - name: tcp\n port: 31400\n protocol: TCP\n targetPort: 31400\n - name: tls\n port: 15443\n protocol: TCP\n targetPort: 15443\n selector:\n app: istio-ingressgateway\n istio: ingressgateway\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.100 # Add IP\nstatus:\n loadBalancer: {}\n")),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.100")," \uc778 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nistio-ingressgateway LoadBalancer 10.103.72.5 192.168.35.100 15021:31054/TCP,80:30853/TCP,443:30443/TCP,31400:30012/TCP,15443:31650/TCP 5h1m\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.100"},"http://192.168.35.100")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-istio-ingressgateway-setting.png",src:n(5568).Z,width:"1811",height:"1046"})),(0,l.kt)("h3",{id:"minio-dashboard"},"minio Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 minio \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 kubeflow \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 minio-service \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/minio-service -n kubeflow\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nminio-service ClusterIP 10.109.209.87 9000/TCP 5h14m\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/minio-service -n kubeflow\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n kubectl.kubernetes.io/last-applied-configuration: |\n {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"application-crd-id":"kubeflow-pipelines"},"name":"minio-ser>\n creationTimestamp: "2022-01-05T08:44:23Z"\n labels:\n application-crd-id: kubeflow-pipelines\n name: minio-service\n namespace: kubeflow\n resourceVersion: "21120"\n uid: 0053ee28-4f87-47bb-ad6b-7ad68aa29a48\nspec:\n clusterIP: 10.109.209.87\n clusterIPs:\n - 10.109.209.87\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: http\n port: 9000\n protocol: TCP\n targetPort: 9000\n selector:\n app: minio\n application-crd-id: kubeflow-pipelines\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.101 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.101")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/minio-service -n kubeflow\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nminio-service LoadBalancer 10.109.209.87 192.168.35.101 9000:31371/TCP 5h21m\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.101:9000"},"http://192.168.35.101:9000")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-minio-setting.png",src:n(369).Z,width:"1811",height:"1046"})),(0,l.kt)("h3",{id:"mlflow-dashboard"},"mlflow Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 mlflow \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 mlflow-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 mlflow-server-service \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nmlflow-server-service ClusterIP 10.111.173.209 5000/TCP 4m50s\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n meta.helm.sh/release-name: mlflow-server\n meta.helm.sh/release-namespace: mlflow-system\n creationTimestamp: "2022-01-07T04:00:19Z"\n labels:\n app.kubernetes.io/managed-by: Helm\n name: mlflow-server-service\n namespace: mlflow-system\n resourceVersion: "276246"\n uid: e5d39fb7-ad98-47e7-b512-f9c673055356\nspec:\n clusterIP: 10.111.173.209\n clusterIPs:\n - 10.111.173.209\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - port: 5000\n protocol: TCP\n targetPort: 5000\n selector:\n app.kubernetes.io/name: mlflow-server\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.102 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.102")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nmlflow-server-service LoadBalancer 10.111.173.209 192.168.35.102 5000:32287/TCP 6m11s\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.102:5000"},"http://192.168.35.102:5000")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-mlflow-setting.png",src:n(7827).Z,width:"1922",height:"1082"})),(0,l.kt)("h3",{id:"grafana-dashboard"},"Grafana Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 Grafana \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 seldon-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 seldon-core-analytics-grafana \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nseldon-core-analytics-grafana ClusterIP 10.109.20.161 80/TCP 94s\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n meta.helm.sh/release-name: seldon-core-analytics\n meta.helm.sh/release-namespace: seldon-system\n creationTimestamp: "2022-01-07T04:16:47Z"\n labels:\n app.kubernetes.io/instance: seldon-core-analytics\n app.kubernetes.io/managed-by: Helm\n app.kubernetes.io/name: grafana\n app.kubernetes.io/version: 7.0.3\n helm.sh/chart: grafana-5.1.4\n name: seldon-core-analytics-grafana\n namespace: seldon-system\n resourceVersion: "280605"\n uid: 75073b78-92ec-472c-b0d5-240038ea8fa5\nspec:\n clusterIP: 10.109.20.161\n clusterIPs:\n - 10.109.20.161\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: service\n port: 80\n protocol: TCP\n targetPort: 3000\n selector:\n app.kubernetes.io/instance: seldon-core-analytics\n app.kubernetes.io/name: grafana\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.103 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.103")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nseldon-core-analytics-grafana LoadBalancer 10.109.20.161 192.168.35.103 80:31191/TCP 5m14s\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.103:80"},"http://192.168.35.103:80")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-grafana-setting.png",src:n(2043).Z,width:"1922",height:"1082"})))}u.isMDXComponent=!0},2043:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-grafana-setting-95945b35a1316b2dbd1f0109991c0a0b.png"},5568:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-istio-ingressgateway-setting-3adfcf1bd5c4ddf45c54f4c4b5d4ceab.png"},369:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-minio-setting-78fb86dafe3137ae3ecfbb49e2d7effb.png"},7827:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-mlflow-setting-a4b0d197be47701209a6ef99612e89d6.png"}}]); \ No newline at end of file diff --git a/assets/js/cf706b7e.b3759cd5.js b/assets/js/cf706b7e.b3759cd5.js deleted file mode 100644 index c8728a07..00000000 --- a/assets/js/cf706b7e.b3759cd5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2779],{3905:(e,a,n)=>{n.d(a,{Zo:()=>c,kt:()=>k});var t=n(7294);function l(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var a=1;a=0||(l[n]=e[n]);return l}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=t.createContext({}),p=function(e){var a=t.useContext(i),n=a;return e&&(n="function"==typeof e?e(a):s(s({},a),e)),n},c=function(e){var a=p(e.components);return t.createElement(i.Provider,{value:a},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},d=t.forwardRef((function(e,a){var n=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=p(n),d=l,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||r;return n?t.createElement(k,s(s({ref:a},c),{},{components:n})):t.createElement(k,s({ref:a},c))}));function k(e,a){var n=arguments,l=a&&a.mdxType;if("string"==typeof e||l){var r=n.length,s=new Array(r);s[0]=d;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[m]="string"==typeof e?e:l,s[1]=o;for(var p=2;p{n.r(a),n.d(a,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var t=n(7462),l=(n(7294),n(3905));const r={title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",sidebar_position:2},s=void 0,o={unversionedId:"appendix/metallb",id:"appendix/metallb",title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",description:"MetalLB\ub780?",source:"@site/docs/appendix/metallb.md",sourceDirName:"appendix",slug:"/appendix/metallb",permalink:"/docs/appendix/metallb",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/appendix/metallb.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",permalink:"/docs/appendix/pyenv"},next:{title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",permalink:"/docs/further-readings/info"}},i={},p=[{value:"MetalLB\ub780?",id:"metallb\ub780",level:2},{value:"\uc694\uad6c\uc0ac\ud56d",id:"\uc694\uad6c\uc0ac\ud56d",level:2},{value:"MetalLB \uc124\uce58",id:"metallb-\uc124\uce58",level:2},{value:"Preparation",id:"preparation",level:3},{value:"\uc124\uce58 - Manifest",id:"\uc124\uce58---manifest",level:3},{value:"1. MetalLB \ub97c \uc124\uce58\ud569\ub2c8\ub2e4.",id:"1-metallb-\ub97c-\uc124\uce58\ud569\ub2c8\ub2e4",level:4},{value:"2. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"2-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Layer 2 Configuration",id:"layer-2-configuration",level:3},{value:"metallb_config.yaml",id:"metallb_configyaml",level:4},{value:"MetalLB \uc0ac\uc6a9",id:"metallb-\uc0ac\uc6a9",level:2},{value:"Kubeflow Dashboard",id:"kubeflow-dashboard",level:3},{value:"minio Dashboard",id:"minio-dashboard",level:3},{value:"mlflow Dashboard",id:"mlflow-dashboard",level:3},{value:"Grafana Dashboard",id:"grafana-dashboard",level:3}],c={toc:p},m="wrapper";function u(e){let{components:a,...r}=e;return(0,l.kt)(m,(0,t.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"metallb\ub780"},"MetalLB\ub780?"),(0,l.kt)("p",null,"Kubernetes \uc0ac\uc6a9 \uc2dc AWS, GCP, Azure \uc640 \uac19\uc740 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub294 \uc790\uccb4\uc801\uc73c\ub85c \ub85c\ub4dc \ubca8\ub7f0\uc11c(Load Balancer)\ub97c \uc81c\uacf5\ud574 \uc8fc\uc9c0\ub9cc, \uc628\ud504\ub808\ubbf8\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c\ub294 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ubaa8\ub4c8\uc744 \ucd94\uac00\uc801\uc73c\ub85c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("a",{parentName:"p",href:"https://metallb.universe.tf/"},"MetalLB"),"\ub294 \ubca0\uc5b4\uba54\ud0c8 \ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub85c\ub4dc \ubca8\ub7f0\uc11c\ub97c \uc81c\uacf5\ud558\ub294 \uc624\ud508\uc18c\uc2a4 \ud504\ub85c\uc81d\ud2b8 \uc785\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"\uc694\uad6c\uc0ac\ud56d"},"\uc694\uad6c\uc0ac\ud56d"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"\uc694\uad6c \uc0ac\ud56d"),(0,l.kt)("th",{parentName:"tr",align:null},"\ubc84\uc804 \ubc0f \ub0b4\uc6a9"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Kubernetes"),(0,l.kt)("td",{parentName:"tr",align:null},"\ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc774 \uc5c6\ub294 >= v1.13.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://metallb.universe.tf/installation/network-addons/"},"\ud638\ud658\uac00\ub2a5\ud55c \ub124\ud2b8\uc6cc\ud06c CNI")),(0,l.kt)("td",{parentName:"tr",align:null},"Calico, Canal, Cilium, Flannel, Kube-ovn, Kube-router, Weave Net")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IPv4 \uc8fc\uc18c"),(0,l.kt)("td",{parentName:"tr",align:null},"MetalLB \ubc30\ud3ec\uc5d0 \uc0ac\uc6a9")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BGP \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0"),(0,l.kt)("td",{parentName:"tr",align:null},"BGP \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud558\ub294 \ud558\ub098 \uc774\uc0c1\uc758 \ub77c\uc6b0\ud130")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"\ub178\ub4dc \uac04 \ud3ec\ud2b8 TCP/UDP 7946 \uc624\ud508"),(0,l.kt)("td",{parentName:"tr",align:null},"memberlist \uc694\uad6c \uc0ac\ud56d")))),(0,l.kt)("h2",{id:"metallb-\uc124\uce58"},"MetalLB \uc124\uce58"),(0,l.kt)("h3",{id:"preparation"},"Preparation"),(0,l.kt)("p",null,"IPVS \ubaa8\ub4dc\uc5d0\uc11c kube-proxy\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 Kubernetes v1.14.2 \uc774\ud6c4\ubd80\ud130\ub294 \uc5c4\uaca9\ud55c ARP(strictARP) \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Kube-router\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc5c4\uaca9\ud55c ARP\ub97c \ud65c\uc131\ud654\ud558\ubbc0\ub85c \uc11c\ube44\uc2a4 \ud504\ub85d\uc2dc\ub85c \uc0ac\uc6a9\ud560 \uacbd\uc6b0\uc5d0\ub294 \uc774 \uae30\ub2a5\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\uc5c4\uaca9\ud55c ARP \ubaa8\ub4dc\ub97c \uc801\uc6a9\ud558\uae30\uc5d0 \uc55e\uc11c, \ud604\uc7ac \ubaa8\ub4dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"# see what changes would be made, returns nonzero returncode if different\nkubectl get configmap kube-proxy -n kube-system -o yaml | \\\ngrep strictARP\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"strictARP: false\n")),(0,l.kt)("p",null,"strictARP: false \uac00 \ucd9c\ub825\ub418\ub294 \uacbd\uc6b0 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec strictARP: true\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4.\n(strictARP: true\uac00 \uc774\ubbf8 \ucd9c\ub825\ub41c\ub2e4\uba74 \ub2e4\uc74c \ucee4\ub9e8\ub4dc\ub97c \uc218\ud589\ud558\uc9c0 \uc54a\uc73c\uc154\ub3c4 \ub429\ub2c8\ub2e4.)"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'# actually apply the changes, returns nonzero returncode on errors only\nkubectl get configmap kube-proxy -n kube-system -o yaml | \\\nsed -e "s/strictARP: false/strictARP: true/" | \\\nkubectl apply -f - -n kube-system\n')),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"Warning: resource configmaps/kube-proxy is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.\nconfigmap/kube-proxy configured\n")),(0,l.kt)("h3",{id:"\uc124\uce58---manifest"},"\uc124\uce58 - Manifest"),(0,l.kt)("h4",{id:"1-metallb-\ub97c-\uc124\uce58\ud569\ub2c8\ub2e4"},"1. MetalLB \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml\nkubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml\n")),(0,l.kt)("h4",{id:"2-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"2. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,l.kt)("p",null,"metallb-system namespace \uc758 2 \uac1c\uc758 pod \uc774 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n metallb-system\n")),(0,l.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncontroller-7dcc8764f4-8n92q 1/1 Running 1 1m\nspeaker-fnf8l 1/1 Running 1 1m\n")),(0,l.kt)("p",null,"\ub9e4\ub2c8\ud398\uc2a4\ud2b8\uc758 \uad6c\uc131 \uc694\uc18c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"metallb-system/controller",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"deployment \ub85c \ubc30\ud3ec\ub418\uba70, \ub85c\ub4dc \ubca8\ub7f0\uc2f1\uc744 \uc218\ud589\ud560 external IP \uc8fc\uc18c\uc758 \ud560\ub2f9\uc744 \ucc98\ub9ac\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4."))),(0,l.kt)("li",{parentName:"ul"},"metallb-system/speaker",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"daemonset \ud615\ud0dc\ub85c \ubc30\ud3ec\ub418\uba70, \uc678\ubd80 \ud2b8\ub798\ud53d\uacfc \uc11c\ube44\uc2a4\ub97c \uc5f0\uacb0\ud574 \ub124\ud2b8\uc6cc\ud06c \ud1b5\uc2e0\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \uad6c\uc131\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4.")))),(0,l.kt)("p",null,"\uc11c\ube44\uc2a4\uc5d0\ub294 \ucee8\ud2b8\ub864\ub7ec \ubc0f \uc2a4\ud53c\ucee4\uc640 \uad6c\uc131 \uc694\uc18c\uac00 \uc791\ub3d9\ud558\ub294 \ub370 \ud544\uc694\ud55c RBAC \uc0ac\uc6a9 \uad8c\ud55c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"configuration"},"Configuration"),(0,l.kt)("p",null,"MetalLB \uc758 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uc815\ucc45 \uc124\uc815\uc740 \uad00\ub828 \uc124\uc815 \uc815\ubcf4\ub97c \ub2f4\uc740 configmap \uc744 \ubc30\ud3ec\ud558\uc5ec \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"MetalLB \uc5d0\uc11c \uad6c\uc131\ud560 \uc218 \uc788\ub294 \ubaa8\ub4dc\ub85c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 2\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"https://metallb.universe.tf/concepts/layer2/"},"Layer 2 \ubaa8\ub4dc")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"https://metallb.universe.tf/concepts/bgp/"},"BGP \ubaa8\ub4dc"))),(0,l.kt)("p",null,"\uc5ec\uae30\uc5d0\uc11c\ub294 Layer 2 \ubaa8\ub4dc\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"layer-2-configuration"},"Layer 2 Configuration"),(0,l.kt)("p",null,"Layer 2 \ubaa8\ub4dc\ub294 \uac04\ub2e8\ud558\uac8c \uc0ac\uc6a9\ud560 IP \uc8fc\uc18c\uc758 \ub300\uc5ed\ub9cc \uc124\uc815\ud558\uba74 \ub429\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Layer 2 \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc6cc\ucee4 \ub178\ub4dc\uc758 \ub124\ud2b8\uc6cc\ud06c \uc778\ud130\ud398\uc774\uc2a4\uc5d0 IP\ub97c \ubc14\uc778\ub529 \ud558\uc9c0 \uc54a\uc544\ub3c4 \ub418\ub294\ub370 \ub85c\uceec \ub124\ud2b8\uc6cc\ud06c\uc758 ARP \uc694\uccad\uc5d0 \uc9c1\uc811 \uc751\ub2f5\ud558\uc5ec \ucef4\ud4e8\ud130\uc758 MAC\uc8fc\uc18c\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\ub3d9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub2e4\uc74c ",(0,l.kt)("inlineCode",{parentName:"p"},"metallb_config.yaml")," \ud30c\uc77c\uc740 MetalLB \uac00 192.168.35.100 ~ 192.168.35.110\uc758 IP\uc5d0 \ub300\ud55c \uc81c\uc5b4 \uad8c\ud55c\uc744 \uc81c\uacf5\ud558\uace0 Layer 2 \ubaa8\ub4dc\ub97c \uad6c\uc131\ud558\ub294 \uc124\uc815\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uac00 \ubd84\ub9ac\ub41c \uacbd\uc6b0, 192.168.35.100 ~ 192.168.35.110 \ub300\uc5ed\uc774 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc640 \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc \ubaa8\ub450 \uc811\uadfc \uac00\ub2a5\ud55c \ub300\uc5ed\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,l.kt)("h4",{id:"metallb_configyaml"},"metallb_config.yaml"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nkind: ConfigMap\nmetadata:\n namespace: metallb-system\n name: config\ndata:\n config: |\n address-pools:\n - name: default\n protocol: layer2\n addresses:\n - 192.168.35.100-192.168.35.110 # IP \ub300\uc5ed\ud3ed\n")),(0,l.kt)("p",null,"\uc704\uc758 \uc124\uc815\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-test"},"kubectl apply -f metallb_config.yaml \n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-test"},"configmap/config created\n")),(0,l.kt)("h2",{id:"metallb-\uc0ac\uc6a9"},"MetalLB \uc0ac\uc6a9"),(0,l.kt)("h3",{id:"kubeflow-dashboard"},"Kubeflow Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 kubeflow\uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 istio-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 istio-ingressgateway \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 ",(0,l.kt)("inlineCode",{parentName:"p"},"LoadBalancer"),"\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nistio-ingressgateway ClusterIP 10.103.72.5 15021/TCP,80/TCP,443/TCP,31400/TCP,15443/TCP 4h21m\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"spec:\n clusterIP: 10.103.72.5\n clusterIPs:\n - 10.103.72.5\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: status-port\n port: 15021\n protocol: TCP\n targetPort: 15021\n - name: http2\n port: 80\n protocol: TCP\n targetPort: 8080\n - name: https\n port: 443\n protocol: TCP\n targetPort: 8443\n - name: tcp\n port: 31400\n protocol: TCP\n targetPort: 31400\n - name: tls\n port: 15443\n protocol: TCP\n targetPort: 15443\n selector:\n app: istio-ingressgateway\n istio: ingressgateway\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.100 # Add IP\nstatus:\n loadBalancer: {}\n")),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.100")," \uc778 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nistio-ingressgateway LoadBalancer 10.103.72.5 192.168.35.100 15021:31054/TCP,80:30853/TCP,443:30443/TCP,31400:30012/TCP,15443:31650/TCP 5h1m\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.100"},"http://192.168.35.100")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-istio-ingressgateway-setting.png",src:n(5568).Z,width:"1811",height:"1046"})),(0,l.kt)("h3",{id:"minio-dashboard"},"minio Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 minio \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 kubeflow \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 minio-service \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/minio-service -n kubeflow\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nminio-service ClusterIP 10.109.209.87 9000/TCP 5h14m\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/minio-service -n kubeflow\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n kubectl.kubernetes.io/last-applied-configuration: |\n {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"application-crd-id":"kubeflow-pipelines"},"name":"minio-ser>\n creationTimestamp: "2022-01-05T08:44:23Z"\n labels:\n application-crd-id: kubeflow-pipelines\n name: minio-service\n namespace: kubeflow\n resourceVersion: "21120"\n uid: 0053ee28-4f87-47bb-ad6b-7ad68aa29a48\nspec:\n clusterIP: 10.109.209.87\n clusterIPs:\n - 10.109.209.87\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: http\n port: 9000\n protocol: TCP\n targetPort: 9000\n selector:\n app: minio\n application-crd-id: kubeflow-pipelines\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.101 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.101")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/minio-service -n kubeflow\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nminio-service LoadBalancer 10.109.209.87 192.168.35.101 9000:31371/TCP 5h21m\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.101:9000"},"http://192.168.35.101:9000")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-minio-setting.png",src:n(369).Z,width:"1811",height:"1046"})),(0,l.kt)("h3",{id:"mlflow-dashboard"},"mlflow Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 mlflow \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 mlflow-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 mlflow-server-service \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nmlflow-server-service ClusterIP 10.111.173.209 5000/TCP 4m50s\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n meta.helm.sh/release-name: mlflow-server\n meta.helm.sh/release-namespace: mlflow-system\n creationTimestamp: "2022-01-07T04:00:19Z"\n labels:\n app.kubernetes.io/managed-by: Helm\n name: mlflow-server-service\n namespace: mlflow-system\n resourceVersion: "276246"\n uid: e5d39fb7-ad98-47e7-b512-f9c673055356\nspec:\n clusterIP: 10.111.173.209\n clusterIPs:\n - 10.111.173.209\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - port: 5000\n protocol: TCP\n targetPort: 5000\n selector:\n app.kubernetes.io/name: mlflow-server\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.102 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.102")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nmlflow-server-service LoadBalancer 10.111.173.209 192.168.35.102 5000:32287/TCP 6m11s\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.102:5000"},"http://192.168.35.102:5000")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-mlflow-setting.png",src:n(7827).Z,width:"1922",height:"1082"})),(0,l.kt)("h3",{id:"grafana-dashboard"},"Grafana Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 Grafana \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 seldon-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 seldon-core-analytics-grafana \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nseldon-core-analytics-grafana ClusterIP 10.109.20.161 80/TCP 94s\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n meta.helm.sh/release-name: seldon-core-analytics\n meta.helm.sh/release-namespace: seldon-system\n creationTimestamp: "2022-01-07T04:16:47Z"\n labels:\n app.kubernetes.io/instance: seldon-core-analytics\n app.kubernetes.io/managed-by: Helm\n app.kubernetes.io/name: grafana\n app.kubernetes.io/version: 7.0.3\n helm.sh/chart: grafana-5.1.4\n name: seldon-core-analytics-grafana\n namespace: seldon-system\n resourceVersion: "280605"\n uid: 75073b78-92ec-472c-b0d5-240038ea8fa5\nspec:\n clusterIP: 10.109.20.161\n clusterIPs:\n - 10.109.20.161\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: service\n port: 80\n protocol: TCP\n targetPort: 3000\n selector:\n app.kubernetes.io/instance: seldon-core-analytics\n app.kubernetes.io/name: grafana\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.103 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.103")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nseldon-core-analytics-grafana LoadBalancer 10.109.20.161 192.168.35.103 80:31191/TCP 5m14s\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.103:80"},"http://192.168.35.103:80")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-grafana-setting.png",src:n(2043).Z,width:"1922",height:"1082"})))}u.isMDXComponent=!0},2043:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-grafana-setting-95945b35a1316b2dbd1f0109991c0a0b.png"},5568:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-istio-ingressgateway-setting-3adfcf1bd5c4ddf45c54f4c4b5d4ceab.png"},369:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-minio-setting-78fb86dafe3137ae3ecfbb49e2d7effb.png"},7827:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-mlflow-setting-a4b0d197be47701209a6ef99612e89d6.png"}}]); \ No newline at end of file diff --git a/assets/js/d0b69af8.4047a2b7.js b/assets/js/d0b69af8.4047a2b7.js new file mode 100644 index 00000000..49794dd5 --- /dev/null +++ b/assets/js/d0b69af8.4047a2b7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2429],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),i=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=i(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=i(n),m=r,h=d["".concat(p,".").concat(m)]||d[m]||u[m]||o;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:r,l[1]=s;for(var i=2;i{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var a=n(7462),r=(n(7294),n(3905));const o={title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",sidebar_position:4,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},l=void 0,s={unversionedId:"setup-components/install-components-pg",id:"version-1.0/setup-components/install-components-pg",title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",source:"@site/versioned_docs/version-1.0/setup-components/install-components-pg.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-pg",permalink:"/docs/1.0/setup-components/install-components-pg",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-components/install-components-pg.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",sidebar_position:4,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Seldon-Core",permalink:"/docs/1.0/setup-components/install-components-seldon"},next:{title:"1. Central Dashboard",permalink:"/docs/1.0/kubeflow-dashboard-guide/intro"}},p={},i=[{value:"Prometheus & Grafana",id:"prometheus--grafana",level:2},{value:"Helm Repository \ucd94\uac00",id:"helm-repository-\ucd94\uac00",level:3},{value:"Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Helm Install",id:"helm-install",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:3},{value:"References",id:"references",level:2}],c={toc:i},d="wrapper";function u(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,a.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"prometheus--grafana"},"Prometheus & Grafana"),(0,r.kt)("p",null,"\ud504\ub85c\uba54\ud14c\uc6b0\uc2a4(Prometheus) \uc640 \uadf8\ub77c\ud30c\ub098(Grafana) \ub294 \ubaa8\ub2c8\ud130\ub9c1\uc744 \uc704\ud55c \ub3c4\uad6c\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc548\uc815\uc801\uc778 \uc11c\ube44\uc2a4 \uc6b4\uc601\uc744 \uc704\ud574\uc11c\ub294 \uc11c\ube44\uc2a4\uc640 \uc11c\ube44\uc2a4\uac00 \uc6b4\uc601\ub418\uace0 \uc788\ub294 \uc778\ud504\ub77c\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\ud574\uc11c \uad00\ucc30\ud558\uace0, \uad00\ucc30\ud55c \uba54\ud2b8\ub9ad\uc744 \ubc14\ud0d5\uc73c\ub85c \ubb38\uc81c\uac00 \uc0dd\uae38 \ub54c \ube60\ub974\uac8c \ub300\uc751\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ubaa8\ub2c8\ud130\ub9c1\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc218\ud589\ud558\uae30 \uc704\ud55c \ub9ce\uc740 \ub3c4\uad6c \uc911 ",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc624\ud508\uc18c\uc2a4\uc778 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://prometheus.io/docs/introduction/overview/"},"Prometheus \uacf5\uc2dd \ubb38\uc11c"),", ",(0,r.kt)("a",{parentName:"p",href:"https://grafana.com/docs/"},"Grafana \uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ud655\uc778\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\ub294 \ub2e4\uc591\ud55c \ub300\uc0c1\uc73c\ub85c\ubd80\ud130 Metric\uc744 \uc218\uc9d1\ud558\ub294 \ub3c4\uad6c\uc774\uba70, \uadf8\ub77c\ud30c\ub098\ub294 \ubaa8\uc778 \ub370\uc774\ud130\ub97c \uc2dc\uac01\ud654\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc11c\ub85c \uac04\uc758 \uc885\uc18d\uc131\uc740 \uc5c6\uc9c0\ub9cc \uc0c1\ud638 \ubcf4\uc644\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5b4 \ud568\uaed8 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc124\uce58\ud55c \ub4a4, Seldon-Core \ub85c \uc0dd\uc131\ud55c SeldonDeployment \ub85c API \uc694\uccad\uc744 \ubcf4\ub0b4, \uc815\uc0c1\uc801\uc73c\ub85c Metrics \uc774 \uc218\uc9d1\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ubcf8 \uae00\uc5d0\uc11c\ub294 seldonio/seldon-core-analytics Helm Chart 1.12.0 \ubc84\uc804\uc744 \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc124\uce58\ud558\uace0, Seldon-Core \uc5d0\uc11c \uc0dd\uc131\ud55c SeldonDeployment\uc758 Metrics \uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ud655\uc778\ud558\uae30 \uc704\ud55c \ub300\uc2dc\ubcf4\ub4dc\ub3c4 \ud568\uaed8 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"helm-repository-\ucd94\uac00"},"Helm Repository \ucd94\uac00"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add seldonio https://storage.googleapis.com/seldon-charts\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'"seldonio" has been added to your repositories\n')),(0,r.kt)("h3",{id:"helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "seldonio" chart repository\n...Successfully got an update from the "datawire" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,r.kt)("h3",{id:"helm-install"},"Helm Install"),(0,r.kt)("p",null,"seldon-core-analytics Helm Chart 1.12.0 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm install seldon-core-analytics seldonio/seldon-core-analytics \\\n --namespace seldon-system \\\n --version 1.12.0\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\nNAME: seldon-core-analytics\nLAST DEPLOYED: Tue Dec 14 18:29:38 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system | grep seldon-core-analytics\n")),(0,r.kt)("p",null,"seldon-system namespace \uc5d0 6\uac1c\uc758 seldon-core-analytics \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-core-analytics-grafana-657c956c88-ng8wn 2/2 Running 0 114s\nseldon-core-analytics-kube-state-metrics-94bb6cb9-svs82 1/1 Running 0 114s\nseldon-core-analytics-prometheus-alertmanager-64cf7b8f5-nxbl8 2/2 Running 0 114s\nseldon-core-analytics-prometheus-node-exporter-5rrj5 1/1 Running 0 114s\nseldon-core-analytics-prometheus-pushgateway-8476474cff-sr4n6 1/1 Running 0 114s\nseldon-core-analytics-prometheus-seldon-685c664894-7cr45 2/2 Running 0 114s\n")),(0,r.kt)("h3",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uadf8\ub77c\ud30c\ub098\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc811\uc18d\ud558\uae30 \uc704\ud574, \ud3ec\ud2b8\ud3ec\uc6cc\ub529\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/seldon-core-analytics-grafana -n seldon-system 8090:80\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:8090"},"localhost:8090"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"grafana-install",src:n(7796).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc811\uc18d\uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Email or username : ",(0,r.kt)("inlineCode",{parentName:"li"},"admin")),(0,r.kt)("li",{parentName:"ul"},"Password : ",(0,r.kt)("inlineCode",{parentName:"li"},"password"))),(0,r.kt)("p",null,"\ub85c\uadf8\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"grafana-login",src:n(7397).Z,width:"3640",height:"2140"})),(0,r.kt)("p",null,"\uc88c\uce21\uc758 \ub300\uc2dc\ubcf4\ub4dc \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"Manage")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dashboard-click",src:n(426).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"\uae30\ubcf8\uc801\uc778 \uadf8\ub77c\ud30c\ub098 \ub300\uc2dc\ubcf4\ub4dc\uac00 \ud3ec\ud568\ub418\uc5b4\uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"Prediction Analytics")," \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dashboard",src:n(6274).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"Seldon Core API Dashboard \uac00 \ubcf4\uc774\uace0, \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"seldon-dashboard",src:n(1095).Z,width:"5016",height:"2826"})),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core/tree/master/helm-charts/seldon-core-analytics"},"Seldon-Core-Analytics Helm Chart"))))}u.isMDXComponent=!0},426:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dashboard-click-868bcd267717917295a8f9627d6c522e.png"},6274:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dashboard-ee3d0192807699b2515d184ff00f426d.png"},7796:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/grafana-install-4ca59cc00fad5ee1a50d91f30ab89bb1.png"},7397:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/grafana-login-b91326a2a0082ffb560ad1b30d381091.png"},1095:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/seldon-dashboard-01eccd6a30aac640474edef01050d277.png"}}]); \ No newline at end of file diff --git a/assets/js/d0b69af8.537244eb.js b/assets/js/d0b69af8.537244eb.js deleted file mode 100644 index 0dcbf6d8..00000000 --- a/assets/js/d0b69af8.537244eb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2429],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),i=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=i(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=i(n),m=r,h=d["".concat(p,".").concat(m)]||d[m]||u[m]||o;return n?a.createElement(h,l(l({ref:t},c),{},{components:n})):a.createElement(h,l({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:r,l[1]=s;for(var i=2;i{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var a=n(7462),r=(n(7294),n(3905));const o={title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",sidebar_position:4,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},l=void 0,s={unversionedId:"setup-components/install-components-pg",id:"version-1.0/setup-components/install-components-pg",title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",source:"@site/versioned_docs/version-1.0/setup-components/install-components-pg.md",sourceDirName:"setup-components",slug:"/setup-components/install-components-pg",permalink:"/docs/1.0/setup-components/install-components-pg",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-components/install-components-pg.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Prometheus & Grafana",description:"\uad6c\uc131\uc694\uc18c \uc124\uce58 - Prometheus & Grafana",sidebar_position:4,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Seldon-Core",permalink:"/docs/1.0/setup-components/install-components-seldon"},next:{title:"1. Central Dashboard",permalink:"/docs/1.0/kubeflow-dashboard-guide/intro"}},p={},i=[{value:"Prometheus & Grafana",id:"prometheus--grafana",level:2},{value:"Helm Repository \ucd94\uac00",id:"helm-repository-\ucd94\uac00",level:3},{value:"Helm Repository \uc5c5\ub370\uc774\ud2b8",id:"helm-repository-\uc5c5\ub370\uc774\ud2b8",level:3},{value:"Helm Install",id:"helm-install",level:3},{value:"\uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:3},{value:"References",id:"references",level:2}],c={toc:i},d="wrapper";function u(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,a.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"prometheus--grafana"},"Prometheus & Grafana"),(0,r.kt)("p",null,"\ud504\ub85c\uba54\ud14c\uc6b0\uc2a4(Prometheus) \uc640 \uadf8\ub77c\ud30c\ub098(Grafana) \ub294 \ubaa8\ub2c8\ud130\ub9c1\uc744 \uc704\ud55c \ub3c4\uad6c\uc785\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc548\uc815\uc801\uc778 \uc11c\ube44\uc2a4 \uc6b4\uc601\uc744 \uc704\ud574\uc11c\ub294 \uc11c\ube44\uc2a4\uc640 \uc11c\ube44\uc2a4\uac00 \uc6b4\uc601\ub418\uace0 \uc788\ub294 \uc778\ud504\ub77c\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\ud574\uc11c \uad00\ucc30\ud558\uace0, \uad00\ucc30\ud55c \uba54\ud2b8\ub9ad\uc744 \ubc14\ud0d5\uc73c\ub85c \ubb38\uc81c\uac00 \uc0dd\uae38 \ub54c \ube60\ub974\uac8c \ub300\uc751\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ubaa8\ub2c8\ud130\ub9c1\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc218\ud589\ud558\uae30 \uc704\ud55c \ub9ce\uc740 \ub3c4\uad6c \uc911 ",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc624\ud508\uc18c\uc2a4\uc778 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc0ac\uc6a9\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 ",(0,r.kt)("a",{parentName:"p",href:"https://prometheus.io/docs/introduction/overview/"},"Prometheus \uacf5\uc2dd \ubb38\uc11c"),", ",(0,r.kt)("a",{parentName:"p",href:"https://grafana.com/docs/"},"Grafana \uacf5\uc2dd \ubb38\uc11c"),"\ub97c \ud655\uc778\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\ub294 \ub2e4\uc591\ud55c \ub300\uc0c1\uc73c\ub85c\ubd80\ud130 Metric\uc744 \uc218\uc9d1\ud558\ub294 \ub3c4\uad6c\uc774\uba70, \uadf8\ub77c\ud30c\ub098\ub294 \ubaa8\uc778 \ub370\uc774\ud130\ub97c \uc2dc\uac01\ud654\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc11c\ub85c \uac04\uc758 \uc885\uc18d\uc131\uc740 \uc5c6\uc9c0\ub9cc \uc0c1\ud638 \ubcf4\uc644\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5b4 \ud568\uaed8 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc124\uce58\ud55c \ub4a4, Seldon-Core \ub85c \uc0dd\uc131\ud55c SeldonDeployment \ub85c API \uc694\uccad\uc744 \ubcf4\ub0b4, \uc815\uc0c1\uc801\uc73c\ub85c Metrics \uc774 \uc218\uc9d1\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ubcf8 \uae00\uc5d0\uc11c\ub294 seldonio/seldon-core-analytics Helm Chart 1.12.0 \ubc84\uc804\uc744 \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\ub97c \uc124\uce58\ud558\uace0, Seldon-Core \uc5d0\uc11c \uc0dd\uc131\ud55c SeldonDeployment\uc758 Metrics \uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ud655\uc778\ud558\uae30 \uc704\ud55c \ub300\uc2dc\ubcf4\ub4dc\ub3c4 \ud568\uaed8 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"helm-repository-\ucd94\uac00"},"Helm Repository \ucd94\uac00"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo add seldonio https://storage.googleapis.com/seldon-charts\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'"seldonio" has been added to your repositories\n')),(0,r.kt)("h3",{id:"helm-repository-\uc5c5\ub370\uc774\ud2b8"},"Helm Repository \uc5c5\ub370\uc774\ud2b8"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm repo update\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'Hang tight while we grab the latest from your chart repositories...\n...Successfully got an update from the "seldonio" chart repository\n...Successfully got an update from the "datawire" chart repository\nUpdate Complete. \u2388Happy Helming!\u2388\n')),(0,r.kt)("h3",{id:"helm-install"},"Helm Install"),(0,r.kt)("p",null,"seldon-core-analytics Helm Chart 1.12.0 \ubc84\uc804\uc744 \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"helm install seldon-core-analytics seldonio/seldon-core-analytics \\\n --namespace seldon-system \\\n --version 1.12.0\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"\uc0dd\ub7b5...\nNAME: seldon-core-analytics\nLAST DEPLOYED: Tue Dec 14 18:29:38 2021\nNAMESPACE: seldon-system\nSTATUS: deployed\nREVISION: 1\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n seldon-system | grep seldon-core-analytics\n")),(0,r.kt)("p",null,"seldon-system namespace \uc5d0 6\uac1c\uc758 seldon-core-analytics \uad00\ub828 pod \uac00 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-core-analytics-grafana-657c956c88-ng8wn 2/2 Running 0 114s\nseldon-core-analytics-kube-state-metrics-94bb6cb9-svs82 1/1 Running 0 114s\nseldon-core-analytics-prometheus-alertmanager-64cf7b8f5-nxbl8 2/2 Running 0 114s\nseldon-core-analytics-prometheus-node-exporter-5rrj5 1/1 Running 0 114s\nseldon-core-analytics-prometheus-pushgateway-8476474cff-sr4n6 1/1 Running 0 114s\nseldon-core-analytics-prometheus-seldon-685c664894-7cr45 2/2 Running 0 114s\n")),(0,r.kt)("h3",{id:"\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"\uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \uadf8\ub77c\ud30c\ub098\uc5d0 \uc815\uc0c1\uc801\uc73c\ub85c \uc811\uc18d\ub418\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc6b0\uc120 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc5d0\uc11c \uc811\uc18d\ud558\uae30 \uc704\ud574, \ud3ec\ud2b8\ud3ec\uc6cc\ub529\uc744 \uc218\ud589\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/seldon-core-analytics-grafana -n seldon-system 8090:80\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 ",(0,r.kt)("a",{parentName:"p",href:"http://localhost:8090"},"localhost:8090"),"\uc73c\ub85c \uc811\uc18d\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"grafana-install",src:n(7796).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uc811\uc18d\uc815\ubcf4\ub97c \uc785\ub825\ud558\uc5ec \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Email or username : ",(0,r.kt)("inlineCode",{parentName:"li"},"admin")),(0,r.kt)("li",{parentName:"ul"},"Password : ",(0,r.kt)("inlineCode",{parentName:"li"},"password"))),(0,r.kt)("p",null,"\ub85c\uadf8\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"grafana-login",src:n(7397).Z,width:"3640",height:"2140"})),(0,r.kt)("p",null,"\uc88c\uce21\uc758 \ub300\uc2dc\ubcf4\ub4dc \uc544\uc774\ucf58\uc744 \ud074\ub9ad\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"Manage")," \ubc84\ud2bc\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dashboard-click",src:n(426).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"\uae30\ubcf8\uc801\uc778 \uadf8\ub77c\ud30c\ub098 \ub300\uc2dc\ubcf4\ub4dc\uac00 \ud3ec\ud568\ub418\uc5b4\uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc911 ",(0,r.kt)("inlineCode",{parentName:"p"},"Prediction Analytics")," \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dashboard",src:n(6274).Z,width:"5016",height:"2826"})),(0,r.kt)("p",null,"Seldon Core API Dashboard \uac00 \ubcf4\uc774\uace0, \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"seldon-dashboard",src:n(1095).Z,width:"5016",height:"2826"})),(0,r.kt)("h2",{id:"references"},"References"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core/tree/master/helm-charts/seldon-core-analytics"},"Seldon-Core-Analytics Helm Chart"))))}u.isMDXComponent=!0},426:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dashboard-click-868bcd267717917295a8f9627d6c522e.png"},6274:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dashboard-ee3d0192807699b2515d184ff00f426d.png"},7796:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/grafana-install-4ca59cc00fad5ee1a50d91f30ab89bb1.png"},7397:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/grafana-login-b91326a2a0082ffb560ad1b30d381091.png"},1095:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/seldon-dashboard-01eccd6a30aac640474edef01050d277.png"}}]); \ No newline at end of file diff --git a/assets/js/d3303310.07acda0b.js b/assets/js/d3303310.07acda0b.js new file mode 100644 index 00000000..9f5b52bf --- /dev/null +++ b/assets/js/d3303310.07acda0b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[7346],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,k=d["".concat(s,".").concat(m)]||d[m]||c[m]||i;return t?a.createElement(k,o(o({ref:n},u),{},{components:t})):a.createElement(k,o({ref:n},u))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:r,o[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=t(7462),r=(t(7294),t(3905));const i={title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",sidebar_position:6,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,l={unversionedId:"setup-kubernetes/setup-nvidia-gpu",id:"version-1.0/setup-kubernetes/setup-nvidia-gpu",title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",source:"@site/versioned_docs/version-1.0/setup-kubernetes/setup-nvidia-gpu.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/setup-nvidia-gpu",permalink:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/setup-nvidia-gpu.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:6,frontMatter:{title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",sidebar_position:6,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"5. Install Kubernetes Modules",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes-module"},next:{title:"1. Kubeflow",permalink:"/docs/1.0/setup-components/install-components-kf"}},s={},p=[{value:"1. Install NVIDIA Driver",id:"1-install-nvidia-driver",level:2},{value:"2. NVIDIA-Docker \uc124\uce58",id:"2-nvidia-docker-\uc124\uce58",level:2},{value:"3. NVIDIA-Docker\ub97c Default Container Runtime\uc73c\ub85c \uc124\uc815",id:"3-nvidia-docker\ub97c-default-container-runtime\uc73c\ub85c-\uc124\uc815",level:2},{value:"4. Nvidia-Device-Plugin",id:"4-nvidia-device-plugin",level:2}],u={toc:p},d="wrapper";function c(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ubc0f Kubeflow \ub4f1\uc5d0\uc11c GP \ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"1-install-nvidia-driver"},"1. Install NVIDIA Driver"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"nvidia-smi")," \uc218\ud589 \uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub41c\ub2e4\uba74 \uc774 \ub2e8\uacc4\ub294 \uc0dd\ub7b5\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ nvidia-smi \n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 470.86 Driver Version: 470.86 CUDA Version: 11.4 |\n|-------------------------------+----------------------+----------------------+\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|===============================+======================+======================|\n| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |\n| 25% 32C P8 4W / 120W | 211MiB / 6078MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |\n| 0% 34C P8 7W / 175W | 5MiB / 7982MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n \n+-----------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=============================================================================|\n| 0 N/A N/A 1644 G /usr/lib/xorg/Xorg 198MiB |\n| 0 N/A N/A 1893 G /usr/bin/gnome-shell 10MiB |\n| 1 N/A N/A 1644 G /usr/lib/xorg/Xorg 4MiB |\n+-----------------------------------------------------------------------------+\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"nvidia-smi"),"\uc758 \ucd9c\ub825 \uacb0\uacfc\uac00 \uc704\uc640 \uac19\uc9c0 \uc54a\ub2e4\uba74 \uc7a5\ucc29\ub41c GPU\uc5d0 \ub9de\ub294 nvidia driver\ub97c \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d nvidia driver\uc758 \uc124\uce58\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\ub2e4\uba74 \uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uc124\uce58\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo add-apt-repository ppa:graphics-drivers/ppa\nsudo apt update && sudo apt install -y ubuntu-drivers-common\nsudo ubuntu-drivers autoinstall\nsudo reboot\n")),(0,r.kt)("h2",{id:"2-nvidia-docker-\uc124\uce58"},"2. NVIDIA-Docker \uc124\uce58"),(0,r.kt)("p",null,"NVIDIA-Docker\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \\\n sudo apt-key add -\ndistribution=$(. /etc/os-release;echo $ID$VERSION_ID)\ncurl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list\nsudo apt-get update\nsudo apt-get install -y nvidia-docker2 &&\nsudo systemctl restart docker\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574, GPU\ub97c \uc0ac\uc6a9\ud558\ub294 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574\ubd05\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi\n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 470.86 Driver Version: 470.86 CUDA Version: 11.4 |\n|-------------------------------+----------------------+----------------------+\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|===============================+======================+======================|\n| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |\n| 25% 32C P8 4W / 120W | 211MiB / 6078MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |\n| 0% 34C P8 6W / 175W | 5MiB / 7982MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n \n+-----------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=============================================================================|\n+-----------------------------------------------------------------------------+\n")),(0,r.kt)("h2",{id:"3-nvidia-docker\ub97c-default-container-runtime\uc73c\ub85c-\uc124\uc815"},"3. NVIDIA-Docker\ub97c Default Container Runtime\uc73c\ub85c \uc124\uc815"),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Docker-CE\ub97c Default Container Runtime\uc73c\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n\ub530\ub77c\uc11c, Docker Container \ub0b4\uc5d0\uc11c NVIDIA GPU\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 NVIDIA-Docker \ub97c Container Runtime \uc73c\ub85c \uc0ac\uc6a9\ud558\uc5ec pod\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub3c4\ub85d Default Runtime\uc744 \uc218\uc815\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"/etc/docker/daemon.json")," \ud30c\uc77c\uc744 \uc5f4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'sudo vi /etc/docker/daemon.json\n\n{\n "default-runtime": "nvidia",\n "runtimes": {\n "nvidia": {\n "path": "nvidia-container-runtime",\n "runtimeArgs": []\n }\n }\n}\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud30c\uc77c\uc774 \ubcc0\uacbd\ub41c \uac83\uc744 \ud655\uc778\ud55c \ud6c4, Docker\ub97c \uc7ac\uc2dc\uc791\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl daemon-reload\nsudo service docker restart\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubcc0\uacbd \uc0ac\ud56d\uc774 \ubc18\uc601\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker info | grep nvidia\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ docker info | grep nvidia\nRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux nvidia runc\nDefault Runtime: nvidia\n")))),(0,r.kt)("h2",{id:"4-nvidia-device-plugin"},"4. Nvidia-Device-Plugin"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"nvidia-device-plugin daemonset\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.10.0/nvidia-device-plugin.yml\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"nvidia-device-plugin pod\uc774 RUNNING \uc0c1\ud0dc\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n kube-system | grep nvidia\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kube-system nvidia-device-plugin-daemonset-nlqh2 1/1 Running 0 1h\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"node \uc815\ubcf4\uc5d0 gpu\uac00 \uc0ac\uc6a9\uac00\ub2a5\ud558\ub3c4\ub85d \uc124\uc815\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\\.com/gpu"\n')),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","(",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud55c \ud074\ub7ec\uc2a4\ud130\ub294 2\uac1c\uc758 GPU\uac00 \uc788\uc5b4\uc11c 2\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4.\n\ubcf8\uc778\uc758 \ud074\ub7ec\uc2a4\ud130\uc758 GPU \uac1c\uc218\uc640 \ub9de\ub294 \uc22b\uc790\uac00 \ucd9c\ub825\ub41c\ub2e4\uba74 \ub429\ub2c8\ub2e4.)"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME GPU\nubuntu 2\n")))),(0,r.kt)("p",null,"\uc124\uc815\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0, GPU\uc758 value\uac00 ",(0,r.kt)("inlineCode",{parentName:"p"},"")," \uc73c\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d3303310.6fbcb1cc.js b/assets/js/d3303310.6fbcb1cc.js deleted file mode 100644 index 69ef6db3..00000000 --- a/assets/js/d3303310.6fbcb1cc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[7346],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=r,k=d["".concat(s,".").concat(m)]||d[m]||c[m]||i;return t?a.createElement(k,o(o({ref:n},u),{},{components:t})):a.createElement(k,o({ref:n},u))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[d]="string"==typeof e?e:r,o[1]=l;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=t(7462),r=(t(7294),t(3905));const i={title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",sidebar_position:6,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},o=void 0,l={unversionedId:"setup-kubernetes/setup-nvidia-gpu",id:"version-1.0/setup-kubernetes/setup-nvidia-gpu",title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",source:"@site/versioned_docs/version-1.0/setup-kubernetes/setup-nvidia-gpu.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/setup-nvidia-gpu",permalink:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/setup-nvidia-gpu.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:6,frontMatter:{title:"6. (Optional) Setup GPU",description:"Install nvidia docker, nvidia device plugin",sidebar_position:6,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"5. Install Kubernetes Modules",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes-module"},next:{title:"1. Kubeflow",permalink:"/docs/1.0/setup-components/install-components-kf"}},s={},p=[{value:"1. Install NVIDIA Driver",id:"1-install-nvidia-driver",level:2},{value:"2. NVIDIA-Docker \uc124\uce58",id:"2-nvidia-docker-\uc124\uce58",level:2},{value:"3. NVIDIA-Docker\ub97c Default Container Runtime\uc73c\ub85c \uc124\uc815",id:"3-nvidia-docker\ub97c-default-container-runtime\uc73c\ub85c-\uc124\uc815",level:2},{value:"4. Nvidia-Device-Plugin",id:"4-nvidia-device-plugin",level:2}],u={toc:p},d="wrapper";function c(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ubc0f Kubeflow \ub4f1\uc5d0\uc11c GP \ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"1-install-nvidia-driver"},"1. Install NVIDIA Driver"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"nvidia-smi")," \uc218\ud589 \uc2dc \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub41c\ub2e4\uba74 \uc774 \ub2e8\uacc4\ub294 \uc0dd\ub7b5\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ nvidia-smi \n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 470.86 Driver Version: 470.86 CUDA Version: 11.4 |\n|-------------------------------+----------------------+----------------------+\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|===============================+======================+======================|\n| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |\n| 25% 32C P8 4W / 120W | 211MiB / 6078MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |\n| 0% 34C P8 7W / 175W | 5MiB / 7982MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n \n+-----------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=============================================================================|\n| 0 N/A N/A 1644 G /usr/lib/xorg/Xorg 198MiB |\n| 0 N/A N/A 1893 G /usr/bin/gnome-shell 10MiB |\n| 1 N/A N/A 1644 G /usr/lib/xorg/Xorg 4MiB |\n+-----------------------------------------------------------------------------+\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"nvidia-smi"),"\uc758 \ucd9c\ub825 \uacb0\uacfc\uac00 \uc704\uc640 \uac19\uc9c0 \uc54a\ub2e4\uba74 \uc7a5\ucc29\ub41c GPU\uc5d0 \ub9de\ub294 nvidia driver\ub97c \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ub9cc\uc57d nvidia driver\uc758 \uc124\uce58\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\ub2e4\uba74 \uc544\ub798 \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \uc124\uce58\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo add-apt-repository ppa:graphics-drivers/ppa\nsudo apt update && sudo apt install -y ubuntu-drivers-common\nsudo ubuntu-drivers autoinstall\nsudo reboot\n")),(0,r.kt)("h2",{id:"2-nvidia-docker-\uc124\uce58"},"2. NVIDIA-Docker \uc124\uce58"),(0,r.kt)("p",null,"NVIDIA-Docker\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \\\n sudo apt-key add -\ndistribution=$(. /etc/os-release;echo $ID$VERSION_ID)\ncurl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list\nsudo apt-get update\nsudo apt-get install -y nvidia-docker2 &&\nsudo systemctl restart docker\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574, GPU\ub97c \uc0ac\uc6a9\ud558\ub294 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574\ubd05\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi\n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI 470.86 Driver Version: 470.86 CUDA Version: 11.4 |\n|-------------------------------+----------------------+----------------------+\n| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n| | | MIG M. |\n|===============================+======================+======================|\n| 0 NVIDIA GeForce ... Off | 00000000:01:00.0 Off | N/A |\n| 25% 32C P8 4W / 120W | 211MiB / 6078MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n| 1 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |\n| 0% 34C P8 6W / 175W | 5MiB / 7982MiB | 0% Default |\n| | | N/A |\n+-------------------------------+----------------------+----------------------+\n \n+-----------------------------------------------------------------------------+\n| Processes: |\n| GPU GI CI PID Type Process name GPU Memory |\n| ID ID Usage |\n|=============================================================================|\n+-----------------------------------------------------------------------------+\n")),(0,r.kt)("h2",{id:"3-nvidia-docker\ub97c-default-container-runtime\uc73c\ub85c-\uc124\uc815"},"3. NVIDIA-Docker\ub97c Default Container Runtime\uc73c\ub85c \uc124\uc815"),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \uae30\ubcf8\uc801\uc73c\ub85c Docker-CE\ub97c Default Container Runtime\uc73c\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.\n\ub530\ub77c\uc11c, Docker Container \ub0b4\uc5d0\uc11c NVIDIA GPU\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 NVIDIA-Docker \ub97c Container Runtime \uc73c\ub85c \uc0ac\uc6a9\ud558\uc5ec pod\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub3c4\ub85d Default Runtime\uc744 \uc218\uc815\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"/etc/docker/daemon.json")," \ud30c\uc77c\uc744 \uc5f4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc774 \uc218\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'sudo vi /etc/docker/daemon.json\n\n{\n "default-runtime": "nvidia",\n "runtimes": {\n "nvidia": {\n "path": "nvidia-container-runtime",\n "runtimeArgs": []\n }\n }\n}\n'))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud30c\uc77c\uc774 \ubcc0\uacbd\ub41c \uac83\uc744 \ud655\uc778\ud55c \ud6c4, Docker\ub97c \uc7ac\uc2dc\uc791\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl daemon-reload\nsudo service docker restart\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubcc0\uacbd \uc0ac\ud56d\uc774 \ubc18\uc601\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo docker info | grep nvidia\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ docker info | grep nvidia\nRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux nvidia runc\nDefault Runtime: nvidia\n")))),(0,r.kt)("h2",{id:"4-nvidia-device-plugin"},"4. Nvidia-Device-Plugin"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"nvidia-device-plugin daemonset\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.10.0/nvidia-device-plugin.yml\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"nvidia-device-plugin pod\uc774 RUNNING \uc0c1\ud0dc\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n kube-system | grep nvidia\n")),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ucd9c\ub825\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kube-system nvidia-device-plugin-daemonset-nlqh2 1/1 Running 0 1h\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"node \uc815\ubcf4\uc5d0 gpu\uac00 \uc0ac\uc6a9\uac00\ub2a5\ud558\ub3c4\ub85d \uc124\uc815\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\\.com/gpu"\n')),(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","(",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \uc2e4\uc2b5\uc744 \uc9c4\ud589\ud55c \ud074\ub7ec\uc2a4\ud130\ub294 2\uac1c\uc758 GPU\uac00 \uc788\uc5b4\uc11c 2\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4.\n\ubcf8\uc778\uc758 \ud074\ub7ec\uc2a4\ud130\uc758 GPU \uac1c\uc218\uc640 \ub9de\ub294 \uc22b\uc790\uac00 \ucd9c\ub825\ub41c\ub2e4\uba74 \ub429\ub2c8\ub2e4.)"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME GPU\nubuntu 2\n")))),(0,r.kt)("p",null,"\uc124\uc815\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0, GPU\uc758 value\uac00 ",(0,r.kt)("inlineCode",{parentName:"p"},"")," \uc73c\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d5c893db.3d5e7257.js b/assets/js/d5c893db.3d5e7257.js deleted file mode 100644 index 265a49de..00000000 --- a/assets/js/d5c893db.3d5e7257.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3225],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),p=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return o.createElement(c.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},b=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),s=p(r),b=n,d=s["".concat(c,".").concat(b)]||s[b]||f[b]||i;return r?o.createElement(d,l(l({ref:t},u),{},{components:r})):o.createElement(d,l({ref:t},u))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,l=new Array(i);l[0]=b;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a[s]="string"==typeof e?e:n,l[1]=a;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>a,toc:()=>p});var o=r(7462),n=(r(7294),r(3905));const i={title:"1. Kubeflow Introduction",description:"",sidebar_position:1,contributors:["Jongseob Jeon"]},l=void 0,a={unversionedId:"kubeflow/kubeflow-intro",id:"kubeflow/kubeflow-intro",title:"1. Kubeflow Introduction",description:"",source:"@site/docs/kubeflow/kubeflow-intro.md",sourceDirName:"kubeflow",slug:"/kubeflow/kubeflow-intro",permalink:"/docs/kubeflow/kubeflow-intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/kubeflow-intro.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Kubeflow Introduction",description:"",sidebar_position:1,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"6. Kubeflow Pipeline \uad00\ub828",permalink:"/docs/kubeflow-dashboard-guide/experiments-and-others"},next:{title:"2. Kubeflow Concepts",permalink:"/docs/kubeflow/kubeflow-concepts"}},c={},p=[],u={toc:p},s="wrapper";function f(e){let{components:t,...r}=e;return(0,n.kt)(s,(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Kubeflow\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8(Component)\uc640 \ud30c\uc774\ud504\ub77c\uc778(Pipeline)\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \ubc29\uc2dd\uc740 ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/overview/quickstart/"},"Kubeflow Pipeline \uacf5\uc2dd \ud648\ud398\uc774\uc9c0"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \ubc29\uc2dd\uacfc\ub294 \ub2e4\uc18c \ucc28\uc774\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c\ub294 Kubeflow Pipeline\uc744 \uc6cc\ud06c\ud50c\ub85c(Workflow)\uac00 \uc544\ub2cc \uc55e\uc11c \uc124\uba85\ud55c ",(0,n.kt)("a",{parentName:"p",href:"/docs/kubeflow/kubeflow-concepts#component-contents"},"MLOps\ub97c \uad6c\uc131\ud558\ub294 \uc694\uc18c")," \uc911 \ud558\ub098\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub85c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubb34\uc5c7\uc774\uba70 \uc5b4\ub5bb\uac8c \uc791\uc131\ud560 \uc218 \uc788\ub294\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d5c893db.5769dd9d.js b/assets/js/d5c893db.5769dd9d.js new file mode 100644 index 00000000..8d6281cd --- /dev/null +++ b/assets/js/d5c893db.5769dd9d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3225],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),s=p(r),b=o,d=s["".concat(c,".").concat(b)]||s[b]||f[b]||i;return r?n.createElement(d,l(l({ref:t},u),{},{components:r})):n.createElement(d,l({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,l=new Array(i);l[0]=b;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a[s]="string"==typeof e?e:o,l[1]=a;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>a,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const i={title:"1. Kubeflow Introduction",description:"",sidebar_position:1,contributors:["Jongseob Jeon"]},l=void 0,a={unversionedId:"kubeflow/kubeflow-intro",id:"kubeflow/kubeflow-intro",title:"1. Kubeflow Introduction",description:"",source:"@site/docs/kubeflow/kubeflow-intro.md",sourceDirName:"kubeflow",slug:"/kubeflow/kubeflow-intro",permalink:"/docs/kubeflow/kubeflow-intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/kubeflow-intro.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Kubeflow Introduction",description:"",sidebar_position:1,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"6. Kubeflow Pipeline \uad00\ub828",permalink:"/docs/kubeflow-dashboard-guide/experiments-and-others"},next:{title:"2. Kubeflow Concepts",permalink:"/docs/kubeflow/kubeflow-concepts"}},c={},p=[],u={toc:p},s="wrapper";function f(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Kubeflow\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8(Component)\uc640 \ud30c\uc774\ud504\ub77c\uc778(Pipeline)\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \ubc29\uc2dd\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/overview/quickstart/"},"Kubeflow Pipeline \uacf5\uc2dd \ud648\ud398\uc774\uc9c0"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \ubc29\uc2dd\uacfc\ub294 \ub2e4\uc18c \ucc28\uc774\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c\ub294 Kubeflow Pipeline\uc744 \uc6cc\ud06c\ud50c\ub85c(Workflow)\uac00 \uc544\ub2cc \uc55e\uc11c \uc124\uba85\ud55c ",(0,o.kt)("a",{parentName:"p",href:"/docs/kubeflow/kubeflow-concepts#component-contents"},"MLOps\ub97c \uad6c\uc131\ud558\ub294 \uc694\uc18c")," \uc911 \ud558\ub098\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub85c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubb34\uc5c7\uc774\uba70 \uc5b4\ub5bb\uac8c \uc791\uc131\ud560 \uc218 \uc788\ub294\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d6a8d944.3379fd01.js b/assets/js/d6a8d944.3379fd01.js new file mode 100644 index 00000000..4512527c --- /dev/null +++ b/assets/js/d6a8d944.3379fd01.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8860],{3905:(n,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>c});var t=a(7294);function r(n,e,a){return e in n?Object.defineProperty(n,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[e]=a,n}function l(n,e){var a=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.push.apply(a,t)}return a}function i(n){for(var e=1;e=0||(r[a]=n[a]);return r}(n,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,a)&&(r[a]=n[a])}return r}var o=t.createContext({}),s=function(n){var e=t.useContext(o),a=e;return n&&(a="function"==typeof n?n(e):i(i({},e),n)),a},d=function(n){var e=s(n.components);return t.createElement(o.Provider,{value:e},n.children)},m="mdxType",_={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},u=t.forwardRef((function(n,e){var a=n.components,r=n.mdxType,l=n.originalType,o=n.parentName,d=p(n,["components","mdxType","originalType","parentName"]),m=s(a),u=r,c=m["".concat(o,".").concat(u)]||m[u]||_[u]||l;return a?t.createElement(c,i(i({ref:e},d),{},{components:a})):t.createElement(c,i({ref:e},d))}));function c(n,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof n||r){var l=a.length,i=new Array(l);i[0]=u;var p={};for(var o in e)hasOwnProperty.call(e,o)&&(p[o]=e[o]);p.originalType=n,p[m]="string"==typeof n?n:r,i[1]=p;for(var s=2;s{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>_,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var t=a(7462),r=(a(7294),a(3905));const l={title:"12. Component - MLFlow",description:"",sidebar_position:12,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jongseob Jeon","SeungTae Kim"]},i=void 0,p={unversionedId:"kubeflow/advanced-mlflow",id:"kubeflow/advanced-mlflow",title:"12. Component - MLFlow",description:"",source:"@site/docs/kubeflow/advanced-mlflow.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-mlflow",permalink:"/docs/kubeflow/advanced-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-mlflow.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:12,frontMatter:{title:"12. Component - MLFlow",description:"",sidebar_position:12,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"11. Pipeline - Run Result",permalink:"/docs/kubeflow/advanced-run"},next:{title:"13. Component - Debugging",permalink:"/docs/kubeflow/how-to-debug"}},o={},s=[{value:"MLFlow Component",id:"mlflow-component",level:2},{value:"MLFlow in Local",id:"mlflow-in-local",level:2},{value:"1. \ubaa8\ub378 \ud559\uc2b5",id:"1-\ubaa8\ub378-\ud559\uc2b5",level:3},{value:"2. MLFLow Infos",id:"2-mlflow-infos",level:3},{value:"3. Save MLFLow Infos",id:"3-save-mlflow-infos",level:3},{value:"MLFlow on Server",id:"mlflow-on-server",level:2},{value:"MLFlow Component",id:"mlflow-component-1",level:2},{value:"MLFlow Pipeline",id:"mlflow-pipeline",level:2},{value:"Data Component",id:"data-component",level:3},{value:"Pipeline",id:"pipeline",level:3},{value:"Run",id:"run",level:3}],d={toc:s},m="wrapper";function _(n){let{components:e,...l}=n;return(0,r.kt)(m,(0,t.Z)({},d,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"mlflow-component"},"MLFlow Component"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-component"},"Advanced Usage Component")," \uc5d0\uc11c \ud559\uc2b5\ud55c \ubaa8\ub378\uc774 API Deployment\uae4c\uc9c0 \uc774\uc5b4\uc9c0\uae30 \uc704\ud574\uc11c\ub294 MLFlow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 MLFlow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud558\ub294 \uacfc\uc815\uc744 \uc124\uba85\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"mlflow-in-local"},"MLFlow in Local"),(0,r.kt)("p",null,"MLFlow\uc5d0\uc11c \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uace0 \uc11c\ube59\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uc758 \ud56d\ubaa9\ub4e4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"model"),(0,r.kt)("li",{parentName:"ul"},"signature"),(0,r.kt)("li",{parentName:"ul"},"input_example"),(0,r.kt)("li",{parentName:"ul"},"conda_env")),(0,r.kt)("p",null,"\ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \ud1b5\ud574\uc11c MLFLow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"1-\ubaa8\ub378-\ud559\uc2b5"},"1. \ubaa8\ub378 \ud559\uc2b5"),(0,r.kt)("p",null,"\uc544\ub798 \uacfc\uc815\uc740 iris \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 SVC \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import pandas as pd\nfrom sklearn.datasets import load_iris\nfrom sklearn.svm import SVC\n\niris = load_iris()\n\ndata = pd.DataFrame(iris["data"], columns=iris["feature_names"])\ntarget = pd.DataFrame(iris["target"], columns=["target"])\n\nclf = SVC(kernel="rbf")\nclf.fit(data, target)\n\n')),(0,r.kt)("h3",{id:"2-mlflow-infos"},"2. MLFLow Infos"),(0,r.kt)("p",null,"mlflow\uc5d0 \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \ub9cc\ub4dc\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from mlflow.models.signature import infer_signature\nfrom mlflow.utils.environment import _mlflow_conda_env\n\ninput_example = data.sample(1)\nsignature = infer_signature(data, clf.predict(data))\nconda_env = _mlflow_conda_env(additional_pip_deps=["dill", "pandas", "scikit-learn"])\n')),(0,r.kt)("p",null,"\uac01 \ubcc0\uc218\uc758 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"input_example")),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"sepal length (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"sepal width (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"petal length (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"petal width (cm)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6.5"),(0,r.kt)("td",{parentName:"tr",align:null},"6.7"),(0,r.kt)("td",{parentName:"tr",align:null},"3.1"),(0,r.kt)("td",{parentName:"tr",align:null},"4.4"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"signature")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"},"inputs:\n ['sepal length (cm)': double, 'sepal width (cm)': double, 'petal length (cm)': double, 'petal width (cm)': double]\noutputs:\n [Tensor('int64', (-1,))]\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"conda_env")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"},"{'name': 'mlflow-env',\n 'channels': ['conda-forge'],\n 'dependencies': ['python=3.8.10',\n 'pip',\n {'pip': ['mlflow', 'dill', 'pandas', 'scikit-learn']}]}\n")))),(0,r.kt)("h3",{id:"3-save-mlflow-infos"},"3. Save MLFLow Infos"),(0,r.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c \ud559\uc2b5\ud55c \uc815\ubcf4\ub4e4\uacfc \ubaa8\ub378\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4.\n\ud559\uc2b5\ud55c \ubaa8\ub378\uc774 sklearn \ud328\ud0a4\uc9c0\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow.sklearn")," \uc744 \uc774\uc6a9\ud558\uba74 \uc27d\uac8c \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from mlflow.sklearn import save_model\n\nsave_model(\n sk_model=clf,\n path="svc",\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n)\n')),(0,r.kt)("p",null,"\ub85c\uceec\uc5d0\uc11c \uc791\uc5c5\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 svc \ud3f4\ub354\uac00 \uc0dd\uae30\uba70 \uc544\ub798\uc640 \uac19\uc740 \ud30c\uc77c\ub4e4\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls svc\n")),(0,r.kt)("p",null,"\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uc758 \ucd9c\ub825\uac12\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"MLmodel conda.yaml input_example.json model.pkl requirements.txt\n")),(0,r.kt)("p",null,"\uac01 \ud30c\uc77c\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"MLmodel"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'flavors:\n python_function:\n env: conda.yaml\n loader_module: mlflow.sklearn\n model_path: model.pkl\n python_version: 3.8.10\n sklearn:\n pickled_model: model.pkl\n serialization_format: cloudpickle\n sklearn_version: 1.0.1\nsaved_input_example_info:\n artifact_path: input_example.json\n pandas_orient: split\n type: dataframe\nsignature:\n inputs: \'[{"name": "sepal length (cm)", "type": "double"}, {"name": "sepal width\n (cm)", "type": "double"}, {"name": "petal length (cm)", "type": "double"}, {"name":\n "petal width (cm)", "type": "double"}]\'\n outputs: \'[{"type": "tensor", "tensor-spec": {"dtype": "int64", "shape": [-1]}}]\'\nutc_time_created: \'2021-12-06 06:52:30.612810\'\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"conda.yaml"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"channels:\n- conda-forge\ndependencies:\n- python=3.8.10\n- pip\n- pip:\n - mlflow\n - dill\n - pandas\n - scikit-learn\nname: mlflow-env\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"input_example.json"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "columns": \n [\n "sepal length (cm)",\n "sepal width (cm)",\n "petal length (cm)",\n "petal width (cm)"\n ],\n "data": \n [\n [6.7, 3.1, 4.4, 1.4]\n ]\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"requirements.txt"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlflow\ndill\npandas\nscikit-learn\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"model.pkl"))),(0,r.kt)("h2",{id:"mlflow-on-server"},"MLFlow on Server"),(0,r.kt)("p",null,"\uc774\uc81c \uc800\uc7a5\ub41c \ubaa8\ub378\uc744 mlflow \uc11c\ubc84\uc5d0 \uc62c\ub9ac\ub294 \uc791\uc5c5\uc744 \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import mlflow\n\nwith mlflow.start_run():\n mlflow.log_artifact("svc/")\n')),(0,r.kt)("p",null,"\uc800\uc7a5\ud558\uace0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlruns")," \uac00 \uc0dd\uc131\ub41c \uacbd\ub85c\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow ui")," \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 mlflow \uc11c\ubc84\uc640 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ub744\uc6c1\ub2c8\ub2e4.\nmlflow \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc811\uc18d\ud558\uc5ec \uc0dd\uc131\ub41c run\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-0.png",src:a(4701).Z,width:"2782",height:"2496"}),"\n(\ud574\ub2f9 \ud654\uba74\uc740 mlflow \ubc84\uc804\uc5d0 \ub530\ub77c \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4.)"),(0,r.kt)("h2",{id:"mlflow-component-1"},"MLFlow Component"),(0,r.kt)("p",null,"\uc774\uc81c Kubeflow\uc5d0\uc11c \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc740 \ud06c\uac8c 3\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \ud544\uc694\ud55c \ud658\uacbd\uc744 \uc800\uc7a5 \ud6c4 MLFlow \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc5c5\ub85c\ub4dc\ub9cc \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-1.png",src:a(6752).Z,width:"578",height:"844"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud559\uc2b5\ub41c \ubaa8\ub378\uacfc \ub370\uc774\ud130\ub97c MLFlow \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \uc804\ub2ec \ud6c4 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc800\uc7a5\uacfc \uc5c5\ub85c\ub4dc \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-2.png",src:a(6313).Z,width:"900",height:"846"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc800\uc7a5\uacfc \uc5c5\ub85c\ub4dc\ub97c \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-3.png",src:a(4119).Z,width:"578",height:"406"})))),(0,r.kt)("p",null,"\uc800\ud76c\ub294 \uc774 \uc911 1\ubc88\uc758 \uc811\uadfc \ubc29\ubc95\uc744 \ud1b5\ud574 \ubaa8\ub378\uc744 \uad00\ub9ac\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.\n\uc774\uc720\ub294 MLFlow \ubaa8\ub378\uc744 \uc5c5\ub85c\ub4dc\ud558\ub294 \ucf54\ub4dc\ub294 \ubc14\ub00c\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ub9e4\ubc88 3\ubc88\ucc98\ub7fc \ucef4\ud3ec\ub10c\ud2b8 \uc791\uc131\ub9c8\ub2e4 \uc791\uc131\ud560 \ud544\uc694\ub294 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc7ac\ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 1\ubc88\uacfc 2\ubc88\uc758 \ubc29\ubc95\uc73c\ub85c \uac00\ub2a5\ud569\ub2c8\ub2e4.\n\ub2e4\ub9cc 2\ubc88\uc758 \uacbd\uc6b0 \ubaa8\ub378\uc774 \ud559\uc2b5\ub41c \uc774\ubbf8\uc9c0\uc640 \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc804\ub2ec\ud574\uc57c \ud558\ubbc0\ub85c \uacb0\uad6d \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \ucd94\uac00 \uc815\ubcf4\ub97c \uc804\ub2ec\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"1\ubc88\uc758 \ubc29\ubc95\uc73c\ub85c \uc9c4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub610\ud55c \ubcc0\uacbd\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294\ub370 \ud544\uc694\ud55c \ud658\uacbd\ub4e4\uc744 \uc800\uc7a5\ud574\uc8fc\ub294 \ucf54\ub4dc\uac00 \ucd94\uac00\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n')),(0,r.kt)("p",null,"\uadf8\ub9ac\uace0 MLFlow\uc5d0 \uc5c5\ub85c\ub4dc\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.\n\uc774 \ub54c \uc5c5\ub85c\ub4dc\ub418\ub294 MLflow\uc758 endpoint\ub97c \uc6b0\ub9ac\uac00 \uc124\uce58\ud55c ",(0,r.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-mlflow"},"mlflow service")," \ub85c \uc774\uc5b4\uc9c0\uac8c \uc124\uc815\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \ub54c S3 Endpoint\uc758 \uc8fc\uc18c\ub294 MLflow Server \uc124\uce58 \ub2f9\uc2dc \uc124\uce58\ud55c minio\uc758 ",(0,r.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/services-networking/dns-pod-service/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc11c\ube44\uc2a4 DNS \ub124\uc784\uc744 \ud65c\uc6a9"),"\ud569\ub2c8\ub2e4. \ud574\ub2f9 service \ub294 kubeflow namespace\uc5d0\uc11c minio-service\ub77c\ub294 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\uc73c\ubbc0\ub85c, ",(0,r.kt)("inlineCode",{parentName:"p"},"http://minio-service.kubeflow.svc:9000")," \ub85c \uc124\uc815\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\uc640 \ube44\uc2b7\ud558\uac8c tracking_uri\uc758 \uc8fc\uc18c\ub294 mlflow server\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc11c\ube44\uc2a4 DNS \ub124\uc784\uc744 \ud65c\uc6a9\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"http://mlflow-server-service.mlflow-system.svc:5000")," \ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n')),(0,r.kt)("h2",{id:"mlflow-pipeline"},"MLFlow Pipeline"),(0,r.kt)("p",null,"\uc774\uc81c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc5f0\uacb0\ud574\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"data-component"},"Data Component"),(0,r.kt)("p",null,"\ubaa8\ub378\uc744 \ud559\uc2b5\ud560 \ub54c \uc4f8 \ub370\uc774\ud130\ub294 sklearn\uc758 iris \uc785\ub2c8\ub2e4.\n\ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n')),(0,r.kt)("h3",{id:"pipeline"},"Pipeline"),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="mlflow_pipeline")\ndef mlflow_pipeline(kernel: str, model_name: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name=model_name,\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n')),(0,r.kt)("h3",{id:"run"},"Run"),(0,r.kt)("p",null,"\uc704\uc5d0\uc11c \uc791\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ud558\ub098\uc758 \ud30c\uc774\uc36c \ud30c\uc77c\uc5d0 \uc815\ub9ac\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n\n@pipeline(name="mlflow_pipeline")\ndef mlflow_pipeline(kernel: str, model_name: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name=model_name,\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(mlflow_pipeline, "mlflow_pipeline.yaml")\n')),(0,r.kt)("p",null,(0,r.kt)("details",null,(0,r.kt)("summary",null,"mlflow_pipeline.yaml"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: mlflow-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.10, pipelines.kubeflow.org/pipeline_compilation_time: \'2022-01-19T14:14:11.999807\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "kernel", "type":\n "String"}, {"name": "model_name", "type": "String"}], "name": "mlflow_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.10}\nspec:\n entrypoint: mlflow-pipeline\n templates:\n - name: load-iris-data\n container:\n args: [--data, /tmp/outputs/data/data, --target, /tmp/outputs/target/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'pandas\' \'scikit-learn\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'pandas\' \'scikit-learn\' --user)\n && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def load_iris_data(\n data_path,\n target_path,\n ):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Load iris data\', description=\'\')\n _parser.add_argument("--data", dest="data_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--target", dest="target_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = load_iris_data(**_parsed_args)\n image: python:3.7\n outputs:\n artifacts:\n - {name: load-iris-data-data, path: /tmp/outputs/data/data}\n - {name: load-iris-data-target, path: /tmp/outputs/target/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--data", {"outputPath": "data"}, "--target", {"outputPath": "target"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'pandas\'\' \'\'scikit-learn\'\' ||\n PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'\'pandas\'\' \'\'scikit-learn\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef load_iris_data(\\n data_path,\\n target_path,\\n):\\n import\n pandas as pd\\n from sklearn.datasets import load_iris\\n\\n iris = load_iris()\\n\\n data\n = pd.DataFrame(iris[\\"data\\"], columns=iris[\\"feature_names\\"])\\n target\n = pd.DataFrame(iris[\\"target\\"], columns=[\\"target\\"])\\n\\n data.to_csv(data_path,\n index=False)\\n target.to_csv(target_path, index=False)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Load iris data\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--data\\",\n dest=\\"data_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--target\\", dest=\\"target_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = load_iris_data(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "name": "Load iris data", "outputs": [{"name":\n "data", "type": "csv"}, {"name": "target", "type": "csv"}]}\', pipelines.kubeflow.org/component_ref: \'{}\'}\n - name: mlflow-pipeline\n inputs:\n parameters:\n - {name: kernel}\n - {name: model_name}\n dag:\n tasks:\n - {name: load-iris-data, template: load-iris-data}\n - name: train-from-csv\n template: train-from-csv\n dependencies: [load-iris-data]\n arguments:\n parameters:\n - {name: kernel, value: \'{{inputs.parameters.kernel}}\'}\n artifacts:\n - {name: load-iris-data-data, from: \'{{tasks.load-iris-data.outputs.artifacts.load-iris-data-data}}\'}\n - {name: load-iris-data-target, from: \'{{tasks.load-iris-data.outputs.artifacts.load-iris-data-target}}\'}\n - name: upload-sklearn-model-to-mlflow\n template: upload-sklearn-model-to-mlflow\n dependencies: [train-from-csv]\n arguments:\n parameters:\n - {name: model_name, value: \'{{inputs.parameters.model_name}}\'}\n artifacts:\n - {name: train-from-csv-conda_env, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-conda_env}}\'}\n - {name: train-from-csv-input_example, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-input_example}}\'}\n - {name: train-from-csv-model, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-model}}\'}\n - {name: train-from-csv-signature, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-signature}}\'}\n - name: train-from-csv\n container:\n args: [--train-data, /tmp/inputs/train_data/data, --train-target, /tmp/inputs/train_target/data,\n --kernel, \'{{inputs.parameters.kernel}}\', --model, /tmp/outputs/model/data,\n --input-example, /tmp/outputs/input_example/data, --signature, /tmp/outputs/signature/data,\n --conda-env, /tmp/outputs/conda_env/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill\' \'pandas\' \'scikit-learn\' \'mlflow\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill\' \'pandas\' \'scikit-learn\'\n \'mlflow\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n input_example_path,\n signature_path,\n conda_env_path,\n kernel,\n ):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--input-example", dest="input_example_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--signature", dest="signature_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--conda-env", dest="conda_env_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: kernel}\n artifacts:\n - {name: load-iris-data-data, path: /tmp/inputs/train_data/data}\n - {name: load-iris-data-target, path: /tmp/inputs/train_target/data}\n outputs:\n artifacts:\n - {name: train-from-csv-conda_env, path: /tmp/outputs/conda_env/data}\n - {name: train-from-csv-input_example, path: /tmp/outputs/input_example/data}\n - {name: train-from-csv-model, path: /tmp/outputs/model/data}\n - {name: train-from-csv-signature, path: /tmp/outputs/signature/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--train-data", {"inputPath": "train_data"}, "--train-target",\n {"inputPath": "train_target"}, "--kernel", {"inputValue": "kernel"}, "--model",\n {"outputPath": "model"}, "--input-example", {"outputPath": "input_example"},\n "--signature", {"outputPath": "signature"}, "--conda-env", {"outputPath":\n "conda_env"}], "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\'\n \'\'scikit-learn\'\' \'\'mlflow\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m\n pip install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\'\n \'\'mlflow\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef train_from_csv(\\n train_data_path,\\n train_target_path,\\n model_path,\\n input_example_path,\\n signature_path,\\n conda_env_path,\\n kernel,\\n):\\n import\n dill\\n import pandas as pd\\n from sklearn.svm import SVC\\n\\n from\n mlflow.models.signature import infer_signature\\n from mlflow.utils.environment\n import _mlflow_conda_env\\n\\n train_data = pd.read_csv(train_data_path)\\n train_target\n = pd.read_csv(train_target_path)\\n\\n clf = SVC(kernel=kernel)\\n clf.fit(train_data,\n train_target)\\n\\n with open(model_path, mode=\\"wb\\") as file_writer:\\n dill.dump(clf,\n file_writer)\\n\\n input_example = train_data.sample(1)\\n with open(input_example_path,\n \\"wb\\") as file_writer:\\n dill.dump(input_example, file_writer)\\n\\n signature\n = infer_signature(train_data, clf.predict(train_data))\\n with open(signature_path,\n \\"wb\\") as file_writer:\\n dill.dump(signature, file_writer)\\n\\n conda_env\n = _mlflow_conda_env(\\n additional_pip_deps=[\\"dill\\", \\"pandas\\",\n \\"scikit-learn\\"]\\n )\\n with open(conda_env_path, \\"wb\\") as file_writer:\\n dill.dump(conda_env,\n file_writer)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Train\n from csv\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--train-data\\", dest=\\"train_data_path\\",\n type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--train-target\\",\n dest=\\"train_target_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--kernel\\",\n dest=\\"kernel\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--model\\",\n dest=\\"model_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--input-example\\", dest=\\"input_example_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--signature\\",\n dest=\\"signature_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--conda-env\\", dest=\\"conda_env_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = train_from_csv(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "train_data", "type": "csv"},\n {"name": "train_target", "type": "csv"}, {"name": "kernel", "type": "String"}],\n "name": "Train from csv", "outputs": [{"name": "model", "type": "dill"},\n {"name": "input_example", "type": "dill"}, {"name": "signature", "type":\n "dill"}, {"name": "conda_env", "type": "dill"}]}\', pipelines.kubeflow.org/component_ref: \'{}\',\n pipelines.kubeflow.org/arguments.parameters: \'{"kernel": "{{inputs.parameters.kernel}}"}\'}\n - name: upload-sklearn-model-to-mlflow\n container:\n args: [--model-name, \'{{inputs.parameters.model_name}}\', --model, /tmp/inputs/model/data,\n --input-example, /tmp/inputs/input_example/data, --signature, /tmp/inputs/signature/data,\n --conda-env, /tmp/inputs/conda_env/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill\' \'pandas\' \'scikit-learn\' \'mlflow\' \'boto3\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill\' \'pandas\' \'scikit-learn\'\n \'mlflow\' \'boto3\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def upload_sklearn_model_to_mlflow(\n model_name,\n model_path,\n input_example_path,\n signature_path,\n conda_env_path,\n ):\n import os\n import dill\n from mlflow.sklearn import save_model\n\n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Upload sklearn model to mlflow\', description=\'\')\n _parser.add_argument("--model-name", dest="model_name", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--input-example", dest="input_example_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--signature", dest="signature_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--conda-env", dest="conda_env_path", type=str, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = upload_sklearn_model_to_mlflow(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: model_name}\n artifacts:\n - {name: train-from-csv-conda_env, path: /tmp/inputs/conda_env/data}\n - {name: train-from-csv-input_example, path: /tmp/inputs/input_example/data}\n - {name: train-from-csv-model, path: /tmp/inputs/model/data}\n - {name: train-from-csv-signature, path: /tmp/inputs/signature/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--model-name", {"inputValue": "model_name"}, "--model", {"inputPath":\n "model"}, "--input-example", {"inputPath": "input_example"}, "--signature",\n {"inputPath": "signature"}, "--conda-env", {"inputPath": "conda_env"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\'\n \'\'mlflow\'\' \'\'boto3\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install\n --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\' \'\'mlflow\'\'\n \'\'boto3\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def upload_sklearn_model_to_mlflow(\\n model_name,\\n model_path,\\n input_example_path,\\n signature_path,\\n conda_env_path,\\n):\\n import\n os\\n import dill\\n from mlflow.sklearn import save_model\\n\\n from\n mlflow.tracking.client import MlflowClient\\n\\n os.environ[\\"MLFLOW_S3_ENDPOINT_URL\\"]\n = \\"http://minio-service.kubeflow.svc:9000\\"\\n os.environ[\\"AWS_ACCESS_KEY_ID\\"]\n = \\"minio\\"\\n os.environ[\\"AWS_SECRET_ACCESS_KEY\\"] = \\"minio123\\"\\n\\n client\n = MlflowClient(\\"http://mlflow-server-service.mlflow-system.svc:5000\\")\\n\\n with\n open(model_path, mode=\\"rb\\") as file_reader:\\n clf = dill.load(file_reader)\\n\\n with\n open(input_example_path, \\"rb\\") as file_reader:\\n input_example\n = dill.load(file_reader)\\n\\n with open(signature_path, \\"rb\\") as file_reader:\\n signature\n = dill.load(file_reader)\\n\\n with open(conda_env_path, \\"rb\\") as file_reader:\\n conda_env\n = dill.load(file_reader)\\n\\n save_model(\\n sk_model=clf,\\n path=model_name,\\n serialization_format=\\"cloudpickle\\",\\n conda_env=conda_env,\\n signature=signature,\\n input_example=input_example,\\n )\\n run\n = client.create_run(experiment_id=\\"0\\")\\n client.log_artifact(run.info.run_id,\n model_name)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Upload\n sklearn model to mlflow\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--model-name\\",\n dest=\\"model_name\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--model\\",\n dest=\\"model_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--input-example\\",\n dest=\\"input_example_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--signature\\",\n dest=\\"signature_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--conda-env\\",\n dest=\\"conda_env_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = upload_sklearn_model_to_mlflow(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "model_name", "type": "String"},\n {"name": "model", "type": "dill"}, {"name": "input_example", "type": "dill"},\n {"name": "signature", "type": "dill"}, {"name": "conda_env", "type": "dill"}],\n "name": "Upload sklearn model to mlflow"}\', pipelines.kubeflow.org/component_ref: \'{}\',\n pipelines.kubeflow.org/arguments.parameters: \'{"model_name": "{{inputs.parameters.model_name}}"}\'}\n arguments:\n parameters:\n - {name: kernel}\n - {name: model_name}\n serviceAccountName: pipeline-runner\n')))),(0,r.kt)("p",null,"\uc2e4\ud589\ud6c4 \uc0dd\uc131\ub41c mlflow_pipeline.yaml \ud30c\uc77c\uc744 \ud30c\uc774\ud504\ub77c\uc778 \uc5c5\ub85c\ub4dc\ud55c \ud6c4, \uc2e4\ud589\ud558\uc5ec run \uc758 \uacb0\uacfc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-0",src:a(6516).Z,width:"3408",height:"2156"})),(0,r.kt)("p",null,"mlflow service\ub97c \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud574\uc11c MLflow ui\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/mlflow-server-service -n mlflow-system 5000:5000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 localhost:5000\uc73c\ub85c \uc811\uc18d\ud558\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 run\uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-1",src:a(3702).Z,width:"3360",height:"2100"})),(0,r.kt)("p",null,"run \uc744 \ud074\ub9ad\ud574\uc11c \ud655\uc778\ud558\uba74 \ud559\uc2b5\ud55c \ubaa8\ub378 \ud30c\uc77c\uc774 \uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-2",src:a(5543).Z,width:"3360",height:"2100"})))}_.isMDXComponent=!0},4701:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-0-95d5ec759ef43b21c9c3b22abb64366d.png"},6752:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-1-a096f3eda2246a1c132fc13ce3180ef5.png"},6313:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-2-3cd7cf7e2c853a1242cff7c65e56cf3f.png"},4119:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-3-8b187057bb18f27b1744656ef6d045a1.png"},6516:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-0-ab6c5d7f00bf643c36d236155dc5eb9c.png"},3702:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-1-7723b8f92fb8cea2ff99b8f4639ff0c6.png"},5543:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-2-8b696bd65a922f949877102bbfdafc42.png"}}]); \ No newline at end of file diff --git a/assets/js/d6a8d944.8324f378.js b/assets/js/d6a8d944.8324f378.js deleted file mode 100644 index 2e2a467d..00000000 --- a/assets/js/d6a8d944.8324f378.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8860],{3905:(n,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>c});var t=a(7294);function r(n,e,a){return e in n?Object.defineProperty(n,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[e]=a,n}function l(n,e){var a=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.push.apply(a,t)}return a}function i(n){for(var e=1;e=0||(r[a]=n[a]);return r}(n,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,a)&&(r[a]=n[a])}return r}var o=t.createContext({}),s=function(n){var e=t.useContext(o),a=e;return n&&(a="function"==typeof n?n(e):i(i({},e),n)),a},d=function(n){var e=s(n.components);return t.createElement(o.Provider,{value:e},n.children)},m="mdxType",_={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},u=t.forwardRef((function(n,e){var a=n.components,r=n.mdxType,l=n.originalType,o=n.parentName,d=p(n,["components","mdxType","originalType","parentName"]),m=s(a),u=r,c=m["".concat(o,".").concat(u)]||m[u]||_[u]||l;return a?t.createElement(c,i(i({ref:e},d),{},{components:a})):t.createElement(c,i({ref:e},d))}));function c(n,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof n||r){var l=a.length,i=new Array(l);i[0]=u;var p={};for(var o in e)hasOwnProperty.call(e,o)&&(p[o]=e[o]);p.originalType=n,p[m]="string"==typeof n?n:r,i[1]=p;for(var s=2;s{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>_,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var t=a(7462),r=(a(7294),a(3905));const l={title:"12. Component - MLFlow",description:"",sidebar_position:12,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jongseob Jeon","SeungTae Kim"]},i=void 0,p={unversionedId:"kubeflow/advanced-mlflow",id:"kubeflow/advanced-mlflow",title:"12. Component - MLFlow",description:"",source:"@site/docs/kubeflow/advanced-mlflow.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-mlflow",permalink:"/docs/kubeflow/advanced-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/advanced-mlflow.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:12,frontMatter:{title:"12. Component - MLFlow",description:"",sidebar_position:12,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"11. Pipeline - Run Result",permalink:"/docs/kubeflow/advanced-run"},next:{title:"13. Component - Debugging",permalink:"/docs/kubeflow/how-to-debug"}},o={},s=[{value:"MLFlow Component",id:"mlflow-component",level:2},{value:"MLFlow in Local",id:"mlflow-in-local",level:2},{value:"1. \ubaa8\ub378 \ud559\uc2b5",id:"1-\ubaa8\ub378-\ud559\uc2b5",level:3},{value:"2. MLFLow Infos",id:"2-mlflow-infos",level:3},{value:"3. Save MLFLow Infos",id:"3-save-mlflow-infos",level:3},{value:"MLFlow on Server",id:"mlflow-on-server",level:2},{value:"MLFlow Component",id:"mlflow-component-1",level:2},{value:"MLFlow Pipeline",id:"mlflow-pipeline",level:2},{value:"Data Component",id:"data-component",level:3},{value:"Pipeline",id:"pipeline",level:3},{value:"Run",id:"run",level:3}],d={toc:s},m="wrapper";function _(n){let{components:e,...l}=n;return(0,r.kt)(m,(0,t.Z)({},d,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"mlflow-component"},"MLFlow Component"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-component"},"Advanced Usage Component")," \uc5d0\uc11c \ud559\uc2b5\ud55c \ubaa8\ub378\uc774 API Deployment\uae4c\uc9c0 \uc774\uc5b4\uc9c0\uae30 \uc704\ud574\uc11c\ub294 MLFlow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 MLFlow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud558\ub294 \uacfc\uc815\uc744 \uc124\uba85\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"mlflow-in-local"},"MLFlow in Local"),(0,r.kt)("p",null,"MLFlow\uc5d0\uc11c \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uace0 \uc11c\ube59\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uc758 \ud56d\ubaa9\ub4e4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"model"),(0,r.kt)("li",{parentName:"ul"},"signature"),(0,r.kt)("li",{parentName:"ul"},"input_example"),(0,r.kt)("li",{parentName:"ul"},"conda_env")),(0,r.kt)("p",null,"\ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \ud1b5\ud574\uc11c MLFLow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"1-\ubaa8\ub378-\ud559\uc2b5"},"1. \ubaa8\ub378 \ud559\uc2b5"),(0,r.kt)("p",null,"\uc544\ub798 \uacfc\uc815\uc740 iris \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 SVC \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import pandas as pd\nfrom sklearn.datasets import load_iris\nfrom sklearn.svm import SVC\n\niris = load_iris()\n\ndata = pd.DataFrame(iris["data"], columns=iris["feature_names"])\ntarget = pd.DataFrame(iris["target"], columns=["target"])\n\nclf = SVC(kernel="rbf")\nclf.fit(data, target)\n\n')),(0,r.kt)("h3",{id:"2-mlflow-infos"},"2. MLFLow Infos"),(0,r.kt)("p",null,"mlflow\uc5d0 \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \ub9cc\ub4dc\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from mlflow.models.signature import infer_signature\nfrom mlflow.utils.environment import _mlflow_conda_env\n\ninput_example = data.sample(1)\nsignature = infer_signature(data, clf.predict(data))\nconda_env = _mlflow_conda_env(additional_pip_deps=["dill", "pandas", "scikit-learn"])\n')),(0,r.kt)("p",null,"\uac01 \ubcc0\uc218\uc758 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"input_example")),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"sepal length (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"sepal width (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"petal length (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"petal width (cm)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6.5"),(0,r.kt)("td",{parentName:"tr",align:null},"6.7"),(0,r.kt)("td",{parentName:"tr",align:null},"3.1"),(0,r.kt)("td",{parentName:"tr",align:null},"4.4"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"signature")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"},"inputs:\n ['sepal length (cm)': double, 'sepal width (cm)': double, 'petal length (cm)': double, 'petal width (cm)': double]\noutputs:\n [Tensor('int64', (-1,))]\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"conda_env")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"},"{'name': 'mlflow-env',\n 'channels': ['conda-forge'],\n 'dependencies': ['python=3.8.10',\n 'pip',\n {'pip': ['mlflow', 'dill', 'pandas', 'scikit-learn']}]}\n")))),(0,r.kt)("h3",{id:"3-save-mlflow-infos"},"3. Save MLFLow Infos"),(0,r.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c \ud559\uc2b5\ud55c \uc815\ubcf4\ub4e4\uacfc \ubaa8\ub378\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4.\n\ud559\uc2b5\ud55c \ubaa8\ub378\uc774 sklearn \ud328\ud0a4\uc9c0\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow.sklearn")," \uc744 \uc774\uc6a9\ud558\uba74 \uc27d\uac8c \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from mlflow.sklearn import save_model\n\nsave_model(\n sk_model=clf,\n path="svc",\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n)\n')),(0,r.kt)("p",null,"\ub85c\uceec\uc5d0\uc11c \uc791\uc5c5\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 svc \ud3f4\ub354\uac00 \uc0dd\uae30\uba70 \uc544\ub798\uc640 \uac19\uc740 \ud30c\uc77c\ub4e4\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls svc\n")),(0,r.kt)("p",null,"\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uc758 \ucd9c\ub825\uac12\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"MLmodel conda.yaml input_example.json model.pkl requirements.txt\n")),(0,r.kt)("p",null,"\uac01 \ud30c\uc77c\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"MLmodel"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'flavors:\n python_function:\n env: conda.yaml\n loader_module: mlflow.sklearn\n model_path: model.pkl\n python_version: 3.8.10\n sklearn:\n pickled_model: model.pkl\n serialization_format: cloudpickle\n sklearn_version: 1.0.1\nsaved_input_example_info:\n artifact_path: input_example.json\n pandas_orient: split\n type: dataframe\nsignature:\n inputs: \'[{"name": "sepal length (cm)", "type": "double"}, {"name": "sepal width\n (cm)", "type": "double"}, {"name": "petal length (cm)", "type": "double"}, {"name":\n "petal width (cm)", "type": "double"}]\'\n outputs: \'[{"type": "tensor", "tensor-spec": {"dtype": "int64", "shape": [-1]}}]\'\nutc_time_created: \'2021-12-06 06:52:30.612810\'\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"conda.yaml"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"channels:\n- conda-forge\ndependencies:\n- python=3.8.10\n- pip\n- pip:\n - mlflow\n - dill\n - pandas\n - scikit-learn\nname: mlflow-env\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"input_example.json"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "columns": \n [\n "sepal length (cm)",\n "sepal width (cm)",\n "petal length (cm)",\n "petal width (cm)"\n ],\n "data": \n [\n [6.7, 3.1, 4.4, 1.4]\n ]\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"requirements.txt"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlflow\ndill\npandas\nscikit-learn\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"model.pkl"))),(0,r.kt)("h2",{id:"mlflow-on-server"},"MLFlow on Server"),(0,r.kt)("p",null,"\uc774\uc81c \uc800\uc7a5\ub41c \ubaa8\ub378\uc744 mlflow \uc11c\ubc84\uc5d0 \uc62c\ub9ac\ub294 \uc791\uc5c5\uc744 \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import mlflow\n\nwith mlflow.start_run():\n mlflow.log_artifact("svc/")\n')),(0,r.kt)("p",null,"\uc800\uc7a5\ud558\uace0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlruns")," \uac00 \uc0dd\uc131\ub41c \uacbd\ub85c\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow ui")," \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 mlflow \uc11c\ubc84\uc640 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ub744\uc6c1\ub2c8\ub2e4.\nmlflow \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc811\uc18d\ud558\uc5ec \uc0dd\uc131\ub41c run\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-0.png",src:a(4701).Z,width:"2782",height:"2496"}),"\n(\ud574\ub2f9 \ud654\uba74\uc740 mlflow \ubc84\uc804\uc5d0 \ub530\ub77c \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4.)"),(0,r.kt)("h2",{id:"mlflow-component-1"},"MLFlow Component"),(0,r.kt)("p",null,"\uc774\uc81c Kubeflow\uc5d0\uc11c \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc740 \ud06c\uac8c 3\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \ud544\uc694\ud55c \ud658\uacbd\uc744 \uc800\uc7a5 \ud6c4 MLFlow \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc5c5\ub85c\ub4dc\ub9cc \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-1.png",src:a(6752).Z,width:"578",height:"844"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud559\uc2b5\ub41c \ubaa8\ub378\uacfc \ub370\uc774\ud130\ub97c MLFlow \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \uc804\ub2ec \ud6c4 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc800\uc7a5\uacfc \uc5c5\ub85c\ub4dc \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-2.png",src:a(6313).Z,width:"900",height:"846"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc800\uc7a5\uacfc \uc5c5\ub85c\ub4dc\ub97c \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-3.png",src:a(4119).Z,width:"578",height:"406"})))),(0,r.kt)("p",null,"\uc800\ud76c\ub294 \uc774 \uc911 1\ubc88\uc758 \uc811\uadfc \ubc29\ubc95\uc744 \ud1b5\ud574 \ubaa8\ub378\uc744 \uad00\ub9ac\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.\n\uc774\uc720\ub294 MLFlow \ubaa8\ub378\uc744 \uc5c5\ub85c\ub4dc\ud558\ub294 \ucf54\ub4dc\ub294 \ubc14\ub00c\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ub9e4\ubc88 3\ubc88\ucc98\ub7fc \ucef4\ud3ec\ub10c\ud2b8 \uc791\uc131\ub9c8\ub2e4 \uc791\uc131\ud560 \ud544\uc694\ub294 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc7ac\ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 1\ubc88\uacfc 2\ubc88\uc758 \ubc29\ubc95\uc73c\ub85c \uac00\ub2a5\ud569\ub2c8\ub2e4.\n\ub2e4\ub9cc 2\ubc88\uc758 \uacbd\uc6b0 \ubaa8\ub378\uc774 \ud559\uc2b5\ub41c \uc774\ubbf8\uc9c0\uc640 \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc804\ub2ec\ud574\uc57c \ud558\ubbc0\ub85c \uacb0\uad6d \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \ucd94\uac00 \uc815\ubcf4\ub97c \uc804\ub2ec\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"1\ubc88\uc758 \ubc29\ubc95\uc73c\ub85c \uc9c4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub610\ud55c \ubcc0\uacbd\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294\ub370 \ud544\uc694\ud55c \ud658\uacbd\ub4e4\uc744 \uc800\uc7a5\ud574\uc8fc\ub294 \ucf54\ub4dc\uac00 \ucd94\uac00\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n')),(0,r.kt)("p",null,"\uadf8\ub9ac\uace0 MLFlow\uc5d0 \uc5c5\ub85c\ub4dc\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.\n\uc774 \ub54c \uc5c5\ub85c\ub4dc\ub418\ub294 MLflow\uc758 endpoint\ub97c \uc6b0\ub9ac\uac00 \uc124\uce58\ud55c ",(0,r.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-mlflow"},"mlflow service")," \ub85c \uc774\uc5b4\uc9c0\uac8c \uc124\uc815\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \ub54c S3 Endpoint\uc758 \uc8fc\uc18c\ub294 MLflow Server \uc124\uce58 \ub2f9\uc2dc \uc124\uce58\ud55c minio\uc758 ",(0,r.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/services-networking/dns-pod-service/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc11c\ube44\uc2a4 DNS \ub124\uc784\uc744 \ud65c\uc6a9"),"\ud569\ub2c8\ub2e4. \ud574\ub2f9 service \ub294 kubeflow namespace\uc5d0\uc11c minio-service\ub77c\ub294 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\uc73c\ubbc0\ub85c, ",(0,r.kt)("inlineCode",{parentName:"p"},"http://minio-service.kubeflow.svc:9000")," \ub85c \uc124\uc815\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\uc640 \ube44\uc2b7\ud558\uac8c tracking_uri\uc758 \uc8fc\uc18c\ub294 mlflow server\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc11c\ube44\uc2a4 DNS \ub124\uc784\uc744 \ud65c\uc6a9\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"http://mlflow-server-service.mlflow-system.svc:5000")," \ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n')),(0,r.kt)("h2",{id:"mlflow-pipeline"},"MLFlow Pipeline"),(0,r.kt)("p",null,"\uc774\uc81c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc5f0\uacb0\ud574\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"data-component"},"Data Component"),(0,r.kt)("p",null,"\ubaa8\ub378\uc744 \ud559\uc2b5\ud560 \ub54c \uc4f8 \ub370\uc774\ud130\ub294 sklearn\uc758 iris \uc785\ub2c8\ub2e4.\n\ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n')),(0,r.kt)("h3",{id:"pipeline"},"Pipeline"),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="mlflow_pipeline")\ndef mlflow_pipeline(kernel: str, model_name: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name=model_name,\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n')),(0,r.kt)("h3",{id:"run"},"Run"),(0,r.kt)("p",null,"\uc704\uc5d0\uc11c \uc791\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ud558\ub098\uc758 \ud30c\uc774\uc36c \ud30c\uc77c\uc5d0 \uc815\ub9ac\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n\n@pipeline(name="mlflow_pipeline")\ndef mlflow_pipeline(kernel: str, model_name: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name=model_name,\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(mlflow_pipeline, "mlflow_pipeline.yaml")\n')),(0,r.kt)("p",null,(0,r.kt)("details",null,(0,r.kt)("summary",null,"mlflow_pipeline.yaml"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: mlflow-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.10, pipelines.kubeflow.org/pipeline_compilation_time: \'2022-01-19T14:14:11.999807\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "kernel", "type":\n "String"}, {"name": "model_name", "type": "String"}], "name": "mlflow_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.10}\nspec:\n entrypoint: mlflow-pipeline\n templates:\n - name: load-iris-data\n container:\n args: [--data, /tmp/outputs/data/data, --target, /tmp/outputs/target/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'pandas\' \'scikit-learn\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'pandas\' \'scikit-learn\' --user)\n && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def load_iris_data(\n data_path,\n target_path,\n ):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Load iris data\', description=\'\')\n _parser.add_argument("--data", dest="data_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--target", dest="target_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = load_iris_data(**_parsed_args)\n image: python:3.7\n outputs:\n artifacts:\n - {name: load-iris-data-data, path: /tmp/outputs/data/data}\n - {name: load-iris-data-target, path: /tmp/outputs/target/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--data", {"outputPath": "data"}, "--target", {"outputPath": "target"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'pandas\'\' \'\'scikit-learn\'\' ||\n PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'\'pandas\'\' \'\'scikit-learn\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef load_iris_data(\\n data_path,\\n target_path,\\n):\\n import\n pandas as pd\\n from sklearn.datasets import load_iris\\n\\n iris = load_iris()\\n\\n data\n = pd.DataFrame(iris[\\"data\\"], columns=iris[\\"feature_names\\"])\\n target\n = pd.DataFrame(iris[\\"target\\"], columns=[\\"target\\"])\\n\\n data.to_csv(data_path,\n index=False)\\n target.to_csv(target_path, index=False)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Load iris data\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--data\\",\n dest=\\"data_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--target\\", dest=\\"target_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = load_iris_data(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "name": "Load iris data", "outputs": [{"name":\n "data", "type": "csv"}, {"name": "target", "type": "csv"}]}\', pipelines.kubeflow.org/component_ref: \'{}\'}\n - name: mlflow-pipeline\n inputs:\n parameters:\n - {name: kernel}\n - {name: model_name}\n dag:\n tasks:\n - {name: load-iris-data, template: load-iris-data}\n - name: train-from-csv\n template: train-from-csv\n dependencies: [load-iris-data]\n arguments:\n parameters:\n - {name: kernel, value: \'{{inputs.parameters.kernel}}\'}\n artifacts:\n - {name: load-iris-data-data, from: \'{{tasks.load-iris-data.outputs.artifacts.load-iris-data-data}}\'}\n - {name: load-iris-data-target, from: \'{{tasks.load-iris-data.outputs.artifacts.load-iris-data-target}}\'}\n - name: upload-sklearn-model-to-mlflow\n template: upload-sklearn-model-to-mlflow\n dependencies: [train-from-csv]\n arguments:\n parameters:\n - {name: model_name, value: \'{{inputs.parameters.model_name}}\'}\n artifacts:\n - {name: train-from-csv-conda_env, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-conda_env}}\'}\n - {name: train-from-csv-input_example, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-input_example}}\'}\n - {name: train-from-csv-model, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-model}}\'}\n - {name: train-from-csv-signature, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-signature}}\'}\n - name: train-from-csv\n container:\n args: [--train-data, /tmp/inputs/train_data/data, --train-target, /tmp/inputs/train_target/data,\n --kernel, \'{{inputs.parameters.kernel}}\', --model, /tmp/outputs/model/data,\n --input-example, /tmp/outputs/input_example/data, --signature, /tmp/outputs/signature/data,\n --conda-env, /tmp/outputs/conda_env/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill\' \'pandas\' \'scikit-learn\' \'mlflow\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill\' \'pandas\' \'scikit-learn\'\n \'mlflow\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n input_example_path,\n signature_path,\n conda_env_path,\n kernel,\n ):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--input-example", dest="input_example_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--signature", dest="signature_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--conda-env", dest="conda_env_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: kernel}\n artifacts:\n - {name: load-iris-data-data, path: /tmp/inputs/train_data/data}\n - {name: load-iris-data-target, path: /tmp/inputs/train_target/data}\n outputs:\n artifacts:\n - {name: train-from-csv-conda_env, path: /tmp/outputs/conda_env/data}\n - {name: train-from-csv-input_example, path: /tmp/outputs/input_example/data}\n - {name: train-from-csv-model, path: /tmp/outputs/model/data}\n - {name: train-from-csv-signature, path: /tmp/outputs/signature/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--train-data", {"inputPath": "train_data"}, "--train-target",\n {"inputPath": "train_target"}, "--kernel", {"inputValue": "kernel"}, "--model",\n {"outputPath": "model"}, "--input-example", {"outputPath": "input_example"},\n "--signature", {"outputPath": "signature"}, "--conda-env", {"outputPath":\n "conda_env"}], "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\'\n \'\'scikit-learn\'\' \'\'mlflow\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m\n pip install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\'\n \'\'mlflow\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef train_from_csv(\\n train_data_path,\\n train_target_path,\\n model_path,\\n input_example_path,\\n signature_path,\\n conda_env_path,\\n kernel,\\n):\\n import\n dill\\n import pandas as pd\\n from sklearn.svm import SVC\\n\\n from\n mlflow.models.signature import infer_signature\\n from mlflow.utils.environment\n import _mlflow_conda_env\\n\\n train_data = pd.read_csv(train_data_path)\\n train_target\n = pd.read_csv(train_target_path)\\n\\n clf = SVC(kernel=kernel)\\n clf.fit(train_data,\n train_target)\\n\\n with open(model_path, mode=\\"wb\\") as file_writer:\\n dill.dump(clf,\n file_writer)\\n\\n input_example = train_data.sample(1)\\n with open(input_example_path,\n \\"wb\\") as file_writer:\\n dill.dump(input_example, file_writer)\\n\\n signature\n = infer_signature(train_data, clf.predict(train_data))\\n with open(signature_path,\n \\"wb\\") as file_writer:\\n dill.dump(signature, file_writer)\\n\\n conda_env\n = _mlflow_conda_env(\\n additional_pip_deps=[\\"dill\\", \\"pandas\\",\n \\"scikit-learn\\"]\\n )\\n with open(conda_env_path, \\"wb\\") as file_writer:\\n dill.dump(conda_env,\n file_writer)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Train\n from csv\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--train-data\\", dest=\\"train_data_path\\",\n type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--train-target\\",\n dest=\\"train_target_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--kernel\\",\n dest=\\"kernel\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--model\\",\n dest=\\"model_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--input-example\\", dest=\\"input_example_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--signature\\",\n dest=\\"signature_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--conda-env\\", dest=\\"conda_env_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = train_from_csv(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "train_data", "type": "csv"},\n {"name": "train_target", "type": "csv"}, {"name": "kernel", "type": "String"}],\n "name": "Train from csv", "outputs": [{"name": "model", "type": "dill"},\n {"name": "input_example", "type": "dill"}, {"name": "signature", "type":\n "dill"}, {"name": "conda_env", "type": "dill"}]}\', pipelines.kubeflow.org/component_ref: \'{}\',\n pipelines.kubeflow.org/arguments.parameters: \'{"kernel": "{{inputs.parameters.kernel}}"}\'}\n - name: upload-sklearn-model-to-mlflow\n container:\n args: [--model-name, \'{{inputs.parameters.model_name}}\', --model, /tmp/inputs/model/data,\n --input-example, /tmp/inputs/input_example/data, --signature, /tmp/inputs/signature/data,\n --conda-env, /tmp/inputs/conda_env/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill\' \'pandas\' \'scikit-learn\' \'mlflow\' \'boto3\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill\' \'pandas\' \'scikit-learn\'\n \'mlflow\' \'boto3\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def upload_sklearn_model_to_mlflow(\n model_name,\n model_path,\n input_example_path,\n signature_path,\n conda_env_path,\n ):\n import os\n import dill\n from mlflow.sklearn import save_model\n\n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Upload sklearn model to mlflow\', description=\'\')\n _parser.add_argument("--model-name", dest="model_name", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--input-example", dest="input_example_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--signature", dest="signature_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--conda-env", dest="conda_env_path", type=str, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = upload_sklearn_model_to_mlflow(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: model_name}\n artifacts:\n - {name: train-from-csv-conda_env, path: /tmp/inputs/conda_env/data}\n - {name: train-from-csv-input_example, path: /tmp/inputs/input_example/data}\n - {name: train-from-csv-model, path: /tmp/inputs/model/data}\n - {name: train-from-csv-signature, path: /tmp/inputs/signature/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--model-name", {"inputValue": "model_name"}, "--model", {"inputPath":\n "model"}, "--input-example", {"inputPath": "input_example"}, "--signature",\n {"inputPath": "signature"}, "--conda-env", {"inputPath": "conda_env"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\'\n \'\'mlflow\'\' \'\'boto3\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install\n --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\' \'\'mlflow\'\'\n \'\'boto3\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def upload_sklearn_model_to_mlflow(\\n model_name,\\n model_path,\\n input_example_path,\\n signature_path,\\n conda_env_path,\\n):\\n import\n os\\n import dill\\n from mlflow.sklearn import save_model\\n\\n from\n mlflow.tracking.client import MlflowClient\\n\\n os.environ[\\"MLFLOW_S3_ENDPOINT_URL\\"]\n = \\"http://minio-service.kubeflow.svc:9000\\"\\n os.environ[\\"AWS_ACCESS_KEY_ID\\"]\n = \\"minio\\"\\n os.environ[\\"AWS_SECRET_ACCESS_KEY\\"] = \\"minio123\\"\\n\\n client\n = MlflowClient(\\"http://mlflow-server-service.mlflow-system.svc:5000\\")\\n\\n with\n open(model_path, mode=\\"rb\\") as file_reader:\\n clf = dill.load(file_reader)\\n\\n with\n open(input_example_path, \\"rb\\") as file_reader:\\n input_example\n = dill.load(file_reader)\\n\\n with open(signature_path, \\"rb\\") as file_reader:\\n signature\n = dill.load(file_reader)\\n\\n with open(conda_env_path, \\"rb\\") as file_reader:\\n conda_env\n = dill.load(file_reader)\\n\\n save_model(\\n sk_model=clf,\\n path=model_name,\\n serialization_format=\\"cloudpickle\\",\\n conda_env=conda_env,\\n signature=signature,\\n input_example=input_example,\\n )\\n run\n = client.create_run(experiment_id=\\"0\\")\\n client.log_artifact(run.info.run_id,\n model_name)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Upload\n sklearn model to mlflow\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--model-name\\",\n dest=\\"model_name\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--model\\",\n dest=\\"model_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--input-example\\",\n dest=\\"input_example_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--signature\\",\n dest=\\"signature_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--conda-env\\",\n dest=\\"conda_env_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = upload_sklearn_model_to_mlflow(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "model_name", "type": "String"},\n {"name": "model", "type": "dill"}, {"name": "input_example", "type": "dill"},\n {"name": "signature", "type": "dill"}, {"name": "conda_env", "type": "dill"}],\n "name": "Upload sklearn model to mlflow"}\', pipelines.kubeflow.org/component_ref: \'{}\',\n pipelines.kubeflow.org/arguments.parameters: \'{"model_name": "{{inputs.parameters.model_name}}"}\'}\n arguments:\n parameters:\n - {name: kernel}\n - {name: model_name}\n serviceAccountName: pipeline-runner\n')))),(0,r.kt)("p",null,"\uc2e4\ud589\ud6c4 \uc0dd\uc131\ub41c mlflow_pipeline.yaml \ud30c\uc77c\uc744 \ud30c\uc774\ud504\ub77c\uc778 \uc5c5\ub85c\ub4dc\ud55c \ud6c4, \uc2e4\ud589\ud558\uc5ec run \uc758 \uacb0\uacfc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-0",src:a(6516).Z,width:"3408",height:"2156"})),(0,r.kt)("p",null,"mlflow service\ub97c \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud574\uc11c MLflow ui\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/mlflow-server-service -n mlflow-system 5000:5000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 localhost:5000\uc73c\ub85c \uc811\uc18d\ud558\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 run\uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-1",src:a(3702).Z,width:"3360",height:"2100"})),(0,r.kt)("p",null,"run \uc744 \ud074\ub9ad\ud574\uc11c \ud655\uc778\ud558\uba74 \ud559\uc2b5\ud55c \ubaa8\ub378 \ud30c\uc77c\uc774 \uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-2",src:a(5543).Z,width:"3360",height:"2100"})))}_.isMDXComponent=!0},4701:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-0-95d5ec759ef43b21c9c3b22abb64366d.png"},6752:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-1-a096f3eda2246a1c132fc13ce3180ef5.png"},6313:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-2-3cd7cf7e2c853a1242cff7c65e56cf3f.png"},4119:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-3-8b187057bb18f27b1744656ef6d045a1.png"},6516:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-0-ab6c5d7f00bf643c36d236155dc5eb9c.png"},3702:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-1-7723b8f92fb8cea2ff99b8f4639ff0c6.png"},5543:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-2-8b696bd65a922f949877102bbfdafc42.png"}}]); \ No newline at end of file diff --git a/assets/js/d7d2d94a.1405d076.js b/assets/js/d7d2d94a.1405d076.js new file mode 100644 index 00000000..2cf10fb2 --- /dev/null +++ b/assets/js/d7d2d94a.1405d076.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8309],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),s=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return r.createElement(i.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),c=s(n),m=o,f=c["".concat(i,".").concat(m)]||c[m]||u[m]||a;return n?r.createElement(f,l(l({ref:t},d),{},{components:n})):r.createElement(f,l({ref:t},d))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p[c]="string"==typeof e?e:o,l[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",sidebar_position:3,date:new Date("2021-12-24T00:00:00.000Z"),lastmod:new Date("2021-12-24T00:00:00.000Z"),contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"api-deployment/seldon-pg",id:"api-deployment/seldon-pg",title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",source:"@site/docs/api-deployment/seldon-pg.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-pg",permalink:"/docs/api-deployment/seldon-pg",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-pg.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",sidebar_position:3,date:"2021-12-24T00:00:00.000Z",lastmod:"2021-12-24T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"2. Deploy SeldonDeployment",permalink:"/docs/api-deployment/seldon-iris"},next:{title:"4. Seldon Fields",permalink:"/docs/api-deployment/seldon-fields"}},i={},s=[{value:"Grafana & Prometheus",id:"grafana--prometheus",level:2},{value:"\ub300\uc2dc\ubcf4\ub4dc",id:"\ub300\uc2dc\ubcf4\ub4dc",level:3},{value:"API \uc694\uccad",id:"api-\uc694\uccad",level:3}],d={toc:s},c="wrapper";function u(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"grafana--prometheus"},"Grafana & Prometheus"),(0,o.kt)("p",null,"\uc774\uc81c, ",(0,o.kt)("a",{parentName:"p",href:"/docs/api-deployment/seldon-iris"},"\uc9c0\ub09c \ud398\uc774\uc9c0"),"\uc5d0\uc11c \uc0dd\uc131\ud588\ub358 SeldonDeployment \ub85c API Request \ub97c \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud574\ubcf4\uace0, \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \ubcc0\ud654\uac00 \uc77c\uc5b4\ub098\ub294\uc9c0 \ud655\uc778\ud574\ubd05\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"\ub300\uc2dc\ubcf4\ub4dc"},"\ub300\uc2dc\ubcf4\ub4dc"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-pg"},"\uc55e\uc11c \uc0dd\uc131\ud55c \ub300\uc2dc\ubcf4\ub4dc"),"\ub97c \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/seldon-core-analytics-grafana -n seldon-system 8090:80\n")),(0,o.kt)("h3",{id:"api-\uc694\uccad"},"API \uc694\uccad"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/api-deployment/seldon-iris#using-cli"},"\uc55e\uc11c \uc0dd\uc131\ud55c Seldon Deployment"),"\uc5d0 \uc694\uccad\uc744 ",(0,o.kt)("strong",{parentName:"p"},"\ubc18\ubcf5\ud574\uc11c")," \ubcf4\ub0c5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H 'Content-Type: application/json' \\\n-d '{ \"data\": { \"ndarray\": [[1,2,3,4]] } }'\n")),(0,o.kt)("p",null,"\uadf8\ub9ac\uace0 \uadf8\ub77c\ud30c\ub098 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 Global Request Rate \uc774 ",(0,o.kt)("inlineCode",{parentName:"p"},"0 ops")," \uc5d0\uc11c \uc21c\uac04\uc801\uc73c\ub85c \uc0c1\uc2b9\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"repeat-raise.png",src:n(7434).Z,width:"5016",height:"2826"})),(0,o.kt)("p",null,"\uc774\ub807\uac8c \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}u.isMDXComponent=!0},7434:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/repeat-raise-60a3d043d2ac70549160aa936b4bed46.png"}}]); \ No newline at end of file diff --git a/assets/js/d7d2d94a.97c989bd.js b/assets/js/d7d2d94a.97c989bd.js deleted file mode 100644 index 36d3168e..00000000 --- a/assets/js/d7d2d94a.97c989bd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8309],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),s=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return r.createElement(i.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),c=s(n),m=o,f=c["".concat(i,".").concat(m)]||c[m]||u[m]||a;return n?r.createElement(f,l(l({ref:t},d),{},{components:n})):r.createElement(f,l({ref:t},d))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p[c]="string"==typeof e?e:o,l[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",sidebar_position:3,date:new Date("2021-12-24T00:00:00.000Z"),lastmod:new Date("2021-12-24T00:00:00.000Z"),contributors:["Jongseob Jeon"]},l=void 0,p={unversionedId:"api-deployment/seldon-pg",id:"api-deployment/seldon-pg",title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",source:"@site/docs/api-deployment/seldon-pg.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-pg",permalink:"/docs/api-deployment/seldon-pg",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-pg.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Seldon Monitoring",description:"Prometheus & Grafana \ud655\uc778\ud558\uae30",sidebar_position:3,date:"2021-12-24T00:00:00.000Z",lastmod:"2021-12-24T00:00:00.000Z",contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"2. Deploy SeldonDeployment",permalink:"/docs/api-deployment/seldon-iris"},next:{title:"4. Seldon Fields",permalink:"/docs/api-deployment/seldon-fields"}},i={},s=[{value:"Grafana & Prometheus",id:"grafana--prometheus",level:2},{value:"\ub300\uc2dc\ubcf4\ub4dc",id:"\ub300\uc2dc\ubcf4\ub4dc",level:3},{value:"API \uc694\uccad",id:"api-\uc694\uccad",level:3}],d={toc:s},c="wrapper";function u(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"grafana--prometheus"},"Grafana & Prometheus"),(0,o.kt)("p",null,"\uc774\uc81c, ",(0,o.kt)("a",{parentName:"p",href:"/docs/api-deployment/seldon-iris"},"\uc9c0\ub09c \ud398\uc774\uc9c0"),"\uc5d0\uc11c \uc0dd\uc131\ud588\ub358 SeldonDeployment \ub85c API Request \ub97c \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud574\ubcf4\uace0, \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \ubcc0\ud654\uac00 \uc77c\uc5b4\ub098\ub294\uc9c0 \ud655\uc778\ud574\ubd05\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"\ub300\uc2dc\ubcf4\ub4dc"},"\ub300\uc2dc\ubcf4\ub4dc"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/setup-components/install-components-pg"},"\uc55e\uc11c \uc0dd\uc131\ud55c \ub300\uc2dc\ubcf4\ub4dc"),"\ub97c \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/seldon-core-analytics-grafana -n seldon-system 8090:80\n")),(0,o.kt)("h3",{id:"api-\uc694\uccad"},"API \uc694\uccad"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/api-deployment/seldon-iris#using-cli"},"\uc55e\uc11c \uc0dd\uc131\ud55c Seldon Deployment"),"\uc5d0 \uc694\uccad\uc744 ",(0,o.kt)("strong",{parentName:"p"},"\ubc18\ubcf5\ud574\uc11c")," \ubcf4\ub0c5\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H 'Content-Type: application/json' \\\n-d '{ \"data\": { \"ndarray\": [[1,2,3,4]] } }'\n")),(0,o.kt)("p",null,"\uadf8\ub9ac\uace0 \uadf8\ub77c\ud30c\ub098 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 Global Request Rate \uc774 ",(0,o.kt)("inlineCode",{parentName:"p"},"0 ops")," \uc5d0\uc11c \uc21c\uac04\uc801\uc73c\ub85c \uc0c1\uc2b9\ud558\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"repeat-raise.png",src:n(7434).Z,width:"5016",height:"2826"})),(0,o.kt)("p",null,"\uc774\ub807\uac8c \ud504\ub85c\uba54\ud14c\uc6b0\uc2a4\uc640 \uadf8\ub77c\ud30c\ub098\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}u.isMDXComponent=!0},7434:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/repeat-raise-60a3d043d2ac70549160aa936b4bed46.png"}}]); \ No newline at end of file diff --git a/assets/js/d7dc9408.1a390133.js b/assets/js/d7dc9408.43f1d27f.js similarity index 59% rename from assets/js/d7dc9408.1a390133.js rename to assets/js/d7dc9408.43f1d27f.js index e321f2a2..037b763e 100644 --- a/assets/js/d7dc9408.1a390133.js +++ b/assets/js/d7dc9408.43f1d27f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8225],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=u(n),f=o,d=p["".concat(s,".").concat(f)]||p[f]||m[f]||i;return n?r.createElement(d,a(a({ref:t},c),{},{components:n})):r.createElement(d,a({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,a[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const i={title:"Community",sidebar_position:1},a=void 0,l={unversionedId:"community",id:"community",title:"Community",description:"\ubaa8\ub450\uc758 MLOps \ub9b4\ub9ac\uc988 \uc18c\uc2dd",source:"@site/community/community.md",sourceDirName:".",slug:"/community",permalink:"/community/community",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/community/community.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"Community",sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"How to Contribute",permalink:"/community/how-to-contribute"}},s={},u=[{value:"\ubaa8\ub450\uc758 MLOps \ub9b4\ub9ac\uc988 \uc18c\uc2dd",id:"\ubaa8\ub450\uc758-mlops-\ub9b4\ub9ac\uc988-\uc18c\uc2dd",level:3},{value:"Question",id:"question",level:3},{value:"Suggestion",id:"suggestion",level:3}],c={toc:u},p="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h3",{id:"\ubaa8\ub450\uc758-mlops-\ub9b4\ub9ac\uc988-\uc18c\uc2dd"},(0,o.kt)("em",{parentName:"h3"},"\ubaa8\ub450\uc758 MLOps")," \ub9b4\ub9ac\uc988 \uc18c\uc2dd"),(0,o.kt)("p",null,"\uc0c8\ub85c\uc6b4 \ud3ec\uc2a4\ud2b8\ub098 \uc218\uc815\uc0ac\ud56d\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/mlops-for-all/mlops-for-all.github.io/discussions/categories/announcements"},"Announcements"),"\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"question"},"Question"),(0,o.kt)("p",null,"\ud504\ub85c\uc81d\ud2b8 \ub0b4\uc6a9\uacfc \uad00\ub828\ub41c \uad81\uae08\uc810\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/mlops-for-all/mlops-for-all.github.io/discussions/categories/q-a"},"Q&A"),"\ub97c \ud1b5\ud574 \uc9c8\ubb38\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"suggestion"},"Suggestion"),(0,o.kt)("p",null,"\uc81c\uc548\uc810\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/mlops-for-all/mlops-for-all.github.io/discussions/categories/ideas"},"Ideas"),"\ub97c \ud1b5\ud574 \uc81c\uc548\ud574 \uc8fc\uc2dc\uba74 \ub429\ub2c8\ub2e4."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8225],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=u(n),f=o,d=p["".concat(s,".").concat(f)]||p[f]||m[f]||i;return n?r.createElement(d,a(a({ref:t},c),{},{components:n})):r.createElement(d,a({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,a[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const i={title:"Community",sidebar_position:1},a=void 0,l={unversionedId:"community",id:"community",title:"Community",description:"\ubaa8\ub450\uc758 MLOps \ub9b4\ub9ac\uc988 \uc18c\uc2dd",source:"@site/community/community.md",sourceDirName:".",slug:"/community",permalink:"/community/community",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/community/community.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"Community",sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"How to Contribute",permalink:"/community/how-to-contribute"}},s={},u=[{value:"\ubaa8\ub450\uc758 MLOps \ub9b4\ub9ac\uc988 \uc18c\uc2dd",id:"\ubaa8\ub450\uc758-mlops-\ub9b4\ub9ac\uc988-\uc18c\uc2dd",level:3},{value:"Question",id:"question",level:3},{value:"Suggestion",id:"suggestion",level:3}],c={toc:u},p="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h3",{id:"\ubaa8\ub450\uc758-mlops-\ub9b4\ub9ac\uc988-\uc18c\uc2dd"},(0,o.kt)("em",{parentName:"h3"},"\ubaa8\ub450\uc758 MLOps")," \ub9b4\ub9ac\uc988 \uc18c\uc2dd"),(0,o.kt)("p",null,"\uc0c8\ub85c\uc6b4 \ud3ec\uc2a4\ud2b8\ub098 \uc218\uc815\uc0ac\ud56d\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/mlops-for-all/mlops-for-all.github.io/discussions/categories/announcements"},"Announcements"),"\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"question"},"Question"),(0,o.kt)("p",null,"\ud504\ub85c\uc81d\ud2b8 \ub0b4\uc6a9\uacfc \uad00\ub828\ub41c \uad81\uae08\uc810\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/mlops-for-all/mlops-for-all.github.io/discussions/categories/q-a"},"Q&A"),"\ub97c \ud1b5\ud574 \uc9c8\ubb38\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h3",{id:"suggestion"},"Suggestion"),(0,o.kt)("p",null,"\uc81c\uc548\uc810\uc740 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/mlops-for-all/mlops-for-all.github.io/discussions/categories/ideas"},"Ideas"),"\ub97c \ud1b5\ud574 \uc81c\uc548\ud574 \uc8fc\uc2dc\uba74 \ub429\ub2c8\ub2e4."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d9cdcec8.f0877041.js b/assets/js/d9cdcec8.f0877041.js new file mode 100644 index 00000000..0df2bc33 --- /dev/null +++ b/assets/js/d9cdcec8.f0877041.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2335],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),l=c(n),d=o,k=l["".concat(s,".").concat(d)]||l[d]||m[d]||a;return n?r.createElement(k,p(p({ref:t},u),{},{components:n})):r.createElement(k,p({ref:t},u))}));function k(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,p=new Array(a);p[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[l]="string"==typeof e?e:o,p[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var r=n(7462),o=(n(7294),n(3905));const a={title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",sidebar_position:4,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2021-12-10T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},p=void 0,i={unversionedId:"introduction/why_kubernetes",id:"introduction/why_kubernetes",title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",source:"@site/docs/introduction/why_kubernetes.md",sourceDirName:"introduction",slug:"/introduction/why_kubernetes",permalink:"/docs/introduction/why_kubernetes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/introduction/why_kubernetes.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:4,frontMatter:{title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",sidebar_position:4,date:"2021-12-03T00:00:00.000Z",lastmod:"2021-12-10T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Components of MLOps",permalink:"/docs/introduction/component"},next:{title:"1. Introduction",permalink:"/docs/setup-kubernetes/intro"}},s={},c=[{value:"MLOps & Kubernetes",id:"mlops--kubernetes",level:2},{value:"Container",id:"container",level:2},{value:"Container Orchestration System",id:"container-orchestration-system",level:2}],u={toc:c},l="wrapper";function m(e){let{components:t,...a}=e;return(0,o.kt)(l,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"mlops--kubernetes"},"MLOps & Kubernetes"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 MLOps\ub97c \uc774\uc57c\uae30\ud560 \ub54c, \ucfe0\ubc84\ub124\ud2f0\uc2a4(Kubernetes)\ub77c\ub294 \ub2e8\uc5b4\uac00 \ud56d\uc0c1 \ud568\uaed8 \ub4e4\ub9ac\ub294 \uc774\uc720\uac00 \ubb34\uc5c7\uc77c\uae4c\uc694?"),(0,o.kt)("p",null,"\uc131\uacf5\uc801\uc778 MLOps \uc2dc\uc2a4\ud15c\uc744 \uad6c\ucd95\ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,o.kt)("a",{parentName:"p",href:"/docs/introduction/component"},"MLOps\uc758 \uad6c\uc131\uc694\uc18c")," \uc5d0\uc11c \uc124\uba85\ud55c \uac83\ucc98\ub7fc \ub2e4\uc591\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc774 \ud544\uc694\ud558\uc9c0\ub9cc, \uac01\uac01\uc758 \uad6c\uc131 \uc694\uc18c\ub4e4\uc774 \uc720\uae30\uc801\uc73c\ub85c \uc6b4\uc601\ub418\uae30 \uc704\ud574\uc11c\ub294 \uc778\ud504\ub77c \ub808\ubca8\uc5d0\uc11c \uc218\ub9ce\uc740 \uc774\uc288\ub97c \ud574\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uac04\ub2e8\ud558\uac8c\ub294 \uc218\ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \ud559\uc2b5 \uc694\uccad\uc744 \ucc28\ub840\ub300\ub85c \uc2e4\ud589\ud558\ub294 \uac83, \ub2e4\ub978 \uc791\uc5c5 \uacf5\uac04\uc5d0\uc11c\ub3c4 \uac19\uc740 \uc2e4\ud589 \ud658\uacbd\uc744 \ubcf4\uc7a5\ud574\uc57c \ud558\ub294 \uac83, \ubc30\ud3ec\ub41c \uc11c\ube44\uc2a4\uc5d0 \uc7a5\uc560\uac00 \uc0dd\uacbc\uc744 \ub54c \ube60\ub974\uac8c \ub300\uc751\ud574\uc57c \ud558\ub294 \uac83 \ub4f1\uc758 \uc774\uc288 \ub4f1\uc744 \uc0dd\uac01\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc5ec\uae30\uc11c \ucee8\ud14c\uc774\ub108(Container)\uc640 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c(Container Orchestration System)\uc758 \ud544\uc694\uc131\uc774 \ub4f1\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc640 \uac19\uc740 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc744 \ub3c4\uc785\ud558\uba74 \uc2e4\ud589 \ud658\uacbd\uc758 \uaca9\ub9ac\uc640 \uad00\ub9ac\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc744 \ub3c4\uc785\ud55c\ub2e4\uba74, \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\uace0 \ubc30\ud3ec\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ub2e4\uc218\uc758 \uac1c\ubc1c\uc790\uac00 \uc18c\uc218\uc758 \ud074\ub7ec\uc2a4\ud130\ub97c \uacf5\uc720\ud558\uba74\uc11c ",(0,o.kt)("em",{parentName:"p"},"'1\ubc88 \ud074\ub7ec\uc2a4\ud130 \uc0ac\uc6a9 \uc911\uc774\uc2e0\uac00\uc694?', 'GPU \uc0ac\uc6a9 \uc911\uc774\ub358 \uc81c \ud504\ub85c\uc138\uc2a4 \ub204\uac00 \uc8fd\uc600\ub098\uc694?', '\ub204\uac00 \ud074\ub7ec\uc2a4\ud130\uc5d0 x \ud328\ud0a4\uc9c0 \uc5c5\ub370\uc774\ud2b8\ud588\ub098\uc694?'")," \uc640 \uac19\uc740 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"container"},"Container"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 \ucee8\ud14c\uc774\ub108\ub780 \ubb34\uc5c7\uc77c\uae4c\uc694? \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8\uc5d0\uc11c\ub294 \ucee8\ud14c\uc774\ub108\ub97c ",(0,o.kt)("a",{parentName:"p",href:"https://azure.microsoft.com/ko-kr/overview/what-is-a-container/"},"\ub2e4\uc74c"),"\uacfc \uac19\uc774 \uc815\uc758\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\ucee8\ud14c\uc774\ub108\ub780 : \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud45c\uc900\ud654\ub41c \uc774\uc2dd \uac00\ub2a5\ud55c \ud328\ud0a4\uc9d5")),(0,o.kt)("p",null,"\uadf8\ub7f0\ub370 \uc65c \uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c \ucee8\ud14c\uc774\ub108\uac00 \ud544\uc694\ud560\uae4c\uc694? \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\ub4e4\uc740 \uc6b4\uc601\uccb4\uc81c\ub098 Python \uc2e4\ud589 \ud658\uacbd, \ud328\ud0a4\uc9c0 \ubc84\uc804 \ub4f1\uc5d0 \ub530\ub77c \ub2e4\ub974\uac8c \ub3d9\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574\uc11c \uba38\uc2e0\ub7ec\ub2dd\uc5d0 \uc0ac\uc6a9\ub41c \uc18c\uc2a4 \ucf54\ub4dc\uc640 \ud568\uaed8 \uc885\uc18d\uc801\uc778 \uc2e4\ud589 \ud658\uacbd \uc804\uccb4\ub97c ",(0,o.kt)("strong",{parentName:"p"},"\ud558\ub098\ub85c \ubb36\uc5b4\uc11c(\ud328\ud0a4\uc9d5\ud574\uc11c)")," \uacf5\uc720\ud558\uace0 \uc2e4\ud589\ud558\ub294 \ub370 \ud65c\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\uc220\uc774 \ucee8\ud14c\uc774\ub108\ub77c\uc774\uc81c\uc774\uc158(Containerization) \uae30\uc220\uc785\ub2c8\ub2e4.\n\uc774\ub807\uac8c \ud328\ud0a4\uc9d5\ub41c \ud615\ud0dc\ub97c \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub77c\uace0 \ubd80\ub974\uba70, \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uacf5\uc720\ud568\uc73c\ub85c\uc368 \uc0ac\uc6a9\uc790\ub4e4\uc740 \uc5b4\ub5a4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub4e0 \uac19\uc740 \uc2e4\ud589 \uacb0\uacfc\ub97c \ubcf4\uc7a5\ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc989, \ub2e8\uc21c\ud788 Jupyter Notebook \ud30c\uc77c\uc774\ub098, \ubaa8\ub378\uc758 \uc18c\uc2a4 \ucf54\ub4dc\uc640 requirements.txt \ud30c\uc77c\uc744 \uacf5\uc720\ud558\ub294 \uac83\uc774 \uc544\ub2cc, \ubaa8\ub4e0 \uc2e4\ud589 \ud658\uacbd\uc774 \ub2f4\uae34 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uacf5\uc720\ud55c\ub2e4\uba74 ",(0,o.kt)("em",{parentName:"p"},'"\uc81c \ub178\ud2b8\ubd81\uc5d0\uc11c\ub294 \uc798 \ub418\ub294\ub370\uc694?"')," \uc640 \uac19\uc740 \uc0c1\ud669\uc744 \ud53c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,'\ucee8\ud14c\uc774\ub108\ub97c \ucc98\uc74c \uc811\ud558\uc2dc\ub294 \ubd84\ub4e4\uc774 \ud754\ud788 \ud558\uc2dc\ub294 \uc624\ud574 \uc911 \ud558\ub098\ub294 "',(0,o.kt)("strong",{parentName:"p"},"\ucee8\ud14c\uc774\ub108 == \ub3c4\ucee4"),'"\ub77c\uace0 \ubc1b\uc544\ub4e4\uc774\ub294 \uac83\uc785\ub2c8\ub2e4.',(0,o.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4\ub294 \ucee8\ud14c\uc774\ub108\uc640 \uac19\uc740 \uc758\ubbf8\ub97c \uc9c0\ub2c8\ub294 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c, \ucee8\ud14c\uc774\ub108\ub97c \ub744\uc6b0\uac70\ub098, \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4\uace0 \uacf5\uc720\ud558\ub294 \uac83\uacfc \uac19\uc774 \ucee8\ud14c\uc774\ub108\ub97c \ub354\uc6b1\ub354 \uc27d\uace0 \uc720\uc5f0\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc815\ub9ac\ud558\uc790\uba74 \ucee8\ud14c\uc774\ub108\ub294 \uac00\uc0c1\ud654 \uae30\uc220\uc774\uace0, \ub3c4\ucee4\ub294 \uac00\uc0c1\ud654 \uae30\uc220\uc758 \uad6c\ud604\uccb4\ub77c\uace0 \ub9d0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub2e4\ub9cc, \ub3c4\ucee4\ub294 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654 \ub3c4\uad6c \uc911\uc5d0\uc11c \uc26c\uc6b4 \uc0ac\uc6a9\uc131\uacfc \ub192\uc740 \ud6a8\uc728\uc131\uc744 \ubc14\ud0d5\uc73c\ub85c \uac00\uc7a5 \ube60\ub974\uac8c \uc131\uc7a5\ud558\uc5ec \ub300\uc138\uac00 \ub418\uc5c8\uae30\uc5d0 \ucee8\ud14c\uc774\ub108\ud558\uba74 \ub3c4\ucee4\ub77c\ub294 \uc774\ubbf8\uc9c0\uac00 \uc790\ub3d9\uc73c\ub85c \ub5a0\uc624\ub974\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ucee8\ud14c\uc774\ub108\uc640 \ub3c4\ucee4 \uc0dd\ud0dc\uacc4\uac00 \ub300\uc138\uac00 \ub418\uae30\uae4c\uc9c0\ub294 \ub2e4\uc591\ud55c \uc774\uc720\uac00 \uc788\uc9c0\ub9cc, \uae30\uc220\uc801\uc73c\ub85c \uc790\uc138\ud55c \uc774\uc57c\uae30\ub294 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc758 \ubc94\uc704\ub97c \ub118\uc5b4\uc11c\uae30 \ub54c\ubb38\uc5d0 \ub2e4\ub8e8\uc9c0\ub294 \uc54a\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \ud639\uc740 \ub3c4\ucee4\ub97c \ucc98\uc74c \ub4e4\uc5b4\ubcf4\uc2dc\ub294 \ubd84\ub4e4\uc5d0\uac8c\ub294 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc758 \ub0b4\uc6a9\uc774 \ub2e4\uc18c \uc5b4\ub835\uac8c \ub290\uaef4\uc9c8 \uc218 \uc788\uc73c\ubbc0\ub85c, ",(0,o.kt)("a",{parentName:"p",href:"https://opentutorials.org/course/4781"},"\uc0dd\ud65c\ucf54\ub529"),", ",(0,o.kt)("a",{parentName:"p",href:"https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html"},"subicura \ub2d8\uc758 \uac1c\uc778 \ube14\ub85c\uadf8 \uae00")," \ub4f1\uc758 \uc790\ub8cc\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"container-orchestration-system"},"Container Orchestration System"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694? ",(0,o.kt)("strong",{parentName:"p"},"\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158"),"\uc774\ub77c\ub294 \ub2e8\uc5b4\uc5d0\uc11c \ucd94\uce21\ud574 \ubcfc \uc218 \uc788\ub4ef\uc774, \uc218\ub9ce\uc740 \ucee8\ud14c\uc774\ub108\uac00 \uc788\uc744 \ub54c \ucee8\ud14c\uc774\ub108\ub4e4\uc774 \uc11c\ub85c \uc870\ud654\ub86d\uac8c \uad6c\ub3d9\ub420 \uc218 \uc788\ub3c4\ub85d \uc9c0\ud718\ud558\ub294 \uc2dc\uc2a4\ud15c\uc5d0 \ube44\uc720\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \uae30\ubc18\uc758 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc11c\ube44\uc2a4\ub294 \ucee8\ud14c\uc774\ub108\uc758 \ud615\ud0dc\ub85c \uc0ac\uc6a9\uc790\ub4e4\uc5d0\uac8c \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc774\ub54c \uad00\ub9ac\ud574\uc57c \ud560 \ucee8\ud14c\uc774\ub108\uc758 \uc218\uac00 \uc801\ub2e4\uba74 \uc6b4\uc601 \ub2f4\ub2f9\uc790 \ud55c \uba85\uc774\uc11c\ub3c4 \ucda9\ubd84\ud788 \ubaa8\ub4e0 \uc0c1\ud669\uc5d0 \ub300\uc751\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc, \uc218\ubc31 \uac1c \uc774\uc0c1\uc758 \ucee8\ud14c\uc774\ub108\uac00 \uc218 \uc2ed \ub300 \uc774\uc0c1\uc758 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uad6c\ub3d9\ub418\uace0 \uc788\uace0 \uc7a5\uc560\ub97c \uc77c\uc73c\ud0a4\uc9c0 \uc54a\uace0 \ud56d\uc0c1 \uc815\uc0c1 \ub3d9\uc791\ud574\uc57c \ud55c\ub2e4\uba74, \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uc758 \uc815\uc0c1 \ub3d9\uc791 \uc5ec\ubd80\ub97c \ub2f4\ub2f9\uc790 \ud55c \uba85\uc774 \ud30c\uc545\ud558\uace0 \uc774\uc288\uc5d0 \ub300\uc751\ud558\ub294 \uac83\uc740 \ubd88\uac00\ub2a5\uc5d0 \uac00\uae5d\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc608\ub97c \ub4e4\uba74, \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\ub294\uc9c0\ub97c \uacc4\uc18d\ud574\uc11c \ubaa8\ub2c8\ud130\ub9c1(Monitoring)\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \ud2b9\uc815 \uc11c\ube44\uc2a4\uac00 \uc7a5\uc560\ub97c \uc77c\uc73c\ucf30\ub2e4\uba74 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108\uc758 \ub85c\uadf8\ub97c \ud655\uc778\ud574\uac00\uba70 \ubb38\uc81c\ub97c \ud30c\uc545\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub610\ud55c, \ud2b9\uc815 \ud074\ub7ec\uc2a4\ud130\ub098 \ud2b9\uc815 \ucee8\ud14c\uc774\ub108\uc5d0 \uc791\uc5c5\uc774 \ubab0\ub9ac\uc9c0 \uc54a\ub3c4\ub85d \uc2a4\ucf00\uc904\ub9c1(Scheduling)\ud558\uace0 \ub85c\ub4dc \ubc38\ub7f0\uc2f1(Load Balancing)\ud558\uba70, \uc2a4\ucf00\uc77c\ub9c1(Scaling)\ud558\ub294 \ub4f1\uc758 \uc218\ub9ce\uc740 \uc791\uc5c5\uc744 \ub2f4\ub2f9\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uc774\ub807\uac8c \uc218\ub9ce\uc740 \ucee8\ud14c\uc774\ub108\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\ud574\uc11c \uad00\ub9ac\ud558\uace0 \uc6b4\uc601\ud558\ub294 \uacfc\uc815\uc744 \uc870\uae08\uc774\ub098\ub9c8 \uc27d\uac8c, \uc790\ub3d9\uc73c\ub85c \ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uac00 \ubc14\ub85c \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc785\ub2c8\ub2e4. "),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c\ub294 \uc5b4\ub5bb\uac8c \uc4f0\uc77c \uc218 \uc788\uc744\uae4c\uc694?",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c GPU\uac00 \uc788\uc5b4\uc57c \ud558\ub294 \ub525\ub7ec\ub2dd \ud559\uc2b5 \ucf54\ub4dc\uac00 \ud328\ud0a4\uc9d5\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uc0ac\uc6a9 \uac00\ub2a5\ud55c GPU\uac00 \uc788\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc218\ud589\ud558\uace0, \ub9ce\uc740 \uba54\ubaa8\ub9ac\ub97c \ud544\uc694\ub85c \ud558\ub294 \ub370\uc774\ud130 \uc804\ucc98\ub9ac \ucf54\ub4dc\uac00 \ud328\ud0a4\uc9d5\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uba54\ubaa8\ub9ac\uc758 \uc5ec\uc720\uac00 \ub9ce\uc740 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc218\ud589\ud558\uace0, \ud559\uc2b5 \uc911\uc5d0 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubb38\uc81c\uac00 \uc0dd\uae30\uba74 \uc790\ub3d9\uc73c\ub85c \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \ub2e4\ub978 \ud074\ub7ec\uc2a4\ud130\ub85c \uc774\ub3d9\uc2dc\ud0a4\uace0 \ub2e4\uc2dc \ud559\uc2b5\uc744 \uc9c4\ud589\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \uc0ac\ub78c\uc774 \uc77c\uc77c\uc774 \uc218\ud589\ud558\uc9c0 \uc54a\uace0, \uc790\ub3d9\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \uc2dc\uc2a4\ud15c\uc744 \uac1c\ubc1c\ud55c \ub4a4 \ub9e1\uae30\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc9d1\ud544\uc744 \ud558\ub294 2022\ub144\uc744 \uae30\uc900\uc73c\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc758 \uc0ac\uc2e4\uc0c1\uc758 \ud45c\uc900(De facto standard)\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"CNCF\uc5d0\uc11c 2018\ub144 \ubc1c\ud45c\ud55c ",(0,o.kt)("a",{parentName:"p",href:"https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/"},"Survey")," \uc5d0 \ub530\ub974\uba74 \ub2e4\uc74c \uadf8\ub9bc\uacfc \uac19\uc774 \uc774\ubbf8 \ub450\uac01\uc744 \ub098\ud0c0\ub0b4\uace0 \uc788\uc5c8\uc73c\uba70, 2019\ub144 \ubc1c\ud45c\ud55c ",(0,o.kt)("a",{parentName:"p",href:"https://www.cncf.io/wp-content/uploads/2020/08/CNCF_Survey_Report.pdf"},"Survey"),"\uc5d0 \ub530\ub974\uba74 \uadf8\uc911 78%\uac00 \uc0c1\uc6a9 \uc218\uc900(Production Level)\uc5d0\uc11c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"k8s-graph",src:n(8870).Z,width:"2048",height:"1317"})),(0,o.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0dd\ud0dc\uacc4\uac00 \uc774\ucc98\ub7fc \ucee4\uc9c0\uac8c \ub41c \uc774\uc720\uc5d0\ub294 \uc5ec\ub7ec \uac00\uc9c0 \uc774\uc720\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub3c4\ucee4\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc5ed\uc2dc \uba38\uc2e0\ub7ec\ub2dd \uae30\ubc18\uc758 \uc11c\ube44\uc2a4\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud558\ub294 \uae30\uc220\uc774 \uc544\ub2c8\uae30\uc5d0, \uc790\uc138\ud788 \ub2e4\ub8e8\uae30\uc5d0\ub294 \uc0c1\ub2f9\ud788 \ub9ce\uc740 \uc591\uc758 \uae30\uc220\uc801\uc778 \ub0b4\uc6a9\uc744 \ub2e4\ub8e8\uc5b4\uc57c \ud558\ubbc0\ub85c \uc774\ubc88 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc0dd\ub7b5\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub2e4\ub9cc, ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc55e\uc73c\ub85c \ub2e4\ub8f0 \ub0b4\uc6a9\uc740 \ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc744 \uc5b4\ub290 \uc815\ub3c4 \uc54c\uace0 \uacc4\uc2e0 \ubd84\ub4e4\uc744 \ub300\uc0c1\uc73c\ub85c \uc791\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0 \ub300\ud574 \uc775\uc219\ud558\uc9c0 \uc54a\uc73c\uc2e0 \ubd84\ub4e4\uc740 \ub2e4\uc74c ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uacf5\uc2dd \ubb38\uc11c"),", ",(0,o.kt)("a",{parentName:"p",href:"https://subicura.com/k8s/"},"subicura \ub2d8\uc758 \uac1c\uc778 \ube14\ub85c\uadf8 \uae00")," \ub4f1\uc758 \uc27d\uace0 \uc790\uc138\ud55c \uc790\ub8cc\ub4e4\uc744 \uba3c\uc800 \ucc38\uace0\ud574\uc8fc\uc2dc\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."))}m.isMDXComponent=!0},8870:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/k8s-graph-4320bbc5bf9fc0dccdeb1edc0157e8ec.png"}}]); \ No newline at end of file diff --git a/assets/js/d9cdcec8.ff05425b.js b/assets/js/d9cdcec8.ff05425b.js deleted file mode 100644 index a62d9c60..00000000 --- a/assets/js/d9cdcec8.ff05425b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[2335],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},l="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),l=c(n),d=o,k=l["".concat(s,".").concat(d)]||l[d]||m[d]||a;return n?r.createElement(k,p(p({ref:t},u),{},{components:n})):r.createElement(k,p({ref:t},u))}));function k(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,p=new Array(a);p[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[l]="string"==typeof e?e:o,p[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var r=n(7462),o=(n(7294),n(3905));const a={title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",sidebar_position:4,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2021-12-10T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},p=void 0,i={unversionedId:"introduction/why_kubernetes",id:"introduction/why_kubernetes",title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",source:"@site/docs/introduction/why_kubernetes.md",sourceDirName:"introduction",slug:"/introduction/why_kubernetes",permalink:"/docs/introduction/why_kubernetes",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/introduction/why_kubernetes.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:4,frontMatter:{title:"4. Why Kubernetes?",description:"Reason for using k8s in MLOps",sidebar_position:4,date:"2021-12-03T00:00:00.000Z",lastmod:"2021-12-10T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"3. Components of MLOps",permalink:"/docs/introduction/component"},next:{title:"1. Introduction",permalink:"/docs/setup-kubernetes/intro"}},s={},c=[{value:"MLOps & Kubernetes",id:"mlops--kubernetes",level:2},{value:"Container",id:"container",level:2},{value:"Container Orchestration System",id:"container-orchestration-system",level:2}],u={toc:c},l="wrapper";function m(e){let{components:t,...a}=e;return(0,o.kt)(l,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"mlops--kubernetes"},"MLOps & Kubernetes"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 MLOps\ub97c \uc774\uc57c\uae30\ud560 \ub54c, \ucfe0\ubc84\ub124\ud2f0\uc2a4(Kubernetes)\ub77c\ub294 \ub2e8\uc5b4\uac00 \ud56d\uc0c1 \ud568\uaed8 \ub4e4\ub9ac\ub294 \uc774\uc720\uac00 \ubb34\uc5c7\uc77c\uae4c\uc694?"),(0,o.kt)("p",null,"\uc131\uacf5\uc801\uc778 MLOps \uc2dc\uc2a4\ud15c\uc744 \uad6c\ucd95\ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,o.kt)("a",{parentName:"p",href:"/docs/introduction/component"},"MLOps\uc758 \uad6c\uc131\uc694\uc18c")," \uc5d0\uc11c \uc124\uba85\ud55c \uac83\ucc98\ub7fc \ub2e4\uc591\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc774 \ud544\uc694\ud558\uc9c0\ub9cc, \uac01\uac01\uc758 \uad6c\uc131 \uc694\uc18c\ub4e4\uc774 \uc720\uae30\uc801\uc73c\ub85c \uc6b4\uc601\ub418\uae30 \uc704\ud574\uc11c\ub294 \uc778\ud504\ub77c \ub808\ubca8\uc5d0\uc11c \uc218\ub9ce\uc740 \uc774\uc288\ub97c \ud574\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uac04\ub2e8\ud558\uac8c\ub294 \uc218\ub9ce\uc740 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \ud559\uc2b5 \uc694\uccad\uc744 \ucc28\ub840\ub300\ub85c \uc2e4\ud589\ud558\ub294 \uac83, \ub2e4\ub978 \uc791\uc5c5 \uacf5\uac04\uc5d0\uc11c\ub3c4 \uac19\uc740 \uc2e4\ud589 \ud658\uacbd\uc744 \ubcf4\uc7a5\ud574\uc57c \ud558\ub294 \uac83, \ubc30\ud3ec\ub41c \uc11c\ube44\uc2a4\uc5d0 \uc7a5\uc560\uac00 \uc0dd\uacbc\uc744 \ub54c \ube60\ub974\uac8c \ub300\uc751\ud574\uc57c \ud558\ub294 \uac83 \ub4f1\uc758 \uc774\uc288 \ub4f1\uc744 \uc0dd\uac01\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc5ec\uae30\uc11c \ucee8\ud14c\uc774\ub108(Container)\uc640 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c(Container Orchestration System)\uc758 \ud544\uc694\uc131\uc774 \ub4f1\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\uc640 \uac19\uc740 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc744 \ub3c4\uc785\ud558\uba74 \uc2e4\ud589 \ud658\uacbd\uc758 \uaca9\ub9ac\uc640 \uad00\ub9ac\ub97c \ud6a8\uc728\uc801\uc73c\ub85c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc744 \ub3c4\uc785\ud55c\ub2e4\uba74, \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \uac1c\ubc1c\ud558\uace0 \ubc30\ud3ec\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \ub2e4\uc218\uc758 \uac1c\ubc1c\uc790\uac00 \uc18c\uc218\uc758 \ud074\ub7ec\uc2a4\ud130\ub97c \uacf5\uc720\ud558\uba74\uc11c ",(0,o.kt)("em",{parentName:"p"},"'1\ubc88 \ud074\ub7ec\uc2a4\ud130 \uc0ac\uc6a9 \uc911\uc774\uc2e0\uac00\uc694?', 'GPU \uc0ac\uc6a9 \uc911\uc774\ub358 \uc81c \ud504\ub85c\uc138\uc2a4 \ub204\uac00 \uc8fd\uc600\ub098\uc694?', '\ub204\uac00 \ud074\ub7ec\uc2a4\ud130\uc5d0 x \ud328\ud0a4\uc9c0 \uc5c5\ub370\uc774\ud2b8\ud588\ub098\uc694?'")," \uc640 \uac19\uc740 \uc0c1\ud669\uc744 \ubc29\uc9c0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"container"},"Container"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 \ucee8\ud14c\uc774\ub108\ub780 \ubb34\uc5c7\uc77c\uae4c\uc694? \ub9c8\uc774\ud06c\ub85c\uc18c\ud504\ud2b8\uc5d0\uc11c\ub294 \ucee8\ud14c\uc774\ub108\ub97c ",(0,o.kt)("a",{parentName:"p",href:"https://azure.microsoft.com/ko-kr/overview/what-is-a-container/"},"\ub2e4\uc74c"),"\uacfc \uac19\uc774 \uc815\uc758\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\ucee8\ud14c\uc774\ub108\ub780 : \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ud45c\uc900\ud654\ub41c \uc774\uc2dd \uac00\ub2a5\ud55c \ud328\ud0a4\uc9d5")),(0,o.kt)("p",null,"\uadf8\ub7f0\ub370 \uc65c \uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c \ucee8\ud14c\uc774\ub108\uac00 \ud544\uc694\ud560\uae4c\uc694? \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\ub4e4\uc740 \uc6b4\uc601\uccb4\uc81c\ub098 Python \uc2e4\ud589 \ud658\uacbd, \ud328\ud0a4\uc9c0 \ubc84\uc804 \ub4f1\uc5d0 \ub530\ub77c \ub2e4\ub974\uac8c \ub3d9\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574\uc11c \uba38\uc2e0\ub7ec\ub2dd\uc5d0 \uc0ac\uc6a9\ub41c \uc18c\uc2a4 \ucf54\ub4dc\uc640 \ud568\uaed8 \uc885\uc18d\uc801\uc778 \uc2e4\ud589 \ud658\uacbd \uc804\uccb4\ub97c ",(0,o.kt)("strong",{parentName:"p"},"\ud558\ub098\ub85c \ubb36\uc5b4\uc11c(\ud328\ud0a4\uc9d5\ud574\uc11c)")," \uacf5\uc720\ud558\uace0 \uc2e4\ud589\ud558\ub294 \ub370 \ud65c\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\uc220\uc774 \ucee8\ud14c\uc774\ub108\ub77c\uc774\uc81c\uc774\uc158(Containerization) \uae30\uc220\uc785\ub2c8\ub2e4.\n\uc774\ub807\uac8c \ud328\ud0a4\uc9d5\ub41c \ud615\ud0dc\ub97c \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub77c\uace0 \ubd80\ub974\uba70, \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uacf5\uc720\ud568\uc73c\ub85c\uc368 \uc0ac\uc6a9\uc790\ub4e4\uc740 \uc5b4\ub5a4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub4e0 \uac19\uc740 \uc2e4\ud589 \uacb0\uacfc\ub97c \ubcf4\uc7a5\ud560 \uc218 \uc788\uac8c \ub429\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc989, \ub2e8\uc21c\ud788 Jupyter Notebook \ud30c\uc77c\uc774\ub098, \ubaa8\ub378\uc758 \uc18c\uc2a4 \ucf54\ub4dc\uc640 requirements.txt \ud30c\uc77c\uc744 \uacf5\uc720\ud558\ub294 \uac83\uc774 \uc544\ub2cc, \ubaa8\ub4e0 \uc2e4\ud589 \ud658\uacbd\uc774 \ub2f4\uae34 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uacf5\uc720\ud55c\ub2e4\uba74 ",(0,o.kt)("em",{parentName:"p"},'"\uc81c \ub178\ud2b8\ubd81\uc5d0\uc11c\ub294 \uc798 \ub418\ub294\ub370\uc694?"')," \uc640 \uac19\uc740 \uc0c1\ud669\uc744 \ud53c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,'\ucee8\ud14c\uc774\ub108\ub97c \ucc98\uc74c \uc811\ud558\uc2dc\ub294 \ubd84\ub4e4\uc774 \ud754\ud788 \ud558\uc2dc\ub294 \uc624\ud574 \uc911 \ud558\ub098\ub294 "',(0,o.kt)("strong",{parentName:"p"},"\ucee8\ud14c\uc774\ub108 == \ub3c4\ucee4"),'"\ub77c\uace0 \ubc1b\uc544\ub4e4\uc774\ub294 \uac83\uc785\ub2c8\ub2e4.',(0,o.kt)("br",{parentName:"p"}),"\n","\ub3c4\ucee4\ub294 \ucee8\ud14c\uc774\ub108\uc640 \uac19\uc740 \uc758\ubbf8\ub97c \uc9c0\ub2c8\ub294 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c, \ucee8\ud14c\uc774\ub108\ub97c \ub744\uc6b0\uac70\ub098, \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4\uace0 \uacf5\uc720\ud558\ub294 \uac83\uacfc \uac19\uc774 \ucee8\ud14c\uc774\ub108\ub97c \ub354\uc6b1\ub354 \uc27d\uace0 \uc720\uc5f0\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc815\ub9ac\ud558\uc790\uba74 \ucee8\ud14c\uc774\ub108\ub294 \uac00\uc0c1\ud654 \uae30\uc220\uc774\uace0, \ub3c4\ucee4\ub294 \uac00\uc0c1\ud654 \uae30\uc220\uc758 \uad6c\ud604\uccb4\ub77c\uace0 \ub9d0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub2e4\ub9cc, \ub3c4\ucee4\ub294 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108 \uac00\uc0c1\ud654 \ub3c4\uad6c \uc911\uc5d0\uc11c \uc26c\uc6b4 \uc0ac\uc6a9\uc131\uacfc \ub192\uc740 \ud6a8\uc728\uc131\uc744 \ubc14\ud0d5\uc73c\ub85c \uac00\uc7a5 \ube60\ub974\uac8c \uc131\uc7a5\ud558\uc5ec \ub300\uc138\uac00 \ub418\uc5c8\uae30\uc5d0 \ucee8\ud14c\uc774\ub108\ud558\uba74 \ub3c4\ucee4\ub77c\ub294 \uc774\ubbf8\uc9c0\uac00 \uc790\ub3d9\uc73c\ub85c \ub5a0\uc624\ub974\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ucee8\ud14c\uc774\ub108\uc640 \ub3c4\ucee4 \uc0dd\ud0dc\uacc4\uac00 \ub300\uc138\uac00 \ub418\uae30\uae4c\uc9c0\ub294 \ub2e4\uc591\ud55c \uc774\uc720\uac00 \uc788\uc9c0\ub9cc, \uae30\uc220\uc801\uc73c\ub85c \uc790\uc138\ud55c \uc774\uc57c\uae30\ub294 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc758 \ubc94\uc704\ub97c \ub118\uc5b4\uc11c\uae30 \ub54c\ubb38\uc5d0 \ub2e4\ub8e8\uc9c0\ub294 \uc54a\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \ud639\uc740 \ub3c4\ucee4\ub97c \ucc98\uc74c \ub4e4\uc5b4\ubcf4\uc2dc\ub294 \ubd84\ub4e4\uc5d0\uac8c\ub294 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc758 \ub0b4\uc6a9\uc774 \ub2e4\uc18c \uc5b4\ub835\uac8c \ub290\uaef4\uc9c8 \uc218 \uc788\uc73c\ubbc0\ub85c, ",(0,o.kt)("a",{parentName:"p",href:"https://opentutorials.org/course/4781"},"\uc0dd\ud65c\ucf54\ub529"),", ",(0,o.kt)("a",{parentName:"p",href:"https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html"},"subicura \ub2d8\uc758 \uac1c\uc778 \ube14\ub85c\uadf8 \uae00")," \ub4f1\uc758 \uc790\ub8cc\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"container-orchestration-system"},"Container Orchestration System"),(0,o.kt)("p",null,"\uadf8\ub807\ub2e4\uba74 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc740 \ubb34\uc5c7\uc77c\uae4c\uc694? ",(0,o.kt)("strong",{parentName:"p"},"\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158"),"\uc774\ub77c\ub294 \ub2e8\uc5b4\uc5d0\uc11c \ucd94\uce21\ud574 \ubcfc \uc218 \uc788\ub4ef\uc774, \uc218\ub9ce\uc740 \ucee8\ud14c\uc774\ub108\uac00 \uc788\uc744 \ub54c \ucee8\ud14c\uc774\ub108\ub4e4\uc774 \uc11c\ub85c \uc870\ud654\ub86d\uac8c \uad6c\ub3d9\ub420 \uc218 \uc788\ub3c4\ub85d \uc9c0\ud718\ud558\ub294 \uc2dc\uc2a4\ud15c\uc5d0 \ube44\uc720\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucee8\ud14c\uc774\ub108 \uae30\ubc18\uc758 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc11c\ube44\uc2a4\ub294 \ucee8\ud14c\uc774\ub108\uc758 \ud615\ud0dc\ub85c \uc0ac\uc6a9\uc790\ub4e4\uc5d0\uac8c \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc774\ub54c \uad00\ub9ac\ud574\uc57c \ud560 \ucee8\ud14c\uc774\ub108\uc758 \uc218\uac00 \uc801\ub2e4\uba74 \uc6b4\uc601 \ub2f4\ub2f9\uc790 \ud55c \uba85\uc774\uc11c\ub3c4 \ucda9\ubd84\ud788 \ubaa8\ub4e0 \uc0c1\ud669\uc5d0 \ub300\uc751\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc, \uc218\ubc31 \uac1c \uc774\uc0c1\uc758 \ucee8\ud14c\uc774\ub108\uac00 \uc218 \uc2ed \ub300 \uc774\uc0c1\uc758 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uad6c\ub3d9\ub418\uace0 \uc788\uace0 \uc7a5\uc560\ub97c \uc77c\uc73c\ud0a4\uc9c0 \uc54a\uace0 \ud56d\uc0c1 \uc815\uc0c1 \ub3d9\uc791\ud574\uc57c \ud55c\ub2e4\uba74, \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uc758 \uc815\uc0c1 \ub3d9\uc791 \uc5ec\ubd80\ub97c \ub2f4\ub2f9\uc790 \ud55c \uba85\uc774 \ud30c\uc545\ud558\uace0 \uc774\uc288\uc5d0 \ub300\uc751\ud558\ub294 \uac83\uc740 \ubd88\uac00\ub2a5\uc5d0 \uac00\uae5d\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc608\ub97c \ub4e4\uba74, \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\ub294\uc9c0\ub97c \uacc4\uc18d\ud574\uc11c \ubaa8\ub2c8\ud130\ub9c1(Monitoring)\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \ud2b9\uc815 \uc11c\ube44\uc2a4\uac00 \uc7a5\uc560\ub97c \uc77c\uc73c\ucf30\ub2e4\uba74 \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108\uc758 \ub85c\uadf8\ub97c \ud655\uc778\ud574\uac00\uba70 \ubb38\uc81c\ub97c \ud30c\uc545\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\ub610\ud55c, \ud2b9\uc815 \ud074\ub7ec\uc2a4\ud130\ub098 \ud2b9\uc815 \ucee8\ud14c\uc774\ub108\uc5d0 \uc791\uc5c5\uc774 \ubab0\ub9ac\uc9c0 \uc54a\ub3c4\ub85d \uc2a4\ucf00\uc904\ub9c1(Scheduling)\ud558\uace0 \ub85c\ub4dc \ubc38\ub7f0\uc2f1(Load Balancing)\ud558\uba70, \uc2a4\ucf00\uc77c\ub9c1(Scaling)\ud558\ub294 \ub4f1\uc758 \uc218\ub9ce\uc740 \uc791\uc5c5\uc744 \ub2f4\ub2f9\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uc774\ub807\uac8c \uc218\ub9ce\uc740 \ucee8\ud14c\uc774\ub108\uc758 \uc0c1\ud0dc\ub97c \uc9c0\uc18d\ud574\uc11c \uad00\ub9ac\ud558\uace0 \uc6b4\uc601\ud558\ub294 \uacfc\uc815\uc744 \uc870\uae08\uc774\ub098\ub9c8 \uc27d\uac8c, \uc790\ub3d9\uc73c\ub85c \ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uac00 \ubc14\ub85c \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc785\ub2c8\ub2e4. "),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd\uc5d0\uc11c\ub294 \uc5b4\ub5bb\uac8c \uc4f0\uc77c \uc218 \uc788\uc744\uae4c\uc694?",(0,o.kt)("br",{parentName:"p"}),"\n","\uc608\ub97c \ub4e4\uc5b4\uc11c GPU\uac00 \uc788\uc5b4\uc57c \ud558\ub294 \ub525\ub7ec\ub2dd \ud559\uc2b5 \ucf54\ub4dc\uac00 \ud328\ud0a4\uc9d5\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uc0ac\uc6a9 \uac00\ub2a5\ud55c GPU\uac00 \uc788\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc218\ud589\ud558\uace0, \ub9ce\uc740 \uba54\ubaa8\ub9ac\ub97c \ud544\uc694\ub85c \ud558\ub294 \ub370\uc774\ud130 \uc804\ucc98\ub9ac \ucf54\ub4dc\uac00 \ud328\ud0a4\uc9d5\ub41c \ucee8\ud14c\uc774\ub108\ub294 \uba54\ubaa8\ub9ac\uc758 \uc5ec\uc720\uac00 \ub9ce\uc740 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c \uc218\ud589\ud558\uace0, \ud559\uc2b5 \uc911\uc5d0 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ubb38\uc81c\uac00 \uc0dd\uae30\uba74 \uc790\ub3d9\uc73c\ub85c \uac19\uc740 \ucee8\ud14c\uc774\ub108\ub97c \ub2e4\ub978 \ud074\ub7ec\uc2a4\ud130\ub85c \uc774\ub3d9\uc2dc\ud0a4\uace0 \ub2e4\uc2dc \ud559\uc2b5\uc744 \uc9c4\ud589\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \uc0ac\ub78c\uc774 \uc77c\uc77c\uc774 \uc218\ud589\ud558\uc9c0 \uc54a\uace0, \uc790\ub3d9\uc73c\ub85c \uad00\ub9ac\ud558\ub294 \uc2dc\uc2a4\ud15c\uc744 \uac1c\ubc1c\ud55c \ub4a4 \ub9e1\uae30\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc9d1\ud544\uc744 \ud558\ub294 2022\ub144\uc744 \uae30\uc900\uc73c\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4\ub294 \ucee8\ud14c\uc774\ub108 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uc2dc\uc2a4\ud15c\uc758 \uc0ac\uc2e4\uc0c1\uc758 \ud45c\uc900(De facto standard)\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"CNCF\uc5d0\uc11c 2018\ub144 \ubc1c\ud45c\ud55c ",(0,o.kt)("a",{parentName:"p",href:"https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/"},"Survey")," \uc5d0 \ub530\ub974\uba74 \ub2e4\uc74c \uadf8\ub9bc\uacfc \uac19\uc774 \uc774\ubbf8 \ub450\uac01\uc744 \ub098\ud0c0\ub0b4\uace0 \uc788\uc5c8\uc73c\uba70, 2019\ub144 \ubc1c\ud45c\ud55c ",(0,o.kt)("a",{parentName:"p",href:"https://www.cncf.io/wp-content/uploads/2020/08/CNCF_Survey_Report.pdf"},"Survey"),"\uc5d0 \ub530\ub974\uba74 \uadf8\uc911 78%\uac00 \uc0c1\uc6a9 \uc218\uc900(Production Level)\uc5d0\uc11c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"k8s-graph",src:n(8870).Z,width:"2048",height:"1317"})),(0,o.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc0dd\ud0dc\uacc4\uac00 \uc774\ucc98\ub7fc \ucee4\uc9c0\uac8c \ub41c \uc774\uc720\uc5d0\ub294 \uc5ec\ub7ec \uac00\uc9c0 \uc774\uc720\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub3c4\ucee4\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc5ed\uc2dc \uba38\uc2e0\ub7ec\ub2dd \uae30\ubc18\uc758 \uc11c\ube44\uc2a4\uc5d0\uc11c\ub9cc \uc0ac\uc6a9\ud558\ub294 \uae30\uc220\uc774 \uc544\ub2c8\uae30\uc5d0, \uc790\uc138\ud788 \ub2e4\ub8e8\uae30\uc5d0\ub294 \uc0c1\ub2f9\ud788 \ub9ce\uc740 \uc591\uc758 \uae30\uc220\uc801\uc778 \ub0b4\uc6a9\uc744 \ub2e4\ub8e8\uc5b4\uc57c \ud558\ubbc0\ub85c \uc774\ubc88 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc0dd\ub7b5\ud560 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub2e4\ub9cc, ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc55e\uc73c\ub85c \ub2e4\ub8f0 \ub0b4\uc6a9\uc740 \ub3c4\ucee4\uc640 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc744 \uc5b4\ub290 \uc815\ub3c4 \uc54c\uace0 \uacc4\uc2e0 \ubd84\ub4e4\uc744 \ub300\uc0c1\uc73c\ub85c \uc791\uc131\ud558\uc600\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc5d0 \ub300\ud574 \uc775\uc219\ud558\uc9c0 \uc54a\uc73c\uc2e0 \ubd84\ub4e4\uc740 \ub2e4\uc74c ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uacf5\uc2dd \ubb38\uc11c"),", ",(0,o.kt)("a",{parentName:"p",href:"https://subicura.com/k8s/"},"subicura \ub2d8\uc758 \uac1c\uc778 \ube14\ub85c\uadf8 \uae00")," \ub4f1\uc758 \uc27d\uace0 \uc790\uc138\ud55c \uc790\ub8cc\ub4e4\uc744 \uba3c\uc800 \ucc38\uace0\ud574\uc8fc\uc2dc\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."))}m.isMDXComponent=!0},8870:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/k8s-graph-4320bbc5bf9fc0dccdeb1edc0157e8ec.png"}}]); \ No newline at end of file diff --git a/assets/js/d9ed3de0.470524c2.js b/assets/js/d9ed3de0.470524c2.js new file mode 100644 index 00000000..884afd46 --- /dev/null +++ b/assets/js/d9ed3de0.470524c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[7345],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),m=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=m(e.components);return r.createElement(i.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),c=m(n),d=o,y=c["".concat(i,".").concat(d)]||c[d]||u[d]||a;return n?r.createElement(y,l(l({ref:t},s),{},{components:n})):r.createElement(y,l({ref:t},s))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=d;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p[c]="string"==typeof e?e:o,l[1]=p;for(var m=2;m{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>m});var r=n(7462),o=(n(7294),n(3905));const a={title:"1. What is API Deployment?",description:"",sidebar_position:1,date:new Date("2021-12-22T00:00:00.000Z"),lastmod:new Date("2021-12-22T00:00:00.000Z"),contributors:["Youngcheol Jang"]},l=void 0,p={unversionedId:"api-deployment/what-is-api-deployment",id:"api-deployment/what-is-api-deployment",title:"1. What is API Deployment?",description:"",source:"@site/docs/api-deployment/what-is-api-deployment.md",sourceDirName:"api-deployment",slug:"/api-deployment/what-is-api-deployment",permalink:"/docs/api-deployment/what-is-api-deployment",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/what-is-api-deployment.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. What is API Deployment?",description:"",sidebar_position:1,date:"2021-12-22T00:00:00.000Z",lastmod:"2021-12-22T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"13. Component - Debugging",permalink:"/docs/kubeflow/how-to-debug"},next:{title:"2. Deploy SeldonDeployment",permalink:"/docs/api-deployment/seldon-iris"}},i={},m=[{value:"API Deployment\ub780?",id:"api-deployment\ub780",level:2},{value:"Serving Framework",id:"serving-framework",level:2}],s={toc:m},c="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"api-deployment\ub780"},"API Deployment\ub780?"),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ud559\uc2b5\ud55c \ub4a4\uc5d0\ub294 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud574\uc57c \ud560\uae4c\uc694?",(0,o.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd\uc744 \ud559\uc2b5\ud560 \ub54c\ub294 \ub354 \ub192\uc740 \uc131\ub2a5\uc758 \ubaa8\ub378\uc774 \ub098\uc624\uae30\ub97c \uae30\ub300\ud558\uc9c0\ub9cc, \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucd94\ub860\uc744 \ud560 \ub54c\ub294 \ube60\ub974\uace0 \uc27d\uac8c \ucd94\ub860 \uacb0\uacfc\ub97c \ubc1b\uc544\ubcf4\uace0 \uc2f6\uc744 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ubaa8\ub378\uc758 \ucd94\ub860 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uace0\uc790 \ud560 \ub54c \uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc774\ub098 \ud30c\uc774\uc36c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ud1b5\ud574 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \ub85c\ub4dc\ud55c \ub4a4 \ucd94\ub860\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\uc9c0\ub9cc \uc774\ub7f0 \ubc29\ubc95\uc740 \ubaa8\ub378\uc774 \ud074\uc218\ub85d \ubaa8\ub378\uc744 \ubd88\ub7ec\uc624\ub294 \ub370 \ub9ce\uc740 \uc2dc\uac04\uc744 \uc18c\uc694\ud558\uac8c \ub418\uc5b4\uc11c \ube44\ud6a8\uc728\uc801\uc785\ub2c8\ub2e4. \ub610\ud55c \uc774\ub807\uac8c \uc774\uc6a9\ud558\uba74 \ub9ce\uc740 \uc0ac\ub78c\uc774 \ubaa8\ub378\uc744 \uc774\uc6a9\ud560 \uc218 \uc5c6\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc788\ub294 \ud658\uacbd\uc5d0\uc11c\ubc16\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uadf8\ub798\uc11c \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uc774 \uc0ac\uc6a9\ub420 \ub54c\ub294 API\ub97c \uc774\uc6a9\ud574\uc11c \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ubaa8\ub378\uc740 API \uc11c\ubc84\uac00 \uad6c\ub3d9\ub418\ub294 \ud658\uacbd\uc5d0\uc11c \ud55c \ubc88\ub9cc \ub85c\ub4dc\uac00 \ub418\uba70, DNS\ub97c \ud65c\uc6a9\ud558\uc5ec \uc678\ubd80\uc5d0\uc11c\ub3c4 \uc27d\uac8c \ucd94\ub860 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uace0 \ub2e4\ub978 \uc11c\ube44\uc2a4\uc640 \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ud558\uc9c0\ub9cc \ubaa8\ub378\uc744 API\ub85c \ub9cc\ub4dc\ub294 \uc791\uc5c5\uc5d0\ub294 \uc0dd\uac01\ubcf4\ub2e4 \ub9ce\uc740 \ubd80\uc218\uc801\uc778 \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c API\ub85c \ub9cc\ub4dc\ub294 \uc791\uc5c5\uc744 \ub354 \uc27d\uac8c \ud558\uae30 \uc704\ud574\uc11c Tensorflow\uc640 \uac19\uc740 \uba38\uc2e0\ub7ec\ub2dd \ud504\ub808\uc784\uc6cc\ud06c \uc9c4\uc601\uc5d0\uc11c\ub294 \ucd94\ub860 \uc5d4\uc9c4(Inference engine)\uc744 \uac1c\ubc1c\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \uc774\uc6a9\ud558\uba74 \ud574\ub2f9 \uba38\uc2e0\ub7ec\ub2dd \ud504\ub808\uc784\uc6cc\ud06c\ub85c \uac1c\ubc1c\ub418\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \ubd88\ub7ec\uc640 \ucd94\ub860\uc774 \uac00\ub2a5\ud55c API(REST \ub610\ub294 gRPC)\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ucd94\ub860 \uc5d4\uc9c4\uc744 \ud65c\uc6a9\ud558\uc5ec \uad6c\ucd95\ud55c API \uc11c\ubc84\ub85c \ucd94\ub860\ud558\uace0\uc790 \ud558\ub294 \ub370\uc774\ud130\ub97c \ub2f4\uc544 \uc694\uccad\uc744 \ubcf4\ub0b4\uba74, \ucd94\ub860 \uc5d4\uc9c4\uc774 \ucd94\ub860 \uacb0\uacfc\ub97c \uc751\ub2f5\uc5d0 \ub2f4\uc544 \uc804\uc1a1\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub300\ud45c\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4 \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/tensorflow/serving"},"Tensorflow : Tensorflow Serving")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/pytorch/serve"},"PyTorch : Torchserve")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/microsoft/onnxruntime"},"Onnx : Onnx Runtime"))),(0,o.kt)("p",null,"\uc624\ud504\uc18c\uc2a4\uc5d0\uc11c \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc, \ub9ce\uc774 \uc4f0\uc774\ub294 sklearn, xgboost \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc704\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub3c4 \uac1c\ubc1c\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\ucc98\ub7fc \ubaa8\ub378\uc758 \ucd94\ub860 \uacb0\uacfc\ub97c API\uc758 \ud615\ud0dc\ub85c \ubc1b\uc544\ubcfc \uc218 \uc788\ub3c4\ub85d \ubc30\ud3ec\ud558\ub294 \uac83\uc744 ",(0,o.kt)("strong",{parentName:"p"},"API Deployment"),"\ub77c\uace0 \ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"serving-framework"},"Serving Framework"),(0,o.kt)("p",null,"\uc704\uc5d0\uc11c \ub2e4\uc591\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\ub2e4\ub294 \uc0ac\uc2e4\uc744 \uc18c\uac1c\ud574 \ub4dc\ub838\uc2b5\ub2c8\ub2e4.\n\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd\uc5d0\uc11c \uc774\ub7ec\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \uc0ac\uc6a9\ud558\uc5ec API Deployment\ub97c \ud55c\ub2e4\uba74 \uc5b4\ub5a4 \uc791\uc5c5\uc774 \ud544\uc694\ud560\uae4c\uc694?\n\ucd94\ub860 \uc5d4\uc9c4\uc744 \ubc30\ud3ec\ud558\uae30 \uc704\ud55c Deployment, \ucd94\ub860 \uc694\uccad\uc744 \ubcf4\ub0bc Endpoint\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud55c Service,\n\uc678\ubd80\uc5d0\uc11c\uc758 \ucd94\ub860 \uc694\uccad\uc744 \ucd94\ub860 \uc5d4\uc9c4\uc73c\ub85c \ubcf4\ub0b4\uae30 \uc704\ud55c Ingress \ub4f1 \ub9ce\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ub9ac\uc18c\uc2a4\ub97c \ubc30\ud3ec\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\uc774\uac83 \uc774\uc678\uc5d0\ub3c4, \ub9ce\uc740 \ucd94\ub860 \uc694\uccad\uc774 \ub4e4\uc5b4\uc654\uc744 \uacbd\uc6b0\uc758 \uc2a4\ucf00\uc77c \uc544\uc6c3(scale-out), \ucd94\ub860 \uc5d4\uc9c4 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ubaa8\ub2c8\ud130\ub9c1, \uac1c\uc120\ub41c \ubaa8\ub378\uc774 \ub098\uc654\uc744 \uacbd\uc6b0 \ubc84\uc804 \uc5c5\ub370\uc774\ud2b8 \ub4f1 \ucd94\ub860 \uc5d4\uc9c4\uc744 \uc6b4\uc601\ud560 \ub54c\uc758 \uc694\uad6c\uc0ac\ud56d\uc740 \ud55c\ub450 \uac00\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\ub7ec\ud55c \ub9ce\uc740 \uc694\uad6c\uc0ac\ud56d\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd \uc704\uc5d0\uc11c \ud55c \ubc88 \ub354 \ucd94\uc0c1\ud654\ud55c ",(0,o.kt)("strong",{parentName:"p"},"Serving Framework"),"\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uac1c\ubc1c\ub41c Serving Framework\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core"},"Seldon Core")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/kserve"},"Kserve")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/bentoml/BentoML"},"BentoML"))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 Seldon Core\ub97c \uc0ac\uc6a9\ud558\uc5ec API Deployment\ub97c \ud558\ub294 \uacfc\uc815\uc744 \ub2e4\ub8e8\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d9ed3de0.be7696ce.js b/assets/js/d9ed3de0.be7696ce.js deleted file mode 100644 index 2fe15464..00000000 --- a/assets/js/d9ed3de0.be7696ce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[7345],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),m=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=m(e.components);return r.createElement(i.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=m(n),d=o,y=u["".concat(i,".").concat(d)]||u[d]||c[d]||a;return n?r.createElement(y,l(l({ref:t},s),{},{components:n})):r.createElement(y,l({ref:t},s))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=d;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p[u]="string"==typeof e?e:o,l[1]=p;for(var m=2;m{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>p,toc:()=>m});var r=n(7462),o=(n(7294),n(3905));const a={title:"1. What is API Deployment?",description:"",sidebar_position:1,date:new Date("2021-12-22T00:00:00.000Z"),lastmod:new Date("2021-12-22T00:00:00.000Z"),contributors:["Youngcheol Jang"]},l=void 0,p={unversionedId:"api-deployment/what-is-api-deployment",id:"api-deployment/what-is-api-deployment",title:"1. What is API Deployment?",description:"",source:"@site/docs/api-deployment/what-is-api-deployment.md",sourceDirName:"api-deployment",slug:"/api-deployment/what-is-api-deployment",permalink:"/docs/api-deployment/what-is-api-deployment",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/what-is-api-deployment.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. What is API Deployment?",description:"",sidebar_position:1,date:"2021-12-22T00:00:00.000Z",lastmod:"2021-12-22T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"13. Component - Debugging",permalink:"/docs/kubeflow/how-to-debug"},next:{title:"2. Deploy SeldonDeployment",permalink:"/docs/api-deployment/seldon-iris"}},i={},m=[{value:"API Deployment\ub780?",id:"api-deployment\ub780",level:2},{value:"Serving Framework",id:"serving-framework",level:2}],s={toc:m},u="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"api-deployment\ub780"},"API Deployment\ub780?"),(0,o.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc744 \ud559\uc2b5\ud55c \ub4a4\uc5d0\ub294 \uc5b4\ub5bb\uac8c \uc0ac\uc6a9\ud574\uc57c \ud560\uae4c\uc694?",(0,o.kt)("br",{parentName:"p"}),"\n","\uba38\uc2e0\ub7ec\ub2dd\uc744 \ud559\uc2b5\ud560 \ub54c\ub294 \ub354 \ub192\uc740 \uc131\ub2a5\uc758 \ubaa8\ub378\uc774 \ub098\uc624\uae30\ub97c \uae30\ub300\ud558\uc9c0\ub9cc, \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucd94\ub860\uc744 \ud560 \ub54c\ub294 \ube60\ub974\uace0 \uc27d\uac8c \ucd94\ub860 \uacb0\uacfc\ub97c \ubc1b\uc544\ubcf4\uace0 \uc2f6\uc744 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ubaa8\ub378\uc758 \ucd94\ub860 \uacb0\uacfc\ub97c \ud655\uc778\ud558\uace0\uc790 \ud560 \ub54c \uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc774\ub098 \ud30c\uc774\uc36c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ud1b5\ud574 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \ub85c\ub4dc\ud55c \ub4a4 \ucd94\ub860\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uadf8\ub807\uc9c0\ub9cc \uc774\ub7f0 \ubc29\ubc95\uc740 \ubaa8\ub378\uc774 \ud074\uc218\ub85d \ubaa8\ub378\uc744 \ubd88\ub7ec\uc624\ub294 \ub370 \ub9ce\uc740 \uc2dc\uac04\uc744 \uc18c\uc694\ud558\uac8c \ub418\uc5b4\uc11c \ube44\ud6a8\uc728\uc801\uc785\ub2c8\ub2e4. \ub610\ud55c \uc774\ub807\uac8c \uc774\uc6a9\ud558\uba74 \ub9ce\uc740 \uc0ac\ub78c\uc774 \ubaa8\ub378\uc744 \uc774\uc6a9\ud560 \uc218 \uc5c6\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc774 \uc788\ub294 \ud658\uacbd\uc5d0\uc11c\ubc16\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uadf8\ub798\uc11c \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0\uc11c \uba38\uc2e0\ub7ec\ub2dd\uc774 \uc0ac\uc6a9\ub420 \ub54c\ub294 API\ub97c \uc774\uc6a9\ud574\uc11c \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ubaa8\ub378\uc740 API \uc11c\ubc84\uac00 \uad6c\ub3d9\ub418\ub294 \ud658\uacbd\uc5d0\uc11c \ud55c \ubc88\ub9cc \ub85c\ub4dc\uac00 \ub418\uba70, DNS\ub97c \ud65c\uc6a9\ud558\uc5ec \uc678\ubd80\uc5d0\uc11c\ub3c4 \uc27d\uac8c \ucd94\ub860 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uace0 \ub2e4\ub978 \uc11c\ube44\uc2a4\uc640 \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ud558\uc9c0\ub9cc \ubaa8\ub378\uc744 API\ub85c \ub9cc\ub4dc\ub294 \uc791\uc5c5\uc5d0\ub294 \uc0dd\uac01\ubcf4\ub2e4 \ub9ce\uc740 \ubd80\uc218\uc801\uc778 \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uadf8\ub798\uc11c API\ub85c \ub9cc\ub4dc\ub294 \uc791\uc5c5\uc744 \ub354 \uc27d\uac8c \ud558\uae30 \uc704\ud574\uc11c Tensorflow\uc640 \uac19\uc740 \uba38\uc2e0\ub7ec\ub2dd \ud504\ub808\uc784\uc6cc\ud06c \uc9c4\uc601\uc5d0\uc11c\ub294 \ucd94\ub860 \uc5d4\uc9c4(Inference engine)\uc744 \uac1c\ubc1c\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \uc774\uc6a9\ud558\uba74 \ud574\ub2f9 \uba38\uc2e0\ub7ec\ub2dd \ud504\ub808\uc784\uc6cc\ud06c\ub85c \uac1c\ubc1c\ub418\uace0 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \ubd88\ub7ec\uc640 \ucd94\ub860\uc774 \uac00\ub2a5\ud55c API(REST \ub610\ub294 gRPC)\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.",(0,o.kt)("br",{parentName:"p"}),"\n","\uc774\ub7ec\ud55c \ucd94\ub860 \uc5d4\uc9c4\uc744 \ud65c\uc6a9\ud558\uc5ec \uad6c\ucd95\ud55c API \uc11c\ubc84\ub85c \ucd94\ub860\ud558\uace0\uc790 \ud558\ub294 \ub370\uc774\ud130\ub97c \ub2f4\uc544 \uc694\uccad\uc744 \ubcf4\ub0b4\uba74, \ucd94\ub860 \uc5d4\uc9c4\uc774 \ucd94\ub860 \uacb0\uacfc\ub97c \uc751\ub2f5\uc5d0 \ub2f4\uc544 \uc804\uc1a1\ud558\ub294 \uac83\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"\ub300\ud45c\uc801\uc73c\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4 \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/tensorflow/serving"},"Tensorflow : Tensorflow Serving")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/pytorch/serve"},"PyTorch : Torchserve")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/microsoft/onnxruntime"},"Onnx : Onnx Runtime"))),(0,o.kt)("p",null,"\uc624\ud504\uc18c\uc2a4\uc5d0\uc11c \uacf5\uc2dd\uc801\uc73c\ub85c \uc9c0\uc6d0\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc, \ub9ce\uc774 \uc4f0\uc774\ub294 sklearn, xgboost \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc704\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub3c4 \uac1c\ubc1c\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\ucc98\ub7fc \ubaa8\ub378\uc758 \ucd94\ub860 \uacb0\uacfc\ub97c API\uc758 \ud615\ud0dc\ub85c \ubc1b\uc544\ubcfc \uc218 \uc788\ub3c4\ub85d \ubc30\ud3ec\ud558\ub294 \uac83\uc744 ",(0,o.kt)("strong",{parentName:"p"},"API Deployment"),"\ub77c\uace0 \ud569\ub2c8\ub2e4."),(0,o.kt)("h2",{id:"serving-framework"},"Serving Framework"),(0,o.kt)("p",null,"\uc704\uc5d0\uc11c \ub2e4\uc591\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\ub2e4\ub294 \uc0ac\uc2e4\uc744 \uc18c\uac1c\ud574 \ub4dc\ub838\uc2b5\ub2c8\ub2e4.\n\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd\uc5d0\uc11c \uc774\ub7ec\ud55c \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \uc0ac\uc6a9\ud558\uc5ec API Deployment\ub97c \ud55c\ub2e4\uba74 \uc5b4\ub5a4 \uc791\uc5c5\uc774 \ud544\uc694\ud560\uae4c\uc694?\n\ucd94\ub860 \uc5d4\uc9c4\uc744 \ubc30\ud3ec\ud558\uae30 \uc704\ud55c Deployment, \ucd94\ub860 \uc694\uccad\uc744 \ubcf4\ub0bc Endpoint\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud55c Service,\n\uc678\ubd80\uc5d0\uc11c\uc758 \ucd94\ub860 \uc694\uccad\uc744 \ucd94\ub860 \uc5d4\uc9c4\uc73c\ub85c \ubcf4\ub0b4\uae30 \uc704\ud55c Ingress \ub4f1 \ub9ce\uc740 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ub9ac\uc18c\uc2a4\ub97c \ubc30\ud3ec\ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\uc774\uac83 \uc774\uc678\uc5d0\ub3c4, \ub9ce\uc740 \ucd94\ub860 \uc694\uccad\uc774 \ub4e4\uc5b4\uc654\uc744 \uacbd\uc6b0\uc758 \uc2a4\ucf00\uc77c \uc544\uc6c3(scale-out), \ucd94\ub860 \uc5d4\uc9c4 \uc0c1\ud0dc\uc5d0 \ub300\ud55c \ubaa8\ub2c8\ud130\ub9c1, \uac1c\uc120\ub41c \ubaa8\ub378\uc774 \ub098\uc654\uc744 \uacbd\uc6b0 \ubc84\uc804 \uc5c5\ub370\uc774\ud2b8 \ub4f1 \ucd94\ub860 \uc5d4\uc9c4\uc744 \uc6b4\uc601\ud560 \ub54c\uc758 \uc694\uad6c\uc0ac\ud56d\uc740 \ud55c\ub450 \uac00\uc9c0\uac00 \uc544\ub2d9\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc774\ub7ec\ud55c \ub9ce\uc740 \uc694\uad6c\uc0ac\ud56d\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574 \ucd94\ub860 \uc5d4\uc9c4\ub4e4\uc744 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud658\uacbd \uc704\uc5d0\uc11c \ud55c \ubc88 \ub354 \ucd94\uc0c1\ud654\ud55c ",(0,o.kt)("strong",{parentName:"p"},"Serving Framework"),"\ub4e4\uc774 \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uac1c\ubc1c\ub41c Serving Framework\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/SeldonIO/seldon-core"},"Seldon Core")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/kserve"},"Kserve")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/bentoml/BentoML"},"BentoML"))),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 Seldon Core\ub97c \uc0ac\uc6a9\ud558\uc5ec API Deployment\ub97c \ud558\ub294 \uacfc\uc815\uc744 \ub2e4\ub8e8\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e070c0d8.69144dcc.js b/assets/js/e070c0d8.69144dcc.js new file mode 100644 index 00000000..651d3bfb --- /dev/null +++ b/assets/js/e070c0d8.69144dcc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5127],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),f=a,d=u["".concat(p,".").concat(f)]||u[f]||m[f]||o;return n?r.createElement(d,i(i({ref:t},c),{},{components:n})):r.createElement(d,i({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=f;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const o={title:"3. Install Requirements",description:"",sidebar_position:3,contributors:["Jongseob Jeon"]},i=void 0,l={unversionedId:"kubeflow/basic-requirements",id:"kubeflow/basic-requirements",title:"3. Install Requirements",description:"",source:"@site/docs/kubeflow/basic-requirements.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-requirements",permalink:"/docs/kubeflow/basic-requirements",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-requirements.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Install Requirements",description:"",sidebar_position:3,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"2. Kubeflow Concepts",permalink:"/docs/kubeflow/kubeflow-concepts"},next:{title:"4. Component - Write",permalink:"/docs/kubeflow/basic-component"}},p={},s=[],c={toc:s},u="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"\uc2e4\uc2b5\uc744 \uc704\ud574 \uad8c\uc7a5\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc740 python>=3.7\uc785\ub2c8\ub2e4. \ud30c\uc774\uc36c \ud658\uacbd\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\uc740 \ubd84\ub4e4\uc740 \ub2e4\uc74c ",(0,a.kt)("a",{parentName:"p",href:"../appendix/pyenv"},"Appendix 1. \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),"\uc744 \ucc38\uace0\ud558\uc5ec ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc"),"\uc5d0 \uc124\uce58\ud574\uc8fc\uc2e0 \ub4a4 \ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc9c4\ud589\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc2e4\uc2b5\uc744 \uc9c4\ud589\ud558\uae30\uc5d0\uc11c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uacfc \ubc84\uc804\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"requirements.txt"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kfp==1.8.9\nscikit-learn==1.0.1\nmlflow==1.21.0\npandas==1.3.4\ndill==0.3.4\n")))),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/appendix/pyenv#python-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EC%83%9D%EC%84%B1"},"\uc55e\uc5d0\uc11c \ub9cc\ub4e0 \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),"\uc744 \ud65c\uc131\ud654\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv activate demo\n")),(0,a.kt)("p",null,"\ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc9c4\ud589\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"pip3 install -U pip\npip3 install kfp==1.8.9 scikit-learn==1.0.1 mlflow==1.21.0 pandas==1.3.4 dill==0.3.4\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e070c0d8.7ad2b107.js b/assets/js/e070c0d8.7ad2b107.js deleted file mode 100644 index b2dccb98..00000000 --- a/assets/js/e070c0d8.7ad2b107.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5127],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),f=o,d=u["".concat(p,".").concat(f)]||u[f]||m[f]||a;return n?r.createElement(d,i(i({ref:t},c),{},{components:n})):r.createElement(d,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=f;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={title:"3. Install Requirements",description:"",sidebar_position:3,contributors:["Jongseob Jeon"]},i=void 0,l={unversionedId:"kubeflow/basic-requirements",id:"kubeflow/basic-requirements",title:"3. Install Requirements",description:"",source:"@site/docs/kubeflow/basic-requirements.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-requirements",permalink:"/docs/kubeflow/basic-requirements",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/kubeflow/basic-requirements.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Install Requirements",description:"",sidebar_position:3,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"2. Kubeflow Concepts",permalink:"/docs/kubeflow/kubeflow-concepts"},next:{title:"4. Component - Write",permalink:"/docs/kubeflow/basic-component"}},p={},s=[],c={toc:s},u="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\uc2e4\uc2b5\uc744 \uc704\ud574 \uad8c\uc7a5\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc740 python>=3.7\uc785\ub2c8\ub2e4. \ud30c\uc774\uc36c \ud658\uacbd\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\uc740 \ubd84\ub4e4\uc740 \ub2e4\uc74c ",(0,o.kt)("a",{parentName:"p",href:"../appendix/pyenv"},"Appendix 1. \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),"\uc744 \ucc38\uace0\ud558\uc5ec ",(0,o.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc"),"\uc5d0 \uc124\uce58\ud574\uc8fc\uc2e0 \ub4a4 \ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc9c4\ud589\ud574\uc8fc\uc2dc\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4."),(0,o.kt)("p",null,"\uc2e4\uc2b5\uc744 \uc9c4\ud589\ud558\uae30\uc5d0\uc11c \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uacfc \ubc84\uc804\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"requirements.txt"),(0,o.kt)("pre",{parentName:"li"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"kfp==1.8.9\nscikit-learn==1.0.1\nmlflow==1.21.0\npandas==1.3.4\ndill==0.3.4\n")))),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/appendix/pyenv#python-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-%EC%83%9D%EC%84%B1"},"\uc55e\uc5d0\uc11c \ub9cc\ub4e0 \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),"\uc744 \ud65c\uc131\ud654\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv activate demo\n")),(0,o.kt)("p",null,"\ud328\ud0a4\uc9c0 \uc124\uce58\ub97c \uc9c4\ud589\ud569\ub2c8\ub2e4."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"pip3 install -U pip\npip3 install kfp==1.8.9 scikit-learn==1.0.1 mlflow==1.21.0 pandas==1.3.4 dill==0.3.4\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e287e96b.687d7afc.js b/assets/js/e287e96b.687d7afc.js deleted file mode 100644 index 82e468db..00000000 --- a/assets/js/e287e96b.687d7afc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8657],{3905:(n,e,r)=>{r.d(e,{Zo:()=>o,kt:()=>b});var t=r(7294);function p(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function u(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,t)}return r}function a(n){for(var e=1;e=0||(p[r]=n[r]);return p}(n,e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(p[r]=n[r])}return p}var s=t.createContext({}),m=function(n){var e=t.useContext(s),r=e;return n&&(r="function"==typeof n?n(e):a(a({},e),n)),r},o=function(n){var e=m(n.components);return t.createElement(s.Provider,{value:e},n.children)},_="mdxType",l={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(n,e){var r=n.components,p=n.mdxType,u=n.originalType,s=n.parentName,o=i(n,["components","mdxType","originalType","parentName"]),_=m(r),d=p,b=_["".concat(s,".").concat(d)]||_[d]||l[d]||u;return r?t.createElement(b,a(a({ref:e},o),{},{components:r})):t.createElement(b,a({ref:e},o))}));function b(n,e){var r=arguments,p=e&&e.mdxType;if("string"==typeof n||p){var u=r.length,a=new Array(u);a[0]=d;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=n,i[_]="string"==typeof n?n:p,a[1]=i;for(var m=2;m{r.r(e),r.d(e,{assets:()=>s,contentTitle:()=>a,default:()=>l,frontMatter:()=>u,metadata:()=>i,toc:()=>m});var t=r(7462),p=(r(7294),r(3905));const u={title:"5. Pipeline - Write",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},a=void 0,i={unversionedId:"kubeflow/basic-pipeline",id:"version-1.0/kubeflow/basic-pipeline",title:"5. Pipeline - Write",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-pipeline.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-pipeline",permalink:"/docs/1.0/kubeflow/basic-pipeline",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-pipeline.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"5. Pipeline - Write",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"4. Component - Write",permalink:"/docs/1.0/kubeflow/basic-component"},next:{title:"6. Pipeline - Upload",permalink:"/docs/1.0/kubeflow/basic-pipeline-upload"}},s={},m=[{value:"Pipeline",id:"pipeline",level:2},{value:"Component Set",id:"component-set",level:2},{value:"Component Order",id:"component-order",level:2},{value:"Define Order",id:"define-order",level:3},{value:"Single Output",id:"single-output",level:3},{value:"Multi Output",id:"multi-output",level:3},{value:"Write to python code",id:"write-to-python-code",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:2},{value:"Conclusion",id:"conclusion",level:2}],o={toc:m},_="wrapper";function l(n){let{components:e,...u}=n;return(0,p.kt)(_,(0,t.Z)({},o,u,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"pipeline"},"Pipeline"),(0,p.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc2e4\ud589\ub418\uc9c0 \uc54a\uace0 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uad6c\uc131\uc694\uc18c\ub85c\uc368 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud574 \ubcf4\ub824\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uacfc \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \uc21c\uc11c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,p.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc22b\uc790\ub97c \uc785\ub825\ubc1b\uace0 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc640 \ub450 \uac1c\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uc22b\uc790\ub97c \ubc1b\uc544\uc11c \ud569\uc744 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc788\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"component-set"},"Component Set"),(0,p.kt)("p",null,"\uc6b0\uc120 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,p.kt)("ol",null,(0,p.kt)("li",{parentName:"ol"},(0,p.kt)("p",{parentName:"li"},(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number")),(0,p.kt)("p",{parentName:"li"},"\uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c \ucd9c\ub825\ud558\uace0 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc785\ub825\ubc1b\uc740 \uac12\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 int\ub97c return\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub85c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",{parentName:"li"},(0,p.kt)("code",{parentName:"pre",className:"language-python"},"@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n"))),(0,p.kt)("li",{parentName:"ol"},(0,p.kt)("p",{parentName:"li"},(0,p.kt)("inlineCode",{parentName:"p"},"sum_and_print_numbers")),(0,p.kt)("p",{parentName:"li"},"\uc785\ub825\ubc1b\uc740 \ub450 \uac1c\uc758 \uc22b\uc790\uc758 \ud569\uc744 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774 \ucef4\ud3ec\ub10c\ud2b8 \uc5ed\uc2dc \ub450 \uc22b\uc790\uc758 \ud569\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 int\ub97c return\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub85c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",{parentName:"li"},(0,p.kt)("code",{parentName:"pre",className:"language-python"},"@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int) -> int:\n sum_num = number_1 + number_2\n print(sum_num)\n return sum_num\n")))),(0,p.kt)("h2",{id:"component-order"},"Component Order"),(0,p.kt)("h3",{id:"define-order"},"Define Order"),(0,p.kt)("p",null,"\ud544\uc694\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uc744 \ub9cc\ub4e4\uc5c8\uc73c\uba74, \ub2e4\uc74c\uc73c\ub85c\ub294 \uc774\ub4e4\uc758 \uc21c\uc11c\ub97c \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c \ub9cc\ub4e4 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc21c\uc11c\ub97c \uadf8\ub9bc\uc73c\ub85c \ud45c\ud604\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"pipeline-0.png",src:r(5740).Z,width:"586",height:"262"})),(0,p.kt)("h3",{id:"single-output"},"Single Output"),(0,p.kt)("p",null,"\uc774\uc81c \uc774 \uc21c\uc11c\ub97c \ucf54\ub4dc\ub85c \uc62e\uaca8\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. "),(0,p.kt)("p",null,"\uc6b0\uc120 \uc704\uc758 \uadf8\ub9bc\uc5d0\uc11c ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number_1")," \uacfc ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number_2")," \ub97c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline():\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n")),(0,p.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uace0 \uadf8 \ubc18\ud658 \uac12\uc744 \uac01\uac01 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_result")," \uc640 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_2_result")," \uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc800\uc7a5\ub41c ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_result")," \uc758 \ubc18\ud658 \uac12\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_resulst.output")," \ub97c \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"multi-output"},"Multi Output"),(0,p.kt)("p",null,"\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e8\uc77c \uac12\ub9cc\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 ",(0,p.kt)("inlineCode",{parentName:"p"},"output"),"\uc744 \uc774\uc6a9\ud574 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \uc5ec\ub7ec \uac1c\uc758 \ubc18\ud658 \uac12\uc774 \uc788\ub2e4\uba74 ",(0,p.kt)("inlineCode",{parentName:"p"},"outputs"),"\uc5d0 \uc800\uc7a5\uc774 \ub418\uba70 dict \ud0c0\uc785\uc774\uae30\uc5d0 key\ub97c \uc774\uc6a9\ud574 \uc6d0\ud558\ub294 \ubc18\ud658 \uac12\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc608\ub97c \ub4e4\uc5b4\uc11c \uc55e\uc5d0\uc11c \uc791\uc131\ud55c \uc5ec\ub7ec \uac1c\ub97c \ubc18\ud658\ud558\ub294 ",(0,p.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-component#define-a-standalone-python-function"},"\ucef4\ud3ec\ub10c\ud2b8")," \uc758 \uacbd\uc6b0\ub97c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n",(0,p.kt)("inlineCode",{parentName:"p"},"divde_and_return_number")," \uc758 return \uac12\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"quotient")," \uc640 ",(0,p.kt)("inlineCode",{parentName:"p"},"remainder")," \uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \uac12\uc744 ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number")," \uc5d0 \uc804\ub2ec\ud558\ub294 \uc608\uc2dc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'def multi_pipeline():\n divided_result = divde_and_return_number(number)\n num_1_result = print_and_return_number(divided_result.outputs["quotient"])\n num_2_result = print_and_return_number(divided_result.outputs["remainder"])\n')),(0,p.kt)("p",null,(0,p.kt)("inlineCode",{parentName:"p"},"divde_and_return_number"),"\uc758 \uacb0\uacfc\ub97c ",(0,p.kt)("inlineCode",{parentName:"p"},"divided_result"),"\uc5d0 \uc800\uc7a5\ud558\uace0 \uac01\uac01 ",(0,p.kt)("inlineCode",{parentName:"p"},'divided_result.outputs["quotient"]'),", ",(0,p.kt)("inlineCode",{parentName:"p"},'divided_result.outputs["remainder"]'),"\ub85c \uac12\uc744 \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"write-to-python-code"},"Write to python code"),(0,p.kt)("p",null,"\uc774\uc81c \ub2e4\uc2dc \ubcf8\ub860\uc73c\ub85c \ub3cc\uc544\uc640\uc11c \uc774 \ub450 \uac12\uc758 \uacb0\uacfc\ub97c ",(0,p.kt)("inlineCode",{parentName:"p"},"sum_and_print_numbers")," \uc5d0 \uc804\ub2ec\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline():\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n")),(0,p.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c \uac01 \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ud544\uc694\ud55c Config\ub4e4\uc744 \ubaa8\uc544\uc11c \ud30c\uc774\ud504\ub77c\uc778 Config\ub85c \uc815\uc758 \ud569\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline(number_1: int, number_2:int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n")),(0,p.kt)("h2",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,p.kt)("p",null,"\ub9c8\uc9c0\ub9c9\uc73c\ub85c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4. \ubcc0\ud658\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"kfp.dsl.pipeline")," \ud568\uc218\ub97c \uc774\uc6a9\ud574 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n')),(0,p.kt)("p",null,"Kubeflow\uc5d0\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 yaml \ud615\uc2dd\uc73c\ub85c\ub9cc \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc5d0 \uc0dd\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc815\ud574\uc9c4 yaml \ud615\uc2dd\uc73c\ub85c \ucef4\ud30c\uc77c(Compile) \ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ucef4\ud30c\uc77c\uc740 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'if __name__ == "__main__":\n import kfp\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("h2",{id:"conclusion"},"Conclusion"),(0,p.kt)("p",null,"\uc55e\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \ubaa8\uc73c\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\ucef4\ud30c\uc77c\ub41c \uacb0\uacfc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("details",null,(0,p.kt)("summary",null,"example_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: example-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline_compilation_time: \'2021-12-05T13:38:51.566777\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "number_1", "type":\n "Integer"}, {"name": "number_2", "type": "Integer"}], "name": "example_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3}\nspec:\n entrypoint: example-pipeline\n templates:\n - name: example-pipeline\n inputs:\n parameters:\n - {name: number_1}\n - {name: number_2}\n dag:\n tasks:\n - name: print-and-return-number\n template: print-and-return-number\n arguments:\n parameters:\n - {name: number_1, value: \'{{inputs.parameters.number_1}}\'}\n - name: print-and-return-number-2\n template: print-and-return-number-2\n arguments:\n parameters:\n - {name: number_2, value: \'{{inputs.parameters.number_2}}\'}\n - name: sum-and-print-numbers\n template: sum-and-print-numbers\n dependencies: [print-and-return-number, print-and-return-number-2]\n arguments:\n parameters:\n - {name: print-and-return-number-2-Output, value: \'{{tasks.print-and-return-number-2.outputs.parameters.print-and-return-number-2-Output}}\'}\n - {name: print-and-return-number-Output, value: \'{{tasks.print-and-return-number.outputs.parameters.print-and-return-number-Output}}\'}\n - name: print-and-return-number\n container:\n args: [--number, \'{{inputs.parameters.number_1}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_1}\n outputs:\n parameters:\n - name: print-and-return-number-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-Output, path: /tmp/outputs/Output/data}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number", {"inputValue": "number"}, "----output-paths", {"outputPath":\n "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(str(int_value), str(type(int_value))))\\n return\n str(int_value)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Print\n and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_1}}"}\'}\n - name: print-and-return-number-2\n container:\n args: [--number, \'{{inputs.parameters.number_2}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_2}\n outputs:\n parameters:\n - name: print-and-return-number-2-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-2-Output, path: /tmp/outputs/Output/data}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number", {"inputValue": "number"}, "----output-paths", {"outputPath":\n "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(str(int_value), str(type(int_value))))\\n return\n str(int_value)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Print\n and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_2}}"}\'}\n - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: print-and-return-number-2-Output}\n - {name: print-and-return-number-Output}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number-1", {"inputValue": "number_1"}, "--number-2", {"inputValue":\n "number_2"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n sum_and_print_numbers(number_1, number_2):\\n print(number_1 + number_2)\\n\\nimport\n argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Sum and print numbers\'\',\n description=\'\'\'\')\\n_parser.add_argument(\\"--number-1\\", dest=\\"number_1\\",\n type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--number-2\\",\n dest=\\"number_2\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = sum_and_print_numbers(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number_1", "type": "Integer"},\n {"name": "number_2", "type": "Integer"}], "name": "Sum and print numbers"}\',\n pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number_1":\n "{{inputs.parameters.print-and-return-number-Output}}", "number_2": "{{inputs.parameters.print-and-return-number-2-Output}}"}\'}\n arguments:\n parameters:\n - {name: number_1}\n - {name: number_2}\n serviceAccountName: pipeline-runner\n'))))}l.isMDXComponent=!0},5740:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/pipeline-0-c62220ce65ed4a187b70947bccb0f1e6.png"}}]); \ No newline at end of file diff --git a/assets/js/e287e96b.e1b29554.js b/assets/js/e287e96b.e1b29554.js new file mode 100644 index 00000000..3008cd92 --- /dev/null +++ b/assets/js/e287e96b.e1b29554.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8657],{3905:(n,e,r)=>{r.d(e,{Zo:()=>o,kt:()=>b});var t=r(7294);function p(n,e,r){return e in n?Object.defineProperty(n,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[e]=r,n}function u(n,e){var r=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.push.apply(r,t)}return r}function a(n){for(var e=1;e=0||(p[r]=n[r]);return p}(n,e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,r)&&(p[r]=n[r])}return p}var s=t.createContext({}),m=function(n){var e=t.useContext(s),r=e;return n&&(r="function"==typeof n?n(e):a(a({},e),n)),r},o=function(n){var e=m(n.components);return t.createElement(s.Provider,{value:e},n.children)},_="mdxType",l={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},d=t.forwardRef((function(n,e){var r=n.components,p=n.mdxType,u=n.originalType,s=n.parentName,o=i(n,["components","mdxType","originalType","parentName"]),_=m(r),d=p,b=_["".concat(s,".").concat(d)]||_[d]||l[d]||u;return r?t.createElement(b,a(a({ref:e},o),{},{components:r})):t.createElement(b,a({ref:e},o))}));function b(n,e){var r=arguments,p=e&&e.mdxType;if("string"==typeof n||p){var u=r.length,a=new Array(u);a[0]=d;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=n,i[_]="string"==typeof n?n:p,a[1]=i;for(var m=2;m{r.r(e),r.d(e,{assets:()=>s,contentTitle:()=>a,default:()=>l,frontMatter:()=>u,metadata:()=>i,toc:()=>m});var t=r(7462),p=(r(7294),r(3905));const u={title:"5. Pipeline - Write",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},a=void 0,i={unversionedId:"kubeflow/basic-pipeline",id:"version-1.0/kubeflow/basic-pipeline",title:"5. Pipeline - Write",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/basic-pipeline.md",sourceDirName:"kubeflow",slug:"/kubeflow/basic-pipeline",permalink:"/docs/1.0/kubeflow/basic-pipeline",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/basic-pipeline.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"5. Pipeline - Write",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"4. Component - Write",permalink:"/docs/1.0/kubeflow/basic-component"},next:{title:"6. Pipeline - Upload",permalink:"/docs/1.0/kubeflow/basic-pipeline-upload"}},s={},m=[{value:"Pipeline",id:"pipeline",level:2},{value:"Component Set",id:"component-set",level:2},{value:"Component Order",id:"component-order",level:2},{value:"Define Order",id:"define-order",level:3},{value:"Single Output",id:"single-output",level:3},{value:"Multi Output",id:"multi-output",level:3},{value:"Write to python code",id:"write-to-python-code",level:3},{value:"Convert to Kubeflow Format",id:"convert-to-kubeflow-format",level:2},{value:"Conclusion",id:"conclusion",level:2}],o={toc:m},_="wrapper";function l(n){let{components:e,...u}=n;return(0,p.kt)(_,(0,t.Z)({},o,u,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"pipeline"},"Pipeline"),(0,p.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub294 \ub3c5\ub9bd\uc801\uc73c\ub85c \uc2e4\ud589\ub418\uc9c0 \uc54a\uace0 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uad6c\uc131\uc694\uc18c\ub85c\uc368 \uc2e4\ud589\ub429\ub2c8\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud574 \ubcf4\ub824\uba74 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uadf8\ub9ac\uace0 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc791\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uacfc \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \uc21c\uc11c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,p.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc22b\uc790\ub97c \uc785\ub825\ubc1b\uace0 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc640 \ub450 \uac1c\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub85c\ubd80\ud130 \uc22b\uc790\ub97c \ubc1b\uc544\uc11c \ud569\uc744 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uac00 \uc788\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub9cc\ub4e4\uc5b4 \ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h2",{id:"component-set"},"Component Set"),(0,p.kt)("p",null,"\uc6b0\uc120 \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,p.kt)("ol",null,(0,p.kt)("li",{parentName:"ol"},(0,p.kt)("p",{parentName:"li"},(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number")),(0,p.kt)("p",{parentName:"li"},"\uc785\ub825\ubc1b\uc740 \uc22b\uc790\ub97c \ucd9c\ub825\ud558\uace0 \ubc18\ud658\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ucef4\ud3ec\ub10c\ud2b8\uac00 \uc785\ub825\ubc1b\uc740 \uac12\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 int\ub97c return\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub85c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",{parentName:"li"},(0,p.kt)("code",{parentName:"pre",className:"language-python"},"@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n"))),(0,p.kt)("li",{parentName:"ol"},(0,p.kt)("p",{parentName:"li"},(0,p.kt)("inlineCode",{parentName:"p"},"sum_and_print_numbers")),(0,p.kt)("p",{parentName:"li"},"\uc785\ub825\ubc1b\uc740 \ub450 \uac1c\uc758 \uc22b\uc790\uc758 \ud569\uc744 \ucd9c\ub825\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc785\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774 \ucef4\ud3ec\ub10c\ud2b8 \uc5ed\uc2dc \ub450 \uc22b\uc790\uc758 \ud569\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 int\ub97c return\uc758 \ud0c0\uc785 \ud78c\ud2b8\ub85c \uc785\ub825\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",{parentName:"li"},(0,p.kt)("code",{parentName:"pre",className:"language-python"},"@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int) -> int:\n sum_num = number_1 + number_2\n print(sum_num)\n return sum_num\n")))),(0,p.kt)("h2",{id:"component-order"},"Component Order"),(0,p.kt)("h3",{id:"define-order"},"Define Order"),(0,p.kt)("p",null,"\ud544\uc694\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc9d1\ud569\uc744 \ub9cc\ub4e4\uc5c8\uc73c\uba74, \ub2e4\uc74c\uc73c\ub85c\ub294 \uc774\ub4e4\uc758 \uc21c\uc11c\ub97c \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c \ub9cc\ub4e4 \ud30c\uc774\ud504\ub77c\uc778\uc758 \uc21c\uc11c\ub97c \uadf8\ub9bc\uc73c\ub85c \ud45c\ud604\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"pipeline-0.png",src:r(5740).Z,width:"586",height:"262"})),(0,p.kt)("h3",{id:"single-output"},"Single Output"),(0,p.kt)("p",null,"\uc774\uc81c \uc774 \uc21c\uc11c\ub97c \ucf54\ub4dc\ub85c \uc62e\uaca8\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. "),(0,p.kt)("p",null,"\uc6b0\uc120 \uc704\uc758 \uadf8\ub9bc\uc5d0\uc11c ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number_1")," \uacfc ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number_2")," \ub97c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline():\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n")),(0,p.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc2e4\ud589\ud558\uace0 \uadf8 \ubc18\ud658 \uac12\uc744 \uac01\uac01 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_result")," \uc640 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_2_result")," \uc5d0 \uc800\uc7a5\ud569\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\uc800\uc7a5\ub41c ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_result")," \uc758 \ubc18\ud658 \uac12\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"number_1_resulst.output")," \ub97c \ud1b5\ud574 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"multi-output"},"Multi Output"),(0,p.kt)("p",null,"\uc704\uc758 \uc608\uc2dc\uc5d0\uc11c \ucef4\ud3ec\ub10c\ud2b8\ub294 \ub2e8\uc77c \uac12\ub9cc\uc744 \ubc18\ud658\ud558\uae30 \ub54c\ubb38\uc5d0 ",(0,p.kt)("inlineCode",{parentName:"p"},"output"),"\uc744 \uc774\uc6a9\ud574 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.",(0,p.kt)("br",{parentName:"p"}),"\n","\ub9cc\uc57d, \uc5ec\ub7ec \uac1c\uc758 \ubc18\ud658 \uac12\uc774 \uc788\ub2e4\uba74 ",(0,p.kt)("inlineCode",{parentName:"p"},"outputs"),"\uc5d0 \uc800\uc7a5\uc774 \ub418\uba70 dict \ud0c0\uc785\uc774\uae30\uc5d0 key\ub97c \uc774\uc6a9\ud574 \uc6d0\ud558\ub294 \ubc18\ud658 \uac12\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc608\ub97c \ub4e4\uc5b4\uc11c \uc55e\uc5d0\uc11c \uc791\uc131\ud55c \uc5ec\ub7ec \uac1c\ub97c \ubc18\ud658\ud558\ub294 ",(0,p.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-component#define-a-standalone-python-function"},"\ucef4\ud3ec\ub10c\ud2b8")," \uc758 \uacbd\uc6b0\ub97c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n",(0,p.kt)("inlineCode",{parentName:"p"},"divde_and_return_number")," \uc758 return \uac12\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"quotient")," \uc640 ",(0,p.kt)("inlineCode",{parentName:"p"},"remainder")," \uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \uac12\uc744 ",(0,p.kt)("inlineCode",{parentName:"p"},"print_and_return_number")," \uc5d0 \uc804\ub2ec\ud558\ub294 \uc608\uc2dc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'def multi_pipeline():\n divided_result = divde_and_return_number(number)\n num_1_result = print_and_return_number(divided_result.outputs["quotient"])\n num_2_result = print_and_return_number(divided_result.outputs["remainder"])\n')),(0,p.kt)("p",null,(0,p.kt)("inlineCode",{parentName:"p"},"divde_and_return_number"),"\uc758 \uacb0\uacfc\ub97c ",(0,p.kt)("inlineCode",{parentName:"p"},"divided_result"),"\uc5d0 \uc800\uc7a5\ud558\uace0 \uac01\uac01 ",(0,p.kt)("inlineCode",{parentName:"p"},'divided_result.outputs["quotient"]'),", ",(0,p.kt)("inlineCode",{parentName:"p"},'divided_result.outputs["remainder"]'),"\ub85c \uac12\uc744 \uac00\uc838\uc62c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"write-to-python-code"},"Write to python code"),(0,p.kt)("p",null,"\uc774\uc81c \ub2e4\uc2dc \ubcf8\ub860\uc73c\ub85c \ub3cc\uc544\uc640\uc11c \uc774 \ub450 \uac12\uc758 \uacb0\uacfc\ub97c ",(0,p.kt)("inlineCode",{parentName:"p"},"sum_and_print_numbers")," \uc5d0 \uc804\ub2ec\ud569\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline():\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n")),(0,p.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c \uac01 \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ud544\uc694\ud55c Config\ub4e4\uc744 \ubaa8\uc544\uc11c \ud30c\uc774\ud504\ub77c\uc778 Config\ub85c \uc815\uc758 \ud569\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},"def example_pipeline(number_1: int, number_2:int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n")),(0,p.kt)("h2",{id:"convert-to-kubeflow-format"},"Convert to Kubeflow Format"),(0,p.kt)("p",null,"\ub9c8\uc9c0\ub9c9\uc73c\ub85c kubeflow\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4. \ubcc0\ud658\uc740 ",(0,p.kt)("inlineCode",{parentName:"p"},"kfp.dsl.pipeline")," \ud568\uc218\ub97c \uc774\uc6a9\ud574 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n')),(0,p.kt)("p",null,"Kubeflow\uc5d0\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 yaml \ud615\uc2dd\uc73c\ub85c\ub9cc \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc5d0 \uc0dd\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc815\ud574\uc9c4 yaml \ud615\uc2dd\uc73c\ub85c \ucef4\ud30c\uc77c(Compile) \ud574 \uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ucef4\ud30c\uc77c\uc740 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'if __name__ == "__main__":\n import kfp\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("h2",{id:"conclusion"},"Conclusion"),(0,p.kt)("p",null,"\uc55e\uc11c \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\ub85c \ubaa8\uc73c\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func\nfrom kfp.dsl import pipeline\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int):\n print(number_1 + number_2)\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\ucef4\ud30c\uc77c\ub41c \uacb0\uacfc\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("details",null,(0,p.kt)("summary",null,"example_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: example-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline_compilation_time: \'2021-12-05T13:38:51.566777\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "number_1", "type":\n "Integer"}, {"name": "number_2", "type": "Integer"}], "name": "example_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3}\nspec:\n entrypoint: example-pipeline\n templates:\n - name: example-pipeline\n inputs:\n parameters:\n - {name: number_1}\n - {name: number_2}\n dag:\n tasks:\n - name: print-and-return-number\n template: print-and-return-number\n arguments:\n parameters:\n - {name: number_1, value: \'{{inputs.parameters.number_1}}\'}\n - name: print-and-return-number-2\n template: print-and-return-number-2\n arguments:\n parameters:\n - {name: number_2, value: \'{{inputs.parameters.number_2}}\'}\n - name: sum-and-print-numbers\n template: sum-and-print-numbers\n dependencies: [print-and-return-number, print-and-return-number-2]\n arguments:\n parameters:\n - {name: print-and-return-number-2-Output, value: \'{{tasks.print-and-return-number-2.outputs.parameters.print-and-return-number-2-Output}}\'}\n - {name: print-and-return-number-Output, value: \'{{tasks.print-and-return-number.outputs.parameters.print-and-return-number-Output}}\'}\n - name: print-and-return-number\n container:\n args: [--number, \'{{inputs.parameters.number_1}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_1}\n outputs:\n parameters:\n - name: print-and-return-number-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-Output, path: /tmp/outputs/Output/data}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number", {"inputValue": "number"}, "----output-paths", {"outputPath":\n "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(str(int_value), str(type(int_value))))\\n return\n str(int_value)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Print\n and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_1}}"}\'}\n - name: print-and-return-number-2\n container:\n args: [--number, \'{{inputs.parameters.number_2}}\', \'----output-paths\', /tmp/outputs/Output/data]\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def print_and_return_number(number):\n print(number)\n return number\n\n def _serialize_int(int_value: int) -> str:\n if isinstance(int_value, str):\n return int_value\n if not isinstance(int_value, int):\n raise TypeError(\'Value "{}" has type "{}" instead of int.\'.format(str(int_value), str(type(int_value))))\n return str(int_value)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Print and return number\', description=\'\')\n _parser.add_argument("--number", dest="number", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("----output-paths", dest="_output_paths", type=str, nargs=1)\n _parsed_args = vars(_parser.parse_args())\n _output_files = _parsed_args.pop("_output_paths", [])\n\n _outputs = print_and_return_number(**_parsed_args)\n\n _outputs = [_outputs]\n\n _output_serializers = [\n _serialize_int,\n\n ]\n\n import os\n for idx, output_file in enumerate(_output_files):\n try:\n os.makedirs(os.path.dirname(output_file))\n except OSError:\n pass\n with open(output_file, \'w\') as f:\n f.write(_output_serializers[idx](_outputs[idx]))\n image: python:3.7\n inputs:\n parameters:\n - {name: number_2}\n outputs:\n parameters:\n - name: print-and-return-number-2-Output\n valueFrom: {path: /tmp/outputs/Output/data}\n artifacts:\n - {name: print-and-return-number-2-Output, path: /tmp/outputs/Output/data}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number", {"inputValue": "number"}, "----output-paths", {"outputPath":\n "Output"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n print_and_return_number(number):\\n print(number)\\n return number\\n\\ndef\n _serialize_int(int_value: int) -> str:\\n if isinstance(int_value, str):\\n return\n int_value\\n if not isinstance(int_value, int):\\n raise TypeError(\'\'Value\n \\"{}\\" has type \\"{}\\" instead of int.\'\'.format(str(int_value), str(type(int_value))))\\n return\n str(int_value)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Print\n and return number\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--number\\",\n dest=\\"number\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"----output-paths\\",\n dest=\\"_output_paths\\", type=str, nargs=1)\\n_parsed_args = vars(_parser.parse_args())\\n_output_files\n = _parsed_args.pop(\\"_output_paths\\", [])\\n\\n_outputs = print_and_return_number(**_parsed_args)\\n\\n_outputs\n = [_outputs]\\n\\n_output_serializers = [\\n _serialize_int,\\n\\n]\\n\\nimport\n os\\nfor idx, output_file in enumerate(_output_files):\\n try:\\n os.makedirs(os.path.dirname(output_file))\\n except\n OSError:\\n pass\\n with open(output_file, \'\'w\'\') as f:\\n f.write(_output_serializers[idx](_outputs[idx]))\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number", "type": "Integer"}],\n "name": "Print and return number", "outputs": [{"name": "Output", "type":\n "Integer"}]}\', pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number":\n "{{inputs.parameters.number_2}}"}\'}\n - name: sum-and-print-numbers\n container:\n args: [--number-1, \'{{inputs.parameters.print-and-return-number-Output}}\', --number-2,\n \'{{inputs.parameters.print-and-return-number-2-Output}}\']\n command:\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def sum_and_print_numbers(number_1, number_2):\n print(number_1 + number_2)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Sum and print numbers\', description=\'\')\n _parser.add_argument("--number-1", dest="number_1", type=int, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--number-2", dest="number_2", type=int, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = sum_and_print_numbers(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: print-and-return-number-2-Output}\n - {name: print-and-return-number-Output}\n metadata:\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.6.3, pipelines.kubeflow.org/pipeline-sdk-type: kfp}\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--number-1", {"inputValue": "number_1"}, "--number-2", {"inputValue":\n "number_2"}], "command": ["sh", "-ec", "program_path=$(mktemp)\\nprintf \\"%s\\"\n \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n", "def\n sum_and_print_numbers(number_1, number_2):\\n print(number_1 + number_2)\\n\\nimport\n argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Sum and print numbers\'\',\n description=\'\'\'\')\\n_parser.add_argument(\\"--number-1\\", dest=\\"number_1\\",\n type=int, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--number-2\\",\n dest=\\"number_2\\", type=int, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = sum_and_print_numbers(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "number_1", "type": "Integer"},\n {"name": "number_2", "type": "Integer"}], "name": "Sum and print numbers"}\',\n pipelines.kubeflow.org/component_ref: \'{}\', pipelines.kubeflow.org/arguments.parameters: \'{"number_1":\n "{{inputs.parameters.print-and-return-number-Output}}", "number_2": "{{inputs.parameters.print-and-return-number-2-Output}}"}\'}\n arguments:\n parameters:\n - {name: number_1}\n - {name: number_2}\n serviceAccountName: pipeline-runner\n'))))}l.isMDXComponent=!0},5740:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/pipeline-0-c62220ce65ed4a187b70947bccb0f1e6.png"}}]); \ No newline at end of file diff --git a/assets/js/e2bc44c1.2e967d24.js b/assets/js/e2bc44c1.2e967d24.js new file mode 100644 index 00000000..acaaa4c3 --- /dev/null +++ b/assets/js/e2bc44c1.2e967d24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5040],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>b});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),o=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):u(u({},t),e)),n},p=function(e){var t=o(e.components);return r.createElement(i.Provider,{value:t},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,b=c["".concat(i,".").concat(d)]||c[d]||k[d]||l;return n?r.createElement(b,u(u({ref:t},p),{},{components:n})):r.createElement(b,u({ref:t},p))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,u=new Array(l);u[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:a,u[1]=s;for(var o=2;o{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>u,default:()=>k,frontMatter:()=>l,metadata:()=>s,toc:()=>o});var r=n(7462),a=(n(7294),n(3905));const l={title:"4.3. Kubeadm",description:"",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Youngcheol Jang"]},u=void 0,s={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",id:"version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",title:"4.3. Kubeadm",description:"",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"4.3. Kubeadm",description:"",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"4.1. K3s",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s"},next:{title:"4.2. Minikube",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube"}},i={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"6. References",id:"6-references",level:2}],p={toc:o},c="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc704\ud55c \ub124\ud2b8\uc6cc\ud06c\uc758 \uc124\uc815\uc744 \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo modprobe br_netfilter\n\ncat <{n.d(t,{Zo:()=>p,kt:()=>b});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),o=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):u(u({},t),e)),n},p=function(e){var t=o(e.components);return r.createElement(i.Provider,{value:t},e.children)},c="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,i=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,b=c["".concat(i,".").concat(d)]||c[d]||k[d]||l;return n?r.createElement(b,u(u({ref:t},p),{},{components:n})):r.createElement(b,u({ref:t},p))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,u=new Array(l);u[0]=d;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:a,u[1]=s;for(var o=2;o{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>u,default:()=>k,frontMatter:()=>l,metadata:()=>s,toc:()=>o});var r=n(7462),a=(n(7294),n(3905));const l={title:"4.3. Kubeadm",description:"",sidebar_position:3,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Youngcheol Jang"]},u=void 0,s={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",id:"version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",title:"4.3. Kubeadm",description:"",source:"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"4.3. Kubeadm",description:"",sidebar_position:3,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"4.1. K3s",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s"},next:{title:"4.2. Minikube",permalink:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube"}},i={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2},{value:"6. References",id:"6-references",level:2}],p={toc:o},c="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/docs/1.0/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,a.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4\ub97c \uc704\ud55c \ub124\ud2b8\uc6cc\ud06c\uc758 \uc124\uc815\uc744 \ubcc0\uacbd\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo modprobe br_netfilter\n\ncat <{r.d(t,{Zo:()=>u,kt:()=>d});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),c=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=c(e.components);return o.createElement(p.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},b=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),s=c(r),b=n,d=s["".concat(p,".").concat(b)]||s[b]||f[b]||i;return r?o.createElement(d,l(l({ref:t},u),{},{components:r})):o.createElement(d,l({ref:t},u))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,l=new Array(i);l[0]=b;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a[s]="string"==typeof e?e:n,l[1]=a;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var o=r(7462),n=(r(7294),r(3905));const i={title:"1. Kubeflow Introduction",description:"",sidebar_position:1,contributors:["Jongseob Jeon"]},l=void 0,a={unversionedId:"kubeflow/kubeflow-intro",id:"version-1.0/kubeflow/kubeflow-intro",title:"1. Kubeflow Introduction",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/kubeflow-intro.md",sourceDirName:"kubeflow",slug:"/kubeflow/kubeflow-intro",permalink:"/docs/1.0/kubeflow/kubeflow-intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/kubeflow-intro.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Kubeflow Introduction",description:"",sidebar_position:1,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"6. Kubeflow Pipeline \uad00\ub828",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments-and-others"},next:{title:"2. Kubeflow Concepts",permalink:"/docs/1.0/kubeflow/kubeflow-concepts"}},p={},c=[],u={toc:c},s="wrapper";function f(e){let{components:t,...r}=e;return(0,n.kt)(s,(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Kubeflow\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8(Component)\uc640 \ud30c\uc774\ud504\ub77c\uc778(Pipeline)\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \ubc29\uc2dd\uc740 ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/overview/quickstart/"},"Kubeflow Pipeline \uacf5\uc2dd \ud648\ud398\uc774\uc9c0"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \ubc29\uc2dd\uacfc\ub294 \ub2e4\uc18c \ucc28\uc774\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c\ub294 Kubeflow Pipeline\uc744 \uc6cc\ud06c\ud50c\ub85c(Workflow)\uac00 \uc544\ub2cc \uc55e\uc11c \uc124\uba85\ud55c ",(0,n.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/kubeflow-concepts#component-contents"},"MLOps\ub97c \uad6c\uc131\ud558\ub294 \uc694\uc18c")," \uc911 \ud558\ub098\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub85c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubb34\uc5c7\uc774\uba70 \uc5b4\ub5bb\uac8c \uc791\uc131\ud560 \uc218 \uc788\ub294\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e3a88667.958c50e7.js b/assets/js/e3a88667.958c50e7.js new file mode 100644 index 00000000..4a309885 --- /dev/null +++ b/assets/js/e3a88667.958c50e7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[5271],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),p=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return o.createElement(c.Provider,{value:t},e.children)},s="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},b=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),s=p(r),b=n,d=s["".concat(c,".").concat(b)]||s[b]||f[b]||i;return r?o.createElement(d,l(l({ref:t},u),{},{components:r})):o.createElement(d,l({ref:t},u))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,l=new Array(i);l[0]=b;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a[s]="string"==typeof e?e:n,l[1]=a;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>f,frontMatter:()=>i,metadata:()=>a,toc:()=>p});var o=r(7462),n=(r(7294),r(3905));const i={title:"1. Kubeflow Introduction",description:"",sidebar_position:1,contributors:["Jongseob Jeon"]},l=void 0,a={unversionedId:"kubeflow/kubeflow-intro",id:"version-1.0/kubeflow/kubeflow-intro",title:"1. Kubeflow Introduction",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/kubeflow-intro.md",sourceDirName:"kubeflow",slug:"/kubeflow/kubeflow-intro",permalink:"/docs/1.0/kubeflow/kubeflow-intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/kubeflow-intro.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Kubeflow Introduction",description:"",sidebar_position:1,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"6. Kubeflow Pipeline \uad00\ub828",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments-and-others"},next:{title:"2. Kubeflow Concepts",permalink:"/docs/1.0/kubeflow/kubeflow-concepts"}},c={},p=[],u={toc:p},s="wrapper";function f(e){let{components:t,...r}=e;return(0,n.kt)(s,(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Kubeflow\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8(Component)\uc640 \ud30c\uc774\ud504\ub77c\uc778(Pipeline)\uc744 \uc791\uc131\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,n.kt)("p",null,(0,n.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \ubc29\uc2dd\uc740 ",(0,n.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/pipelines/overview/quickstart/"},"Kubeflow Pipeline \uacf5\uc2dd \ud648\ud398\uc774\uc9c0"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \ubc29\uc2dd\uacfc\ub294 \ub2e4\uc18c \ucc28\uc774\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc5d0\uc11c\ub294 Kubeflow Pipeline\uc744 \uc6cc\ud06c\ud50c\ub85c(Workflow)\uac00 \uc544\ub2cc \uc55e\uc11c \uc124\uba85\ud55c ",(0,n.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/kubeflow-concepts#component-contents"},"MLOps\ub97c \uad6c\uc131\ud558\ub294 \uc694\uc18c")," \uc911 \ud558\ub098\uc758 \ucef4\ud3ec\ub10c\ud2b8\ub85c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,n.kt)("p",null,"\uadf8\ub7fc \uc774\uc81c \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ubb34\uc5c7\uc774\uba70 \uc5b4\ub5bb\uac8c \uc791\uc131\ud560 \uc218 \uc788\ub294\uc9c0 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e46e340c.15d4695c.js b/assets/js/e46e340c.15d4695c.js new file mode 100644 index 00000000..be6d990e --- /dev/null +++ b/assets/js/e46e340c.15d4695c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[204],{3905:(n,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>c});var t=a(7294);function r(n,e,a){return e in n?Object.defineProperty(n,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[e]=a,n}function l(n,e){var a=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),a.push.apply(a,t)}return a}function i(n){for(var e=1;e=0||(r[a]=n[a]);return r}(n,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(n);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(n,a)&&(r[a]=n[a])}return r}var o=t.createContext({}),s=function(n){var e=t.useContext(o),a=e;return n&&(a="function"==typeof n?n(e):i(i({},e),n)),a},d=function(n){var e=s(n.components);return t.createElement(o.Provider,{value:e},n.children)},m="mdxType",_={inlineCode:"code",wrapper:function(n){var e=n.children;return t.createElement(t.Fragment,{},e)}},u=t.forwardRef((function(n,e){var a=n.components,r=n.mdxType,l=n.originalType,o=n.parentName,d=p(n,["components","mdxType","originalType","parentName"]),m=s(a),u=r,c=m["".concat(o,".").concat(u)]||m[u]||_[u]||l;return a?t.createElement(c,i(i({ref:e},d),{},{components:a})):t.createElement(c,i({ref:e},d))}));function c(n,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof n||r){var l=a.length,i=new Array(l);i[0]=u;var p={};for(var o in e)hasOwnProperty.call(e,o)&&(p[o]=e[o]);p.originalType=n,p[m]="string"==typeof n?n:r,i[1]=p;for(var s=2;s{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>_,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var t=a(7462),r=(a(7294),a(3905));const l={title:"12. Component - MLFlow",description:"",sidebar_position:12,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jongseob Jeon","SeungTae Kim"]},i=void 0,p={unversionedId:"kubeflow/advanced-mlflow",id:"version-1.0/kubeflow/advanced-mlflow",title:"12. Component - MLFlow",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-mlflow.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-mlflow",permalink:"/docs/1.0/kubeflow/advanced-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-mlflow.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:12,frontMatter:{title:"12. Component - MLFlow",description:"",sidebar_position:12,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"11. Pipeline - Run Result",permalink:"/docs/1.0/kubeflow/advanced-run"},next:{title:"13. Component - Debugging",permalink:"/docs/1.0/kubeflow/how-to-debug"}},o={},s=[{value:"MLFlow Component",id:"mlflow-component",level:2},{value:"MLFlow in Local",id:"mlflow-in-local",level:2},{value:"1. \ubaa8\ub378 \ud559\uc2b5",id:"1-\ubaa8\ub378-\ud559\uc2b5",level:3},{value:"2. MLFLow Infos",id:"2-mlflow-infos",level:3},{value:"3. Save MLFLow Infos",id:"3-save-mlflow-infos",level:3},{value:"MLFlow on Server",id:"mlflow-on-server",level:2},{value:"MLFlow Component",id:"mlflow-component-1",level:2},{value:"MLFlow Pipeline",id:"mlflow-pipeline",level:2},{value:"Data Component",id:"data-component",level:3},{value:"Pipeline",id:"pipeline",level:3},{value:"Run",id:"run",level:3}],d={toc:s},m="wrapper";function _(n){let{components:e,...l}=n;return(0,r.kt)(m,(0,t.Z)({},d,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"mlflow-component"},"MLFlow Component"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-component"},"Advanced Usage Component")," \uc5d0\uc11c \ud559\uc2b5\ud55c \ubaa8\ub378\uc774 API Deployment\uae4c\uc9c0 \uc774\uc5b4\uc9c0\uae30 \uc704\ud574\uc11c\ub294 MLFlow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 MLFlow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud558\ub294 \uacfc\uc815\uc744 \uc124\uba85\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"mlflow-in-local"},"MLFlow in Local"),(0,r.kt)("p",null,"MLFlow\uc5d0\uc11c \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uace0 \uc11c\ube59\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uc758 \ud56d\ubaa9\ub4e4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"model"),(0,r.kt)("li",{parentName:"ul"},"signature"),(0,r.kt)("li",{parentName:"ul"},"input_example"),(0,r.kt)("li",{parentName:"ul"},"conda_env")),(0,r.kt)("p",null,"\ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \ud1b5\ud574\uc11c MLFLow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"1-\ubaa8\ub378-\ud559\uc2b5"},"1. \ubaa8\ub378 \ud559\uc2b5"),(0,r.kt)("p",null,"\uc544\ub798 \uacfc\uc815\uc740 iris \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 SVC \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import pandas as pd\nfrom sklearn.datasets import load_iris\nfrom sklearn.svm import SVC\n\niris = load_iris()\n\ndata = pd.DataFrame(iris["data"], columns=iris["feature_names"])\ntarget = pd.DataFrame(iris["target"], columns=["target"])\n\nclf = SVC(kernel="rbf")\nclf.fit(data, target)\n\n')),(0,r.kt)("h3",{id:"2-mlflow-infos"},"2. MLFLow Infos"),(0,r.kt)("p",null,"mlflow\uc5d0 \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \ub9cc\ub4dc\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from mlflow.models.signature import infer_signature\nfrom mlflow.utils.environment import _mlflow_conda_env\n\ninput_example = data.sample(1)\nsignature = infer_signature(data, clf.predict(data))\nconda_env = _mlflow_conda_env(additional_pip_deps=["dill", "pandas", "scikit-learn"])\n')),(0,r.kt)("p",null,"\uac01 \ubcc0\uc218\uc758 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"input_example")),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"sepal length (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"sepal width (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"petal length (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"petal width (cm)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6.5"),(0,r.kt)("td",{parentName:"tr",align:null},"6.7"),(0,r.kt)("td",{parentName:"tr",align:null},"3.1"),(0,r.kt)("td",{parentName:"tr",align:null},"4.4"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"signature")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"},"inputs:\n ['sepal length (cm)': double, 'sepal width (cm)': double, 'petal length (cm)': double, 'petal width (cm)': double]\noutputs:\n [Tensor('int64', (-1,))]\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"conda_env")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"},"{'name': 'mlflow-env',\n 'channels': ['conda-forge'],\n 'dependencies': ['python=3.8.10',\n 'pip',\n {'pip': ['mlflow', 'dill', 'pandas', 'scikit-learn']}]}\n")))),(0,r.kt)("h3",{id:"3-save-mlflow-infos"},"3. Save MLFLow Infos"),(0,r.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c \ud559\uc2b5\ud55c \uc815\ubcf4\ub4e4\uacfc \ubaa8\ub378\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4.\n\ud559\uc2b5\ud55c \ubaa8\ub378\uc774 sklearn \ud328\ud0a4\uc9c0\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow.sklearn")," \uc744 \uc774\uc6a9\ud558\uba74 \uc27d\uac8c \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from mlflow.sklearn import save_model\n\nsave_model(\n sk_model=clf,\n path="svc",\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n)\n')),(0,r.kt)("p",null,"\ub85c\uceec\uc5d0\uc11c \uc791\uc5c5\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 svc \ud3f4\ub354\uac00 \uc0dd\uae30\uba70 \uc544\ub798\uc640 \uac19\uc740 \ud30c\uc77c\ub4e4\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls svc\n")),(0,r.kt)("p",null,"\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uc758 \ucd9c\ub825\uac12\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"MLmodel conda.yaml input_example.json model.pkl requirements.txt\n")),(0,r.kt)("p",null,"\uac01 \ud30c\uc77c\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"MLmodel"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'flavors:\n python_function:\n env: conda.yaml\n loader_module: mlflow.sklearn\n model_path: model.pkl\n python_version: 3.8.10\n sklearn:\n pickled_model: model.pkl\n serialization_format: cloudpickle\n sklearn_version: 1.0.1\nsaved_input_example_info:\n artifact_path: input_example.json\n pandas_orient: split\n type: dataframe\nsignature:\n inputs: \'[{"name": "sepal length (cm)", "type": "double"}, {"name": "sepal width\n (cm)", "type": "double"}, {"name": "petal length (cm)", "type": "double"}, {"name":\n "petal width (cm)", "type": "double"}]\'\n outputs: \'[{"type": "tensor", "tensor-spec": {"dtype": "int64", "shape": [-1]}}]\'\nutc_time_created: \'2021-12-06 06:52:30.612810\'\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"conda.yaml"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"channels:\n- conda-forge\ndependencies:\n- python=3.8.10\n- pip\n- pip:\n - mlflow\n - dill\n - pandas\n - scikit-learn\nname: mlflow-env\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"input_example.json"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "columns": \n [\n "sepal length (cm)",\n "sepal width (cm)",\n "petal length (cm)",\n "petal width (cm)"\n ],\n "data": \n [\n [6.7, 3.1, 4.4, 1.4]\n ]\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"requirements.txt"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlflow\ndill\npandas\nscikit-learn\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"model.pkl"))),(0,r.kt)("h2",{id:"mlflow-on-server"},"MLFlow on Server"),(0,r.kt)("p",null,"\uc774\uc81c \uc800\uc7a5\ub41c \ubaa8\ub378\uc744 mlflow \uc11c\ubc84\uc5d0 \uc62c\ub9ac\ub294 \uc791\uc5c5\uc744 \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import mlflow\n\nwith mlflow.start_run():\n mlflow.log_artifact("svc/")\n')),(0,r.kt)("p",null,"\uc800\uc7a5\ud558\uace0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlruns")," \uac00 \uc0dd\uc131\ub41c \uacbd\ub85c\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow ui")," \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 mlflow \uc11c\ubc84\uc640 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ub744\uc6c1\ub2c8\ub2e4.\nmlflow \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc811\uc18d\ud558\uc5ec \uc0dd\uc131\ub41c run\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-0.png",src:a(3810).Z,width:"2782",height:"2496"}),"\n(\ud574\ub2f9 \ud654\uba74\uc740 mlflow \ubc84\uc804\uc5d0 \ub530\ub77c \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4.)"),(0,r.kt)("h2",{id:"mlflow-component-1"},"MLFlow Component"),(0,r.kt)("p",null,"\uc774\uc81c Kubeflow\uc5d0\uc11c \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc740 \ud06c\uac8c 3\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \ud544\uc694\ud55c \ud658\uacbd\uc744 \uc800\uc7a5 \ud6c4 MLFlow \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc5c5\ub85c\ub4dc\ub9cc \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-1.png",src:a(8705).Z,width:"578",height:"844"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud559\uc2b5\ub41c \ubaa8\ub378\uacfc \ub370\uc774\ud130\ub97c MLFlow \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \uc804\ub2ec \ud6c4 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc800\uc7a5\uacfc \uc5c5\ub85c\ub4dc \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-2.png",src:a(9481).Z,width:"900",height:"846"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc800\uc7a5\uacfc \uc5c5\ub85c\ub4dc\ub97c \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-3.png",src:a(3268).Z,width:"578",height:"406"})))),(0,r.kt)("p",null,"\uc800\ud76c\ub294 \uc774 \uc911 1\ubc88\uc758 \uc811\uadfc \ubc29\ubc95\uc744 \ud1b5\ud574 \ubaa8\ub378\uc744 \uad00\ub9ac\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.\n\uc774\uc720\ub294 MLFlow \ubaa8\ub378\uc744 \uc5c5\ub85c\ub4dc\ud558\ub294 \ucf54\ub4dc\ub294 \ubc14\ub00c\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ub9e4\ubc88 3\ubc88\ucc98\ub7fc \ucef4\ud3ec\ub10c\ud2b8 \uc791\uc131\ub9c8\ub2e4 \uc791\uc131\ud560 \ud544\uc694\ub294 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc7ac\ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 1\ubc88\uacfc 2\ubc88\uc758 \ubc29\ubc95\uc73c\ub85c \uac00\ub2a5\ud569\ub2c8\ub2e4.\n\ub2e4\ub9cc 2\ubc88\uc758 \uacbd\uc6b0 \ubaa8\ub378\uc774 \ud559\uc2b5\ub41c \uc774\ubbf8\uc9c0\uc640 \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc804\ub2ec\ud574\uc57c \ud558\ubbc0\ub85c \uacb0\uad6d \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \ucd94\uac00 \uc815\ubcf4\ub97c \uc804\ub2ec\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"1\ubc88\uc758 \ubc29\ubc95\uc73c\ub85c \uc9c4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub610\ud55c \ubcc0\uacbd\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294\ub370 \ud544\uc694\ud55c \ud658\uacbd\ub4e4\uc744 \uc800\uc7a5\ud574\uc8fc\ub294 \ucf54\ub4dc\uac00 \ucd94\uac00\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n')),(0,r.kt)("p",null,"\uadf8\ub9ac\uace0 MLFlow\uc5d0 \uc5c5\ub85c\ub4dc\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.\n\uc774 \ub54c \uc5c5\ub85c\ub4dc\ub418\ub294 MLflow\uc758 endpoint\ub97c \uc6b0\ub9ac\uac00 \uc124\uce58\ud55c ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-mlflow"},"mlflow service")," \ub85c \uc774\uc5b4\uc9c0\uac8c \uc124\uc815\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \ub54c S3 Endpoint\uc758 \uc8fc\uc18c\ub294 MLflow Server \uc124\uce58 \ub2f9\uc2dc \uc124\uce58\ud55c minio\uc758 ",(0,r.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/services-networking/dns-pod-service/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc11c\ube44\uc2a4 DNS \ub124\uc784\uc744 \ud65c\uc6a9"),"\ud569\ub2c8\ub2e4. \ud574\ub2f9 service \ub294 kubeflow namespace\uc5d0\uc11c minio-service\ub77c\ub294 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\uc73c\ubbc0\ub85c, ",(0,r.kt)("inlineCode",{parentName:"p"},"http://minio-service.kubeflow.svc:9000")," \ub85c \uc124\uc815\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\uc640 \ube44\uc2b7\ud558\uac8c tracking_uri\uc758 \uc8fc\uc18c\ub294 mlflow server\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc11c\ube44\uc2a4 DNS \ub124\uc784\uc744 \ud65c\uc6a9\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"http://mlflow-server-service.mlflow-system.svc:5000")," \ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n')),(0,r.kt)("h2",{id:"mlflow-pipeline"},"MLFlow Pipeline"),(0,r.kt)("p",null,"\uc774\uc81c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc5f0\uacb0\ud574\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"data-component"},"Data Component"),(0,r.kt)("p",null,"\ubaa8\ub378\uc744 \ud559\uc2b5\ud560 \ub54c \uc4f8 \ub370\uc774\ud130\ub294 sklearn\uc758 iris \uc785\ub2c8\ub2e4.\n\ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n')),(0,r.kt)("h3",{id:"pipeline"},"Pipeline"),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="mlflow_pipeline")\ndef mlflow_pipeline(kernel: str, model_name: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name=model_name,\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n')),(0,r.kt)("h3",{id:"run"},"Run"),(0,r.kt)("p",null,"\uc704\uc5d0\uc11c \uc791\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ud558\ub098\uc758 \ud30c\uc774\uc36c \ud30c\uc77c\uc5d0 \uc815\ub9ac\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n\n@pipeline(name="mlflow_pipeline")\ndef mlflow_pipeline(kernel: str, model_name: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name=model_name,\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(mlflow_pipeline, "mlflow_pipeline.yaml")\n')),(0,r.kt)("p",null,(0,r.kt)("details",null,(0,r.kt)("summary",null,"mlflow_pipeline.yaml"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: mlflow-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.10, pipelines.kubeflow.org/pipeline_compilation_time: \'2022-01-19T14:14:11.999807\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "kernel", "type":\n "String"}, {"name": "model_name", "type": "String"}], "name": "mlflow_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.10}\nspec:\n entrypoint: mlflow-pipeline\n templates:\n - name: load-iris-data\n container:\n args: [--data, /tmp/outputs/data/data, --target, /tmp/outputs/target/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'pandas\' \'scikit-learn\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'pandas\' \'scikit-learn\' --user)\n && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def load_iris_data(\n data_path,\n target_path,\n ):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Load iris data\', description=\'\')\n _parser.add_argument("--data", dest="data_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--target", dest="target_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = load_iris_data(**_parsed_args)\n image: python:3.7\n outputs:\n artifacts:\n - {name: load-iris-data-data, path: /tmp/outputs/data/data}\n - {name: load-iris-data-target, path: /tmp/outputs/target/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--data", {"outputPath": "data"}, "--target", {"outputPath": "target"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'pandas\'\' \'\'scikit-learn\'\' ||\n PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'\'pandas\'\' \'\'scikit-learn\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef load_iris_data(\\n data_path,\\n target_path,\\n):\\n import\n pandas as pd\\n from sklearn.datasets import load_iris\\n\\n iris = load_iris()\\n\\n data\n = pd.DataFrame(iris[\\"data\\"], columns=iris[\\"feature_names\\"])\\n target\n = pd.DataFrame(iris[\\"target\\"], columns=[\\"target\\"])\\n\\n data.to_csv(data_path,\n index=False)\\n target.to_csv(target_path, index=False)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Load iris data\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--data\\",\n dest=\\"data_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--target\\", dest=\\"target_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = load_iris_data(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "name": "Load iris data", "outputs": [{"name":\n "data", "type": "csv"}, {"name": "target", "type": "csv"}]}\', pipelines.kubeflow.org/component_ref: \'{}\'}\n - name: mlflow-pipeline\n inputs:\n parameters:\n - {name: kernel}\n - {name: model_name}\n dag:\n tasks:\n - {name: load-iris-data, template: load-iris-data}\n - name: train-from-csv\n template: train-from-csv\n dependencies: [load-iris-data]\n arguments:\n parameters:\n - {name: kernel, value: \'{{inputs.parameters.kernel}}\'}\n artifacts:\n - {name: load-iris-data-data, from: \'{{tasks.load-iris-data.outputs.artifacts.load-iris-data-data}}\'}\n - {name: load-iris-data-target, from: \'{{tasks.load-iris-data.outputs.artifacts.load-iris-data-target}}\'}\n - name: upload-sklearn-model-to-mlflow\n template: upload-sklearn-model-to-mlflow\n dependencies: [train-from-csv]\n arguments:\n parameters:\n - {name: model_name, value: \'{{inputs.parameters.model_name}}\'}\n artifacts:\n - {name: train-from-csv-conda_env, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-conda_env}}\'}\n - {name: train-from-csv-input_example, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-input_example}}\'}\n - {name: train-from-csv-model, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-model}}\'}\n - {name: train-from-csv-signature, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-signature}}\'}\n - name: train-from-csv\n container:\n args: [--train-data, /tmp/inputs/train_data/data, --train-target, /tmp/inputs/train_target/data,\n --kernel, \'{{inputs.parameters.kernel}}\', --model, /tmp/outputs/model/data,\n --input-example, /tmp/outputs/input_example/data, --signature, /tmp/outputs/signature/data,\n --conda-env, /tmp/outputs/conda_env/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill\' \'pandas\' \'scikit-learn\' \'mlflow\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill\' \'pandas\' \'scikit-learn\'\n \'mlflow\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n input_example_path,\n signature_path,\n conda_env_path,\n kernel,\n ):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--input-example", dest="input_example_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--signature", dest="signature_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--conda-env", dest="conda_env_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: kernel}\n artifacts:\n - {name: load-iris-data-data, path: /tmp/inputs/train_data/data}\n - {name: load-iris-data-target, path: /tmp/inputs/train_target/data}\n outputs:\n artifacts:\n - {name: train-from-csv-conda_env, path: /tmp/outputs/conda_env/data}\n - {name: train-from-csv-input_example, path: /tmp/outputs/input_example/data}\n - {name: train-from-csv-model, path: /tmp/outputs/model/data}\n - {name: train-from-csv-signature, path: /tmp/outputs/signature/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--train-data", {"inputPath": "train_data"}, "--train-target",\n {"inputPath": "train_target"}, "--kernel", {"inputValue": "kernel"}, "--model",\n {"outputPath": "model"}, "--input-example", {"outputPath": "input_example"},\n "--signature", {"outputPath": "signature"}, "--conda-env", {"outputPath":\n "conda_env"}], "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\'\n \'\'scikit-learn\'\' \'\'mlflow\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m\n pip install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\'\n \'\'mlflow\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef train_from_csv(\\n train_data_path,\\n train_target_path,\\n model_path,\\n input_example_path,\\n signature_path,\\n conda_env_path,\\n kernel,\\n):\\n import\n dill\\n import pandas as pd\\n from sklearn.svm import SVC\\n\\n from\n mlflow.models.signature import infer_signature\\n from mlflow.utils.environment\n import _mlflow_conda_env\\n\\n train_data = pd.read_csv(train_data_path)\\n train_target\n = pd.read_csv(train_target_path)\\n\\n clf = SVC(kernel=kernel)\\n clf.fit(train_data,\n train_target)\\n\\n with open(model_path, mode=\\"wb\\") as file_writer:\\n dill.dump(clf,\n file_writer)\\n\\n input_example = train_data.sample(1)\\n with open(input_example_path,\n \\"wb\\") as file_writer:\\n dill.dump(input_example, file_writer)\\n\\n signature\n = infer_signature(train_data, clf.predict(train_data))\\n with open(signature_path,\n \\"wb\\") as file_writer:\\n dill.dump(signature, file_writer)\\n\\n conda_env\n = _mlflow_conda_env(\\n additional_pip_deps=[\\"dill\\", \\"pandas\\",\n \\"scikit-learn\\"]\\n )\\n with open(conda_env_path, \\"wb\\") as file_writer:\\n dill.dump(conda_env,\n file_writer)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Train\n from csv\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--train-data\\", dest=\\"train_data_path\\",\n type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--train-target\\",\n dest=\\"train_target_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--kernel\\",\n dest=\\"kernel\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--model\\",\n dest=\\"model_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--input-example\\", dest=\\"input_example_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--signature\\",\n dest=\\"signature_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--conda-env\\", dest=\\"conda_env_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = train_from_csv(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "train_data", "type": "csv"},\n {"name": "train_target", "type": "csv"}, {"name": "kernel", "type": "String"}],\n "name": "Train from csv", "outputs": [{"name": "model", "type": "dill"},\n {"name": "input_example", "type": "dill"}, {"name": "signature", "type":\n "dill"}, {"name": "conda_env", "type": "dill"}]}\', pipelines.kubeflow.org/component_ref: \'{}\',\n pipelines.kubeflow.org/arguments.parameters: \'{"kernel": "{{inputs.parameters.kernel}}"}\'}\n - name: upload-sklearn-model-to-mlflow\n container:\n args: [--model-name, \'{{inputs.parameters.model_name}}\', --model, /tmp/inputs/model/data,\n --input-example, /tmp/inputs/input_example/data, --signature, /tmp/inputs/signature/data,\n --conda-env, /tmp/inputs/conda_env/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill\' \'pandas\' \'scikit-learn\' \'mlflow\' \'boto3\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill\' \'pandas\' \'scikit-learn\'\n \'mlflow\' \'boto3\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def upload_sklearn_model_to_mlflow(\n model_name,\n model_path,\n input_example_path,\n signature_path,\n conda_env_path,\n ):\n import os\n import dill\n from mlflow.sklearn import save_model\n\n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Upload sklearn model to mlflow\', description=\'\')\n _parser.add_argument("--model-name", dest="model_name", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--input-example", dest="input_example_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--signature", dest="signature_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--conda-env", dest="conda_env_path", type=str, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = upload_sklearn_model_to_mlflow(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: model_name}\n artifacts:\n - {name: train-from-csv-conda_env, path: /tmp/inputs/conda_env/data}\n - {name: train-from-csv-input_example, path: /tmp/inputs/input_example/data}\n - {name: train-from-csv-model, path: /tmp/inputs/model/data}\n - {name: train-from-csv-signature, path: /tmp/inputs/signature/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--model-name", {"inputValue": "model_name"}, "--model", {"inputPath":\n "model"}, "--input-example", {"inputPath": "input_example"}, "--signature",\n {"inputPath": "signature"}, "--conda-env", {"inputPath": "conda_env"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\'\n \'\'mlflow\'\' \'\'boto3\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install\n --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\' \'\'mlflow\'\'\n \'\'boto3\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def upload_sklearn_model_to_mlflow(\\n model_name,\\n model_path,\\n input_example_path,\\n signature_path,\\n conda_env_path,\\n):\\n import\n os\\n import dill\\n from mlflow.sklearn import save_model\\n\\n from\n mlflow.tracking.client import MlflowClient\\n\\n os.environ[\\"MLFLOW_S3_ENDPOINT_URL\\"]\n = \\"http://minio-service.kubeflow.svc:9000\\"\\n os.environ[\\"AWS_ACCESS_KEY_ID\\"]\n = \\"minio\\"\\n os.environ[\\"AWS_SECRET_ACCESS_KEY\\"] = \\"minio123\\"\\n\\n client\n = MlflowClient(\\"http://mlflow-server-service.mlflow-system.svc:5000\\")\\n\\n with\n open(model_path, mode=\\"rb\\") as file_reader:\\n clf = dill.load(file_reader)\\n\\n with\n open(input_example_path, \\"rb\\") as file_reader:\\n input_example\n = dill.load(file_reader)\\n\\n with open(signature_path, \\"rb\\") as file_reader:\\n signature\n = dill.load(file_reader)\\n\\n with open(conda_env_path, \\"rb\\") as file_reader:\\n conda_env\n = dill.load(file_reader)\\n\\n save_model(\\n sk_model=clf,\\n path=model_name,\\n serialization_format=\\"cloudpickle\\",\\n conda_env=conda_env,\\n signature=signature,\\n input_example=input_example,\\n )\\n run\n = client.create_run(experiment_id=\\"0\\")\\n client.log_artifact(run.info.run_id,\n model_name)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Upload\n sklearn model to mlflow\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--model-name\\",\n dest=\\"model_name\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--model\\",\n dest=\\"model_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--input-example\\",\n dest=\\"input_example_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--signature\\",\n dest=\\"signature_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--conda-env\\",\n dest=\\"conda_env_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = upload_sklearn_model_to_mlflow(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "model_name", "type": "String"},\n {"name": "model", "type": "dill"}, {"name": "input_example", "type": "dill"},\n {"name": "signature", "type": "dill"}, {"name": "conda_env", "type": "dill"}],\n "name": "Upload sklearn model to mlflow"}\', pipelines.kubeflow.org/component_ref: \'{}\',\n pipelines.kubeflow.org/arguments.parameters: \'{"model_name": "{{inputs.parameters.model_name}}"}\'}\n arguments:\n parameters:\n - {name: kernel}\n - {name: model_name}\n serviceAccountName: pipeline-runner\n')))),(0,r.kt)("p",null,"\uc2e4\ud589\ud6c4 \uc0dd\uc131\ub41c mlflow_pipeline.yaml \ud30c\uc77c\uc744 \ud30c\uc774\ud504\ub77c\uc778 \uc5c5\ub85c\ub4dc\ud55c \ud6c4, \uc2e4\ud589\ud558\uc5ec run \uc758 \uacb0\uacfc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-0",src:a(1822).Z,width:"3408",height:"2156"})),(0,r.kt)("p",null,"mlflow service\ub97c \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud574\uc11c MLflow ui\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/mlflow-server-service -n mlflow-system 5000:5000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 localhost:5000\uc73c\ub85c \uc811\uc18d\ud558\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 run\uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-1",src:a(339).Z,width:"3360",height:"2100"})),(0,r.kt)("p",null,"run \uc744 \ud074\ub9ad\ud574\uc11c \ud655\uc778\ud558\uba74 \ud559\uc2b5\ud55c \ubaa8\ub378 \ud30c\uc77c\uc774 \uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-2",src:a(7463).Z,width:"3360",height:"2100"})))}_.isMDXComponent=!0},3810:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-0-95d5ec759ef43b21c9c3b22abb64366d.png"},8705:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-1-a096f3eda2246a1c132fc13ce3180ef5.png"},9481:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-2-3cd7cf7e2c853a1242cff7c65e56cf3f.png"},3268:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-3-8b187057bb18f27b1744656ef6d045a1.png"},1822:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-0-ab6c5d7f00bf643c36d236155dc5eb9c.png"},339:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-1-7723b8f92fb8cea2ff99b8f4639ff0c6.png"},7463:(n,e,a)=>{a.d(e,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-2-8b696bd65a922f949877102bbfdafc42.png"}}]); \ No newline at end of file diff --git a/assets/js/e46e340c.fa0acf61.js b/assets/js/e46e340c.fa0acf61.js deleted file mode 100644 index 555a1cfa..00000000 --- a/assets/js/e46e340c.fa0acf61.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[204],{3905:(e,n,a)=>{a.d(n,{Zo:()=>d,kt:()=>c});var t=a(7294);function r(e,n,a){return n in e?Object.defineProperty(e,n,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[n]=a,e}function l(e,n){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),a.push.apply(a,t)}return a}function i(e){for(var n=1;n=0||(r[a]=e[a]);return r}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=t.createContext({}),s=function(e){var n=t.useContext(o),a=n;return e&&(a="function"==typeof e?e(n):i(i({},n),e)),a},d=function(e){var n=s(e.components);return t.createElement(o.Provider,{value:n},e.children)},m="mdxType",_={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},u=t.forwardRef((function(e,n){var a=e.components,r=e.mdxType,l=e.originalType,o=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),m=s(a),u=r,c=m["".concat(o,".").concat(u)]||m[u]||_[u]||l;return a?t.createElement(c,i(i({ref:n},d),{},{components:a})):t.createElement(c,i({ref:n},d))}));function c(e,n){var a=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=u;var p={};for(var o in n)hasOwnProperty.call(n,o)&&(p[o]=n[o]);p.originalType=e,p[m]="string"==typeof e?e:r,i[1]=p;for(var s=2;s{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>_,frontMatter:()=>l,metadata:()=>p,toc:()=>s});var t=a(7462),r=(a(7294),a(3905));const l={title:"12. Component - MLFlow",description:"",sidebar_position:12,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jongseob Jeon","SeungTae Kim"]},i=void 0,p={unversionedId:"kubeflow/advanced-mlflow",id:"version-1.0/kubeflow/advanced-mlflow",title:"12. Component - MLFlow",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-mlflow.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-mlflow",permalink:"/docs/1.0/kubeflow/advanced-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-mlflow.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:12,frontMatter:{title:"12. Component - MLFlow",description:"",sidebar_position:12,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"11. Pipeline - Run Result",permalink:"/docs/1.0/kubeflow/advanced-run"},next:{title:"13. Component - Debugging",permalink:"/docs/1.0/kubeflow/how-to-debug"}},o={},s=[{value:"MLFlow Component",id:"mlflow-component",level:2},{value:"MLFlow in Local",id:"mlflow-in-local",level:2},{value:"1. \ubaa8\ub378 \ud559\uc2b5",id:"1-\ubaa8\ub378-\ud559\uc2b5",level:3},{value:"2. MLFLow Infos",id:"2-mlflow-infos",level:3},{value:"3. Save MLFLow Infos",id:"3-save-mlflow-infos",level:3},{value:"MLFlow on Server",id:"mlflow-on-server",level:2},{value:"MLFlow Component",id:"mlflow-component-1",level:2},{value:"MLFlow Pipeline",id:"mlflow-pipeline",level:2},{value:"Data Component",id:"data-component",level:3},{value:"Pipeline",id:"pipeline",level:3},{value:"Run",id:"run",level:3}],d={toc:s},m="wrapper";function _(e){let{components:n,...l}=e;return(0,r.kt)(m,(0,t.Z)({},d,l,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"mlflow-component"},"MLFlow Component"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/advanced-component"},"Advanced Usage Component")," \uc5d0\uc11c \ud559\uc2b5\ud55c \ubaa8\ub378\uc774 API Deployment\uae4c\uc9c0 \uc774\uc5b4\uc9c0\uae30 \uc704\ud574\uc11c\ub294 MLFlow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 MLFlow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud558\ub294 \uacfc\uc815\uc744 \uc124\uba85\ud569\ub2c8\ub2e4."),(0,r.kt)("h2",{id:"mlflow-in-local"},"MLFlow in Local"),(0,r.kt)("p",null,"MLFlow\uc5d0\uc11c \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\uace0 \uc11c\ube59\uc5d0\uc11c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub2e4\uc74c\uc758 \ud56d\ubaa9\ub4e4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"model"),(0,r.kt)("li",{parentName:"ul"},"signature"),(0,r.kt)("li",{parentName:"ul"},"input_example"),(0,r.kt)("li",{parentName:"ul"},"conda_env")),(0,r.kt)("p",null,"\ud30c\uc774\uc36c \ucf54\ub4dc\ub97c \ud1b5\ud574\uc11c MLFLow\uc5d0 \ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"1-\ubaa8\ub378-\ud559\uc2b5"},"1. \ubaa8\ub378 \ud559\uc2b5"),(0,r.kt)("p",null,"\uc544\ub798 \uacfc\uc815\uc740 iris \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 SVC \ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import pandas as pd\nfrom sklearn.datasets import load_iris\nfrom sklearn.svm import SVC\n\niris = load_iris()\n\ndata = pd.DataFrame(iris["data"], columns=iris["feature_names"])\ntarget = pd.DataFrame(iris["target"], columns=["target"])\n\nclf = SVC(kernel="rbf")\nclf.fit(data, target)\n\n')),(0,r.kt)("h3",{id:"2-mlflow-infos"},"2. MLFLow Infos"),(0,r.kt)("p",null,"mlflow\uc5d0 \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \ub9cc\ub4dc\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from mlflow.models.signature import infer_signature\nfrom mlflow.utils.environment import _mlflow_conda_env\n\ninput_example = data.sample(1)\nsignature = infer_signature(data, clf.predict(data))\nconda_env = _mlflow_conda_env(additional_pip_deps=["dill", "pandas", "scikit-learn"])\n')),(0,r.kt)("p",null,"\uac01 \ubcc0\uc218\uc758 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"input_example")),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"sepal length (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"sepal width (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"petal length (cm)"),(0,r.kt)("th",{parentName:"tr",align:null},"petal width (cm)"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"6.5"),(0,r.kt)("td",{parentName:"tr",align:null},"6.7"),(0,r.kt)("td",{parentName:"tr",align:null},"3.1"),(0,r.kt)("td",{parentName:"tr",align:null},"4.4"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"signature")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"},"inputs:\n ['sepal length (cm)': double, 'sepal width (cm)': double, 'petal length (cm)': double, 'petal width (cm)': double]\noutputs:\n [Tensor('int64', (-1,))]\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"conda_env")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-python"},"{'name': 'mlflow-env',\n 'channels': ['conda-forge'],\n 'dependencies': ['python=3.8.10',\n 'pip',\n {'pip': ['mlflow', 'dill', 'pandas', 'scikit-learn']}]}\n")))),(0,r.kt)("h3",{id:"3-save-mlflow-infos"},"3. Save MLFLow Infos"),(0,r.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c \ud559\uc2b5\ud55c \uc815\ubcf4\ub4e4\uacfc \ubaa8\ub378\uc744 \uc800\uc7a5\ud569\ub2c8\ub2e4.\n\ud559\uc2b5\ud55c \ubaa8\ub378\uc774 sklearn \ud328\ud0a4\uc9c0\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow.sklearn")," \uc744 \uc774\uc6a9\ud558\uba74 \uc27d\uac8c \ubaa8\ub378\uc744 \uc800\uc7a5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from mlflow.sklearn import save_model\n\nsave_model(\n sk_model=clf,\n path="svc",\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n)\n')),(0,r.kt)("p",null,"\ub85c\uceec\uc5d0\uc11c \uc791\uc5c5\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 svc \ud3f4\ub354\uac00 \uc0dd\uae30\uba70 \uc544\ub798\uc640 \uac19\uc740 \ud30c\uc77c\ub4e4\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls svc\n")),(0,r.kt)("p",null,"\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uba74 \ub2e4\uc74c\uc758 \ucd9c\ub825\uac12\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"MLmodel conda.yaml input_example.json model.pkl requirements.txt\n")),(0,r.kt)("p",null,"\uac01 \ud30c\uc77c\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"MLmodel"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'flavors:\n python_function:\n env: conda.yaml\n loader_module: mlflow.sklearn\n model_path: model.pkl\n python_version: 3.8.10\n sklearn:\n pickled_model: model.pkl\n serialization_format: cloudpickle\n sklearn_version: 1.0.1\nsaved_input_example_info:\n artifact_path: input_example.json\n pandas_orient: split\n type: dataframe\nsignature:\n inputs: \'[{"name": "sepal length (cm)", "type": "double"}, {"name": "sepal width\n (cm)", "type": "double"}, {"name": "petal length (cm)", "type": "double"}, {"name":\n "petal width (cm)", "type": "double"}]\'\n outputs: \'[{"type": "tensor", "tensor-spec": {"dtype": "int64", "shape": [-1]}}]\'\nutc_time_created: \'2021-12-06 06:52:30.612810\'\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"conda.yaml"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"channels:\n- conda-forge\ndependencies:\n- python=3.8.10\n- pip\n- pip:\n - mlflow\n - dill\n - pandas\n - scikit-learn\nname: mlflow-env\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"input_example.json"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'{\n "columns": \n [\n "sepal length (cm)",\n "sepal width (cm)",\n "petal length (cm)",\n "petal width (cm)"\n ],\n "data": \n [\n [6.7, 3.1, 4.4, 1.4]\n ]\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"requirements.txt"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlflow\ndill\npandas\nscikit-learn\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"model.pkl"))),(0,r.kt)("h2",{id:"mlflow-on-server"},"MLFlow on Server"),(0,r.kt)("p",null,"\uc774\uc81c \uc800\uc7a5\ub41c \ubaa8\ub378\uc744 mlflow \uc11c\ubc84\uc5d0 \uc62c\ub9ac\ub294 \uc791\uc5c5\uc744 \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import mlflow\n\nwith mlflow.start_run():\n mlflow.log_artifact("svc/")\n')),(0,r.kt)("p",null,"\uc800\uc7a5\ud558\uace0 ",(0,r.kt)("inlineCode",{parentName:"p"},"mlruns")," \uac00 \uc0dd\uc131\ub41c \uacbd\ub85c\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},"mlflow ui")," \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud574 mlflow \uc11c\ubc84\uc640 \ub300\uc2dc\ubcf4\ub4dc\ub97c \ub744\uc6c1\ub2c8\ub2e4.\nmlflow \ub300\uc2dc\ubcf4\ub4dc\uc5d0 \uc811\uc18d\ud558\uc5ec \uc0dd\uc131\ub41c run\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcf4\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-0.png",src:a(3810).Z,width:"2782",height:"2496"}),"\n(\ud574\ub2f9 \ud654\uba74\uc740 mlflow \ubc84\uc804\uc5d0 \ub530\ub77c \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4.)"),(0,r.kt)("h2",{id:"mlflow-component-1"},"MLFlow Component"),(0,r.kt)("p",null,"\uc774\uc81c Kubeflow\uc5d0\uc11c \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,"\uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud558\ub294 \ubc29\ubc95\uc740 \ud06c\uac8c 3\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \ud544\uc694\ud55c \ud658\uacbd\uc744 \uc800\uc7a5 \ud6c4 MLFlow \ucef4\ud3ec\ub10c\ud2b8\ub294 \uc5c5\ub85c\ub4dc\ub9cc \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-1.png",src:a(8705).Z,width:"578",height:"844"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud559\uc2b5\ub41c \ubaa8\ub378\uacfc \ub370\uc774\ud130\ub97c MLFlow \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \uc804\ub2ec \ud6c4 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc800\uc7a5\uacfc \uc5c5\ub85c\ub4dc \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-2.png",src:a(9481).Z,width:"900",height:"846"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ubaa8\ub378\uc744 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc800\uc7a5\uacfc \uc5c5\ub85c\ub4dc\ub97c \ub2f4\ub2f9"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"mlflow-3.png",src:a(3268).Z,width:"578",height:"406"})))),(0,r.kt)("p",null,"\uc800\ud76c\ub294 \uc774 \uc911 1\ubc88\uc758 \uc811\uadfc \ubc29\ubc95\uc744 \ud1b5\ud574 \ubaa8\ub378\uc744 \uad00\ub9ac\ud558\ub824\uace0 \ud569\ub2c8\ub2e4.\n\uc774\uc720\ub294 MLFlow \ubaa8\ub378\uc744 \uc5c5\ub85c\ub4dc\ud558\ub294 \ucf54\ub4dc\ub294 \ubc14\ub00c\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ub9e4\ubc88 3\ubc88\ucc98\ub7fc \ucef4\ud3ec\ub10c\ud2b8 \uc791\uc131\ub9c8\ub2e4 \uc791\uc131\ud560 \ud544\uc694\ub294 \uc5c6\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,r.kt)("p",null,"\ucef4\ud3ec\ub10c\ud2b8\ub97c \uc7ac\ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 1\ubc88\uacfc 2\ubc88\uc758 \ubc29\ubc95\uc73c\ub85c \uac00\ub2a5\ud569\ub2c8\ub2e4.\n\ub2e4\ub9cc 2\ubc88\uc758 \uacbd\uc6b0 \ubaa8\ub378\uc774 \ud559\uc2b5\ub41c \uc774\ubbf8\uc9c0\uc640 \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc804\ub2ec\ud574\uc57c \ud558\ubbc0\ub85c \uacb0\uad6d \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \ucd94\uac00 \uc815\ubcf4\ub97c \uc804\ub2ec\ud574\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,"1\ubc88\uc758 \ubc29\ubc95\uc73c\ub85c \uc9c4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 \ud559\uc2b5\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8 \ub610\ud55c \ubcc0\uacbd\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ubaa8\ub378\uc744 \uc800\uc7a5\ud558\ub294\ub370 \ud544\uc694\ud55c \ud658\uacbd\ub4e4\uc744 \uc800\uc7a5\ud574\uc8fc\ub294 \ucf54\ub4dc\uac00 \ucd94\uac00\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n')),(0,r.kt)("p",null,"\uadf8\ub9ac\uace0 MLFlow\uc5d0 \uc5c5\ub85c\ub4dc\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.\n\uc774 \ub54c \uc5c5\ub85c\ub4dc\ub418\ub294 MLflow\uc758 endpoint\ub97c \uc6b0\ub9ac\uac00 \uc124\uce58\ud55c ",(0,r.kt)("a",{parentName:"p",href:"/docs/1.0/setup-components/install-components-mlflow"},"mlflow service")," \ub85c \uc774\uc5b4\uc9c0\uac8c \uc124\uc815\ud574\uc8fc\uc5b4\uc57c \ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774 \ub54c S3 Endpoint\uc758 \uc8fc\uc18c\ub294 MLflow Server \uc124\uce58 \ub2f9\uc2dc \uc124\uce58\ud55c minio\uc758 ",(0,r.kt)("a",{parentName:"p",href:"https://kubernetes.io/ko/docs/concepts/services-networking/dns-pod-service/"},"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc11c\ube44\uc2a4 DNS \ub124\uc784\uc744 \ud65c\uc6a9"),"\ud569\ub2c8\ub2e4. \ud574\ub2f9 service \ub294 kubeflow namespace\uc5d0\uc11c minio-service\ub77c\ub294 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\uc73c\ubbc0\ub85c, ",(0,r.kt)("inlineCode",{parentName:"p"},"http://minio-service.kubeflow.svc:9000")," \ub85c \uc124\uc815\ud569\ub2c8\ub2e4.",(0,r.kt)("br",{parentName:"p"}),"\n","\uc774\uc640 \ube44\uc2b7\ud558\uac8c tracking_uri\uc758 \uc8fc\uc18c\ub294 mlflow server\uc758 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uc11c\ube44\uc2a4 DNS \ub124\uc784\uc744 \ud65c\uc6a9\ud558\uc5ec, ",(0,r.kt)("inlineCode",{parentName:"p"},"http://mlflow-server-service.mlflow-system.svc:5000")," \ub85c \uc124\uc815\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\nfrom kfp.components import InputPath, create_component_from_func\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n')),(0,r.kt)("h2",{id:"mlflow-pipeline"},"MLFlow Pipeline"),(0,r.kt)("p",null,"\uc774\uc81c \uc791\uc131\ud55c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc5f0\uacb0\ud574\uc11c \ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"data-component"},"Data Component"),(0,r.kt)("p",null,"\ubaa8\ub378\uc744 \ud559\uc2b5\ud560 \ub54c \uc4f8 \ub370\uc774\ud130\ub294 sklearn\uc758 iris \uc785\ub2c8\ub2e4.\n\ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n')),(0,r.kt)("h3",{id:"pipeline"},"Pipeline"),(0,r.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from kfp.dsl import pipeline\n\n\n@pipeline(name="mlflow_pipeline")\ndef mlflow_pipeline(kernel: str, model_name: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name=model_name,\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n')),(0,r.kt)("h3",{id:"run"},"Run"),(0,r.kt)("p",null,"\uc704\uc5d0\uc11c \uc791\uc131\ub41c \ucef4\ud3ec\ub10c\ud2b8\uc640 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ud558\ub098\uc758 \ud30c\uc774\uc36c \ud30c\uc77c\uc5d0 \uc815\ub9ac\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import InputPath, OutputPath, create_component_from_func\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["pandas", "scikit-learn"],\n)\ndef load_iris_data(\n data_path: OutputPath("csv"),\n target_path: OutputPath("csv"),\n):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow"],\n)\ndef train_from_csv(\n train_data_path: InputPath("csv"),\n train_target_path: InputPath("csv"),\n model_path: OutputPath("dill"),\n input_example_path: OutputPath("dill"),\n signature_path: OutputPath("dill"),\n conda_env_path: OutputPath("dill"),\n kernel: str,\n):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["dill", "pandas", "scikit-learn", "mlflow", "boto3"],\n)\ndef upload_sklearn_model_to_mlflow(\n model_name: str,\n model_path: InputPath("dill"),\n input_example_path: InputPath("dill"),\n signature_path: InputPath("dill"),\n conda_env_path: InputPath("dill"),\n):\n import os\n import dill\n from mlflow.sklearn import save_model\n \n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n\n@pipeline(name="mlflow_pipeline")\ndef mlflow_pipeline(kernel: str, model_name: str):\n iris_data = load_iris_data()\n model = train_from_csv(\n train_data=iris_data.outputs["data"],\n train_target=iris_data.outputs["target"],\n kernel=kernel,\n )\n _ = upload_sklearn_model_to_mlflow(\n model_name=model_name,\n model=model.outputs["model"],\n input_example=model.outputs["input_example"],\n signature=model.outputs["signature"],\n conda_env=model.outputs["conda_env"],\n )\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(mlflow_pipeline, "mlflow_pipeline.yaml")\n')),(0,r.kt)("p",null,(0,r.kt)("details",null,(0,r.kt)("summary",null,"mlflow_pipeline.yaml"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: mlflow-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.10, pipelines.kubeflow.org/pipeline_compilation_time: \'2022-01-19T14:14:11.999807\',\n pipelines.kubeflow.org/pipeline_spec: \'{"inputs": [{"name": "kernel", "type":\n "String"}, {"name": "model_name", "type": "String"}], "name": "mlflow_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.10}\nspec:\n entrypoint: mlflow-pipeline\n templates:\n - name: load-iris-data\n container:\n args: [--data, /tmp/outputs/data/data, --target, /tmp/outputs/target/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'pandas\' \'scikit-learn\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'pandas\' \'scikit-learn\' --user)\n && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def load_iris_data(\n data_path,\n target_path,\n ):\n import pandas as pd\n from sklearn.datasets import load_iris\n\n iris = load_iris()\n\n data = pd.DataFrame(iris["data"], columns=iris["feature_names"])\n target = pd.DataFrame(iris["target"], columns=["target"])\n\n data.to_csv(data_path, index=False)\n target.to_csv(target_path, index=False)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Load iris data\', description=\'\')\n _parser.add_argument("--data", dest="data_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--target", dest="target_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = load_iris_data(**_parsed_args)\n image: python:3.7\n outputs:\n artifacts:\n - {name: load-iris-data-data, path: /tmp/outputs/data/data}\n - {name: load-iris-data-target, path: /tmp/outputs/target/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--data", {"outputPath": "data"}, "--target", {"outputPath": "target"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'pandas\'\' \'\'scikit-learn\'\' ||\n PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'\'pandas\'\' \'\'scikit-learn\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef load_iris_data(\\n data_path,\\n target_path,\\n):\\n import\n pandas as pd\\n from sklearn.datasets import load_iris\\n\\n iris = load_iris()\\n\\n data\n = pd.DataFrame(iris[\\"data\\"], columns=iris[\\"feature_names\\"])\\n target\n = pd.DataFrame(iris[\\"target\\"], columns=[\\"target\\"])\\n\\n data.to_csv(data_path,\n index=False)\\n target.to_csv(target_path, index=False)\\n\\nimport argparse\\n_parser\n = argparse.ArgumentParser(prog=\'\'Load iris data\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--data\\",\n dest=\\"data_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--target\\", dest=\\"target_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = load_iris_data(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "name": "Load iris data", "outputs": [{"name":\n "data", "type": "csv"}, {"name": "target", "type": "csv"}]}\', pipelines.kubeflow.org/component_ref: \'{}\'}\n - name: mlflow-pipeline\n inputs:\n parameters:\n - {name: kernel}\n - {name: model_name}\n dag:\n tasks:\n - {name: load-iris-data, template: load-iris-data}\n - name: train-from-csv\n template: train-from-csv\n dependencies: [load-iris-data]\n arguments:\n parameters:\n - {name: kernel, value: \'{{inputs.parameters.kernel}}\'}\n artifacts:\n - {name: load-iris-data-data, from: \'{{tasks.load-iris-data.outputs.artifacts.load-iris-data-data}}\'}\n - {name: load-iris-data-target, from: \'{{tasks.load-iris-data.outputs.artifacts.load-iris-data-target}}\'}\n - name: upload-sklearn-model-to-mlflow\n template: upload-sklearn-model-to-mlflow\n dependencies: [train-from-csv]\n arguments:\n parameters:\n - {name: model_name, value: \'{{inputs.parameters.model_name}}\'}\n artifacts:\n - {name: train-from-csv-conda_env, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-conda_env}}\'}\n - {name: train-from-csv-input_example, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-input_example}}\'}\n - {name: train-from-csv-model, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-model}}\'}\n - {name: train-from-csv-signature, from: \'{{tasks.train-from-csv.outputs.artifacts.train-from-csv-signature}}\'}\n - name: train-from-csv\n container:\n args: [--train-data, /tmp/inputs/train_data/data, --train-target, /tmp/inputs/train_target/data,\n --kernel, \'{{inputs.parameters.kernel}}\', --model, /tmp/outputs/model/data,\n --input-example, /tmp/outputs/input_example/data, --signature, /tmp/outputs/signature/data,\n --conda-env, /tmp/outputs/conda_env/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill\' \'pandas\' \'scikit-learn\' \'mlflow\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill\' \'pandas\' \'scikit-learn\'\n \'mlflow\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n\n def train_from_csv(\n train_data_path,\n train_target_path,\n model_path,\n input_example_path,\n signature_path,\n conda_env_path,\n kernel,\n ):\n import dill\n import pandas as pd\n from sklearn.svm import SVC\n\n from mlflow.models.signature import infer_signature\n from mlflow.utils.environment import _mlflow_conda_env\n\n train_data = pd.read_csv(train_data_path)\n train_target = pd.read_csv(train_target_path)\n\n clf = SVC(kernel=kernel)\n clf.fit(train_data, train_target)\n\n with open(model_path, mode="wb") as file_writer:\n dill.dump(clf, file_writer)\n\n input_example = train_data.sample(1)\n with open(input_example_path, "wb") as file_writer:\n dill.dump(input_example, file_writer)\n\n signature = infer_signature(train_data, clf.predict(train_data))\n with open(signature_path, "wb") as file_writer:\n dill.dump(signature, file_writer)\n\n conda_env = _mlflow_conda_env(\n additional_pip_deps=["dill", "pandas", "scikit-learn"]\n )\n with open(conda_env_path, "wb") as file_writer:\n dill.dump(conda_env, file_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Train from csv\', description=\'\')\n _parser.add_argument("--train-data", dest="train_data_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--train-target", dest="train_target_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--kernel", dest="kernel", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--input-example", dest="input_example_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--signature", dest="signature_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--conda-env", dest="conda_env_path", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = train_from_csv(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: kernel}\n artifacts:\n - {name: load-iris-data-data, path: /tmp/inputs/train_data/data}\n - {name: load-iris-data-target, path: /tmp/inputs/train_target/data}\n outputs:\n artifacts:\n - {name: train-from-csv-conda_env, path: /tmp/outputs/conda_env/data}\n - {name: train-from-csv-input_example, path: /tmp/outputs/input_example/data}\n - {name: train-from-csv-model, path: /tmp/outputs/model/data}\n - {name: train-from-csv-signature, path: /tmp/outputs/signature/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--train-data", {"inputPath": "train_data"}, "--train-target",\n {"inputPath": "train_target"}, "--kernel", {"inputValue": "kernel"}, "--model",\n {"outputPath": "model"}, "--input-example", {"outputPath": "input_example"},\n "--signature", {"outputPath": "signature"}, "--conda-env", {"outputPath":\n "conda_env"}], "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\'\n \'\'scikit-learn\'\' \'\'mlflow\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m\n pip install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\'\n \'\'mlflow\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef train_from_csv(\\n train_data_path,\\n train_target_path,\\n model_path,\\n input_example_path,\\n signature_path,\\n conda_env_path,\\n kernel,\\n):\\n import\n dill\\n import pandas as pd\\n from sklearn.svm import SVC\\n\\n from\n mlflow.models.signature import infer_signature\\n from mlflow.utils.environment\n import _mlflow_conda_env\\n\\n train_data = pd.read_csv(train_data_path)\\n train_target\n = pd.read_csv(train_target_path)\\n\\n clf = SVC(kernel=kernel)\\n clf.fit(train_data,\n train_target)\\n\\n with open(model_path, mode=\\"wb\\") as file_writer:\\n dill.dump(clf,\n file_writer)\\n\\n input_example = train_data.sample(1)\\n with open(input_example_path,\n \\"wb\\") as file_writer:\\n dill.dump(input_example, file_writer)\\n\\n signature\n = infer_signature(train_data, clf.predict(train_data))\\n with open(signature_path,\n \\"wb\\") as file_writer:\\n dill.dump(signature, file_writer)\\n\\n conda_env\n = _mlflow_conda_env(\\n additional_pip_deps=[\\"dill\\", \\"pandas\\",\n \\"scikit-learn\\"]\\n )\\n with open(conda_env_path, \\"wb\\") as file_writer:\\n dill.dump(conda_env,\n file_writer)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Train\n from csv\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--train-data\\", dest=\\"train_data_path\\",\n type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--train-target\\",\n dest=\\"train_target_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--kernel\\",\n dest=\\"kernel\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--model\\",\n dest=\\"model_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--input-example\\", dest=\\"input_example_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--signature\\",\n dest=\\"signature_path\\", type=_make_parent_dirs_and_return_path, required=True,\n default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--conda-env\\", dest=\\"conda_env_path\\",\n type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = train_from_csv(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "train_data", "type": "csv"},\n {"name": "train_target", "type": "csv"}, {"name": "kernel", "type": "String"}],\n "name": "Train from csv", "outputs": [{"name": "model", "type": "dill"},\n {"name": "input_example", "type": "dill"}, {"name": "signature", "type":\n "dill"}, {"name": "conda_env", "type": "dill"}]}\', pipelines.kubeflow.org/component_ref: \'{}\',\n pipelines.kubeflow.org/arguments.parameters: \'{"kernel": "{{inputs.parameters.kernel}}"}\'}\n - name: upload-sklearn-model-to-mlflow\n container:\n args: [--model-name, \'{{inputs.parameters.model_name}}\', --model, /tmp/inputs/model/data,\n --input-example, /tmp/inputs/input_example/data, --signature, /tmp/inputs/signature/data,\n --conda-env, /tmp/inputs/conda_env/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'dill\' \'pandas\' \'scikit-learn\' \'mlflow\' \'boto3\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'dill\' \'pandas\' \'scikit-learn\'\n \'mlflow\' \'boto3\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def upload_sklearn_model_to_mlflow(\n model_name,\n model_path,\n input_example_path,\n signature_path,\n conda_env_path,\n ):\n import os\n import dill\n from mlflow.sklearn import save_model\n\n from mlflow.tracking.client import MlflowClient\n\n os.environ["MLFLOW_S3_ENDPOINT_URL"] = "http://minio-service.kubeflow.svc:9000"\n os.environ["AWS_ACCESS_KEY_ID"] = "minio"\n os.environ["AWS_SECRET_ACCESS_KEY"] = "minio123"\n\n client = MlflowClient("http://mlflow-server-service.mlflow-system.svc:5000")\n\n with open(model_path, mode="rb") as file_reader:\n clf = dill.load(file_reader)\n\n with open(input_example_path, "rb") as file_reader:\n input_example = dill.load(file_reader)\n\n with open(signature_path, "rb") as file_reader:\n signature = dill.load(file_reader)\n\n with open(conda_env_path, "rb") as file_reader:\n conda_env = dill.load(file_reader)\n\n save_model(\n sk_model=clf,\n path=model_name,\n serialization_format="cloudpickle",\n conda_env=conda_env,\n signature=signature,\n input_example=input_example,\n )\n run = client.create_run(experiment_id="0")\n client.log_artifact(run.info.run_id, model_name)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Upload sklearn model to mlflow\', description=\'\')\n _parser.add_argument("--model-name", dest="model_name", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--model", dest="model_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--input-example", dest="input_example_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--signature", dest="signature_path", type=str, required=True, default=argparse.SUPPRESS)\n _parser.add_argument("--conda-env", dest="conda_env_path", type=str, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n\n _outputs = upload_sklearn_model_to_mlflow(**_parsed_args)\n image: python:3.7\n inputs:\n parameters:\n - {name: model_name}\n artifacts:\n - {name: train-from-csv-conda_env, path: /tmp/inputs/conda_env/data}\n - {name: train-from-csv-input_example, path: /tmp/inputs/input_example/data}\n - {name: train-from-csv-model, path: /tmp/inputs/model/data}\n - {name: train-from-csv-signature, path: /tmp/inputs/signature/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.10\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--model-name", {"inputValue": "model_name"}, "--model", {"inputPath":\n "model"}, "--input-example", {"inputPath": "input_example"}, "--signature",\n {"inputPath": "signature"}, "--conda-env", {"inputPath": "conda_env"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\'\n \'\'mlflow\'\' \'\'boto3\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install\n --quiet --no-warn-script-location \'\'dill\'\' \'\'pandas\'\' \'\'scikit-learn\'\' \'\'mlflow\'\'\n \'\'boto3\'\' --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def upload_sklearn_model_to_mlflow(\\n model_name,\\n model_path,\\n input_example_path,\\n signature_path,\\n conda_env_path,\\n):\\n import\n os\\n import dill\\n from mlflow.sklearn import save_model\\n\\n from\n mlflow.tracking.client import MlflowClient\\n\\n os.environ[\\"MLFLOW_S3_ENDPOINT_URL\\"]\n = \\"http://minio-service.kubeflow.svc:9000\\"\\n os.environ[\\"AWS_ACCESS_KEY_ID\\"]\n = \\"minio\\"\\n os.environ[\\"AWS_SECRET_ACCESS_KEY\\"] = \\"minio123\\"\\n\\n client\n = MlflowClient(\\"http://mlflow-server-service.mlflow-system.svc:5000\\")\\n\\n with\n open(model_path, mode=\\"rb\\") as file_reader:\\n clf = dill.load(file_reader)\\n\\n with\n open(input_example_path, \\"rb\\") as file_reader:\\n input_example\n = dill.load(file_reader)\\n\\n with open(signature_path, \\"rb\\") as file_reader:\\n signature\n = dill.load(file_reader)\\n\\n with open(conda_env_path, \\"rb\\") as file_reader:\\n conda_env\n = dill.load(file_reader)\\n\\n save_model(\\n sk_model=clf,\\n path=model_name,\\n serialization_format=\\"cloudpickle\\",\\n conda_env=conda_env,\\n signature=signature,\\n input_example=input_example,\\n )\\n run\n = client.create_run(experiment_id=\\"0\\")\\n client.log_artifact(run.info.run_id,\n model_name)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Upload\n sklearn model to mlflow\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--model-name\\",\n dest=\\"model_name\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--model\\",\n dest=\\"model_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--input-example\\",\n dest=\\"input_example_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--signature\\",\n dest=\\"signature_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parser.add_argument(\\"--conda-env\\",\n dest=\\"conda_env_path\\", type=str, required=True, default=argparse.SUPPRESS)\\n_parsed_args\n = vars(_parser.parse_args())\\n\\n_outputs = upload_sklearn_model_to_mlflow(**_parsed_args)\\n"],\n "image": "python:3.7"}}, "inputs": [{"name": "model_name", "type": "String"},\n {"name": "model", "type": "dill"}, {"name": "input_example", "type": "dill"},\n {"name": "signature", "type": "dill"}, {"name": "conda_env", "type": "dill"}],\n "name": "Upload sklearn model to mlflow"}\', pipelines.kubeflow.org/component_ref: \'{}\',\n pipelines.kubeflow.org/arguments.parameters: \'{"model_name": "{{inputs.parameters.model_name}}"}\'}\n arguments:\n parameters:\n - {name: kernel}\n - {name: model_name}\n serviceAccountName: pipeline-runner\n')))),(0,r.kt)("p",null,"\uc2e4\ud589\ud6c4 \uc0dd\uc131\ub41c mlflow_pipeline.yaml \ud30c\uc77c\uc744 \ud30c\uc774\ud504\ub77c\uc778 \uc5c5\ub85c\ub4dc\ud55c \ud6c4, \uc2e4\ud589\ud558\uc5ec run \uc758 \uacb0\uacfc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-0",src:a(1822).Z,width:"3408",height:"2156"})),(0,r.kt)("p",null,"mlflow service\ub97c \ud3ec\ud2b8\ud3ec\uc6cc\ub529\ud574\uc11c MLflow ui\uc5d0 \uc811\uc18d\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl port-forward svc/mlflow-server-service -n mlflow-system 5000:5000\n")),(0,r.kt)("p",null,"\uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 localhost:5000\uc73c\ub85c \uc811\uc18d\ud558\uba74, \ub2e4\uc74c\uacfc \uac19\uc774 run\uc774 \uc0dd\uc131\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-1",src:a(339).Z,width:"3360",height:"2100"})),(0,r.kt)("p",null,"run \uc744 \ud074\ub9ad\ud574\uc11c \ud655\uc778\ud558\uba74 \ud559\uc2b5\ud55c \ubaa8\ub378 \ud30c\uc77c\uc774 \uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"mlflow-svc-2",src:a(7463).Z,width:"3360",height:"2100"})))}_.isMDXComponent=!0},3810:(e,n,a)=>{a.d(n,{Z:()=>t});const t=a.p+"assets/images/mlflow-0-95d5ec759ef43b21c9c3b22abb64366d.png"},8705:(e,n,a)=>{a.d(n,{Z:()=>t});const t=a.p+"assets/images/mlflow-1-a096f3eda2246a1c132fc13ce3180ef5.png"},9481:(e,n,a)=>{a.d(n,{Z:()=>t});const t=a.p+"assets/images/mlflow-2-3cd7cf7e2c853a1242cff7c65e56cf3f.png"},3268:(e,n,a)=>{a.d(n,{Z:()=>t});const t=a.p+"assets/images/mlflow-3-8b187057bb18f27b1744656ef6d045a1.png"},1822:(e,n,a)=>{a.d(n,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-0-ab6c5d7f00bf643c36d236155dc5eb9c.png"},339:(e,n,a)=>{a.d(n,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-1-7723b8f92fb8cea2ff99b8f4639ff0c6.png"},7463:(e,n,a)=>{a.d(n,{Z:()=>t});const t=a.p+"assets/images/mlflow-svc-2-8b696bd65a922f949877102bbfdafc42.png"}}]); \ No newline at end of file diff --git a/assets/js/e7600b97.a7453c35.js b/assets/js/e7600b97.a7453c35.js new file mode 100644 index 00000000..28b67ebc --- /dev/null +++ b/assets/js/e7600b97.a7453c35.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[799],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var l=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);n&&(l=l.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,l)}return t}function r(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var m=l.createContext({}),s=function(e){var n=l.useContext(m),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},p=function(e){var n=s(e.components);return l.createElement(m.Provider,{value:n},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return l.createElement(l.Fragment,{},n)}},u=l.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,m=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=s(t),u=a,f=c["".concat(m,".").concat(u)]||c[u]||d[u]||o;return t?l.createElement(f,r(r({ref:n},p),{},{components:t})):l.createElement(f,r({ref:n},p))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,r=new Array(o);r[0]=u;var i={};for(var m in n)hasOwnProperty.call(n,m)&&(i[m]=n[m]);i.originalType=e,i[c]="string"==typeof e?e:a,r[1]=i;for(var s=2;s{t.r(n),t.d(n,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var l=t(7462),a=(t(7294),t(3905));const o={title:"5. Model from MLflow",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},r=void 0,i={unversionedId:"api-deployment/seldon-mlflow",id:"api-deployment/seldon-mlflow",title:"5. Model from MLflow",description:"",source:"@site/docs/api-deployment/seldon-mlflow.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-mlflow",permalink:"/docs/api-deployment/seldon-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-mlflow.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"5. Model from MLflow",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"4. Seldon Fields",permalink:"/docs/api-deployment/seldon-fields"},next:{title:"6. Multi Models",permalink:"/docs/api-deployment/seldon-children"}},m={},s=[{value:"Model from MLflow",id:"model-from-mlflow",level:2},{value:"Secret",id:"secret",level:2},{value:"Seldon Core yaml",id:"seldon-core-yaml",level:2},{value:"args",id:"args",level:3},{value:"envFrom",id:"envfrom",level:3},{value:"API \uc0dd\uc131",id:"api-\uc0dd\uc131",level:2}],p={toc:s},c="wrapper";function d(e){let{components:n,...o}=e;return(0,a.kt)(c,(0,l.Z)({},p,o,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"model-from-mlflow"},"Model from MLflow"),(0,a.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,a.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-mlflow"},"MLflow Component"),"\uc5d0\uc11c \uc800\uc7a5\ub41c \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 API\ub97c \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"secret"},"Secret"),(0,a.kt)("p",null,"initContainer\uac00 minio\uc5d0 \uc811\uadfc\ud574\uc11c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc73c\ub824\uba74 credentials\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.\nminio\uc5d0 \uc811\uadfc\ud558\uae30 \uc704\ud55c credentials\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\ntype: Opaque\nkind: Secret\nmetadata:\n name: seldon-init-container-secret\n namespace: kubeflow-user-example-com\ndata:\n AWS_ACCESS_KEY_ID: bWluaW8K=\n AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=\n AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLm1ha2luYXJvY2tzLmFp\n USE_SSL: ZmFsc2U=\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AWS_ACCESS_KEY_ID")," \uc758 \uc785\ub825\uac12\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"minio"),"\uc785\ub2c8\ub2e4. \ub2e4\ub9cc secret\uc758 \uc785\ub825\uac12\uc740 \uc778\ucf54\ub529\ub41c \uac12\uc774\uc5ec\uc57c \ub418\uae30 \ub54c\ubb38\uc5d0 \uc2e4\uc81c\ub85c \uc785\ub825\ub418\ub294 \uac12\uc740 \ub2e4\uc74c\uc744 \uc218\ud589\ud6c4 \ub098\uc624\ub294 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"data\uc5d0 \uc785\ub825\ub418\uc5b4\uc57c \ud558\ub294 \uac12\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS_ACCESS_KEY_ID: minio"),(0,a.kt)("li",{parentName:"ul"},"AWS_SECRET_ACCESS_KEY: minio123"),(0,a.kt)("li",{parentName:"ul"},"AWS_ENDPOINT_URL: ",(0,a.kt)("a",{parentName:"li",href:"http://minio-service.kubeflow.svc:9000"},"http://minio-service.kubeflow.svc:9000")),(0,a.kt)("li",{parentName:"ul"},"USE_SSL: false")),(0,a.kt)("p",null,"\uc778\ucf54\ub529\uc740 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"echo -n minio | base64\n")),(0,a.kt)("p",null,"\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uac12\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"bWluaW8=\n")),(0,a.kt)("p",null,"\uc778\ucf54\ub529\uc744 \uc804\uccb4 \uac12\uc5d0 \ub300\ud574\uc11c \uc9c4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS_ACCESS_KEY_ID: bWluaW8="),(0,a.kt)("li",{parentName:"ul"},"AWS_SECRET_ACCESS_KEY: bWluaW8xMjM="),(0,a.kt)("li",{parentName:"ul"},"AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLXNlcnZpY2Uua3ViZWZsb3cuc3ZjOjkwMDA="),(0,a.kt)("li",{parentName:"ul"},"USE_SSL: ZmFsc2U=")),(0,a.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 secret\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\ub294 yaml\ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cat < seldon-init-container-secret.yaml\napiVersion: v1\nkind: Secret\nmetadata:\n name: seldon-init-container-secret\n namespace: kubeflow-user-example-com\ntype: Opaque\ndata:\n AWS_ACCESS_KEY_ID: bWluaW8=\n AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=\n AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLXNlcnZpY2Uua3ViZWZsb3cuc3ZjOjkwMDA=\n USE_SSL: ZmFsc2U=\nEOF\n")),(0,a.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 secret\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f seldon-init-container-secret.yaml\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"secret/seldon-init-container-secret created\n")),(0,a.kt)("h2",{id:"seldon-core-yaml"},"Seldon Core yaml"),(0,a.kt)("p",null,"\uc774\uc81c Seldon Core\ub97c \uc0dd\uc131\ud558\ub294 yaml\ud30c\uc77c\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: model\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n')),(0,a.kt)("p",null,"\uc774 \uc804\uc5d0 \uc791\uc131\ud55c ",(0,a.kt)("a",{parentName:"p",href:"/docs/api-deployment/seldon-fields"},"Seldon Fields"),"\uc640 \ub2ec\ub77c\uc9c4 \uc810\uc740 \ud06c\uac8c \ub450 \ubd80\ubd84\uc785\ub2c8\ub2e4.\ninitContainer\uc5d0 ",(0,a.kt)("inlineCode",{parentName:"p"},"envFrom")," \ud544\ub4dc\uac00 \ucd94\uac00\ub418\uc5c8\uc73c\uba70 args\uc758 \uc8fc\uc18c\uac00 ",(0,a.kt)("inlineCode",{parentName:"p"},"s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc")," \ub85c \ubc14\ub00c\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"args"},"args"),(0,a.kt)("p",null,"\uc55e\uc11c args\uc758 \uccab\ubc88\uc9f8 array\ub294 \uc6b0\ub9ac\uac00 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ubaa8\ub378\uc758 \uacbd\ub85c\ub77c\uace0 \ud588\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8\ub7fc mlflow\uc5d0 \uc800\uc7a5\ub41c \ubaa8\ub378\uc758 \uacbd\ub85c\ub294 \uc5b4\ub5bb\uac8c \uc54c \uc218 \uc788\uc744\uae4c\uc694?"),(0,a.kt)("p",null,"\ub2e4\uc2dc mlflow\uc5d0 \ub4e4\uc5b4\uac00\uc11c run\uc744 \ud074\ub9ad\ud558\uace0 \ubaa8\ub378\uc744 \ub204\ub974\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"seldon-mlflow-0.png",src:t(8663).Z,width:"3466",height:"2274"})),(0,a.kt)("p",null,"\uc774\ub807\uac8c \ud655\uc778\ub41c \uacbd\ub85c\ub97c \uc785\ub825\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"envfrom"},"envFrom"),(0,a.kt)("p",null,"minio\uc5d0 \uc811\uadfc\ud574\uc11c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \ub370 \ud544\uc694\ud55c \ud658\uacbd\ubcc0\uc218\ub97c \uc785\ub825\ud574\uc8fc\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4.\n\uc55e\uc11c \ub9cc\ub4e0 ",(0,a.kt)("inlineCode",{parentName:"p"},"seldon-init-container-secret"),"\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"api-\uc0dd\uc131"},"API \uc0dd\uc131"),(0,a.kt)("p",null,"\uc6b0\uc120 \uc704\uc5d0\uc11c \uc815\uc758\ud55c \uc2a4\ud399\uc744 yaml \ud30c\uc77c\ub85c \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: model\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: xtype\n type: STRING\n value: "dataframe"\n children: []\nEOF\n')),(0,a.kt)("p",null,"seldon pod\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f seldon-mlflow.yaml\n\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"seldondeployment.machinelearning.seldon.io/seldon-example created\n")),(0,a.kt)("p",null,"\uc774\uc81c pod\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub730 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow-user-example-com | grep seldon\n")),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c API\ub97c \uc0dd\uc131\ud588\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-example-model-0-model-5c949bd894-c5f28 3/3 Running 0 69s\n")),(0,a.kt)("p",null,"CLI\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ub41c API\uc5d0\ub294 \ub2e4\uc74c request\ub97c \ud1b5\ud574 \uc2e4\ud589\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H \'Content-Type: application/json\' \\\n-d \'{\n "data": {\n "ndarray": [\n [\n 143.0,\n 0.0,\n 30.0,\n 30.0\n ]\n ],\n "names": [\n "sepal length (cm)",\n "sepal width (cm)",\n "petal length (cm)",\n "petal width (cm)"\n ]\n }\n}\'\n')),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub420 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'{"data":{"names":[],"ndarray":["Virginica"]},"meta":{"requestPath":{"model":"ghcr.io/mlops-for-all/mlflowserver:e141f57"}}}\n')))}d.isMDXComponent=!0},8663:(e,n,t)=>{t.d(n,{Z:()=>l});const l=t.p+"assets/images/seldon-mlflow-0-1d29992e36aa6ee88621e221794159d1.png"}}]); \ No newline at end of file diff --git a/assets/js/e7600b97.ddd30e77.js b/assets/js/e7600b97.ddd30e77.js deleted file mode 100644 index 0632a5b9..00000000 --- a/assets/js/e7600b97.ddd30e77.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[799],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>f});var l=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);n&&(l=l.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,l)}return t}function r(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var m=l.createContext({}),s=function(e){var n=l.useContext(m),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},p=function(e){var n=s(e.components);return l.createElement(m.Provider,{value:n},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return l.createElement(l.Fragment,{},n)}},u=l.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,m=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=s(t),u=a,f=c["".concat(m,".").concat(u)]||c[u]||d[u]||o;return t?l.createElement(f,r(r({ref:n},p),{},{components:t})):l.createElement(f,r({ref:n},p))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,r=new Array(o);r[0]=u;var i={};for(var m in n)hasOwnProperty.call(n,m)&&(i[m]=n[m]);i.originalType=e,i[c]="string"==typeof e?e:a,r[1]=i;for(var s=2;s{t.r(n),t.d(n,{assets:()=>m,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var l=t(7462),a=(t(7294),t(3905));const o={title:"5. Model from MLflow",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},r=void 0,i={unversionedId:"api-deployment/seldon-mlflow",id:"api-deployment/seldon-mlflow",title:"5. Model from MLflow",description:"",source:"@site/docs/api-deployment/seldon-mlflow.md",sourceDirName:"api-deployment",slug:"/api-deployment/seldon-mlflow",permalink:"/docs/api-deployment/seldon-mlflow",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/api-deployment/seldon-mlflow.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"5. Model from MLflow",description:"",sidebar_position:5,contributors:["Jongseob Jeon"]},sidebar:"tutorialSidebar",previous:{title:"4. Seldon Fields",permalink:"/docs/api-deployment/seldon-fields"},next:{title:"6. Multi Models",permalink:"/docs/api-deployment/seldon-children"}},m={},s=[{value:"Model from MLflow",id:"model-from-mlflow",level:2},{value:"Secret",id:"secret",level:2},{value:"Seldon Core yaml",id:"seldon-core-yaml",level:2},{value:"args",id:"args",level:3},{value:"envFrom",id:"envfrom",level:3},{value:"API \uc0dd\uc131",id:"api-\uc0dd\uc131",level:2}],p={toc:s},c="wrapper";function d(e){let{components:n,...o}=e;return(0,a.kt)(c,(0,l.Z)({},p,o,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"model-from-mlflow"},"Model from MLflow"),(0,a.kt)("p",null,"\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 ",(0,a.kt)("a",{parentName:"p",href:"/docs/kubeflow/advanced-mlflow"},"MLflow Component"),"\uc5d0\uc11c \uc800\uc7a5\ub41c \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 API\ub97c \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"secret"},"Secret"),(0,a.kt)("p",null,"initContainer\uac00 minio\uc5d0 \uc811\uadfc\ud574\uc11c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc73c\ub824\uba74 credentials\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.\nminio\uc5d0 \uc811\uadfc\ud558\uae30 \uc704\ud55c credentials\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\ntype: Opaque\nkind: Secret\nmetadata:\n name: seldon-init-container-secret\n namespace: kubeflow-user-example-com\ndata:\n AWS_ACCESS_KEY_ID: bWluaW8K=\n AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=\n AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLm1ha2luYXJvY2tzLmFp\n USE_SSL: ZmFsc2U=\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AWS_ACCESS_KEY_ID")," \uc758 \uc785\ub825\uac12\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"minio"),"\uc785\ub2c8\ub2e4. \ub2e4\ub9cc secret\uc758 \uc785\ub825\uac12\uc740 \uc778\ucf54\ub529\ub41c \uac12\uc774\uc5ec\uc57c \ub418\uae30 \ub54c\ubb38\uc5d0 \uc2e4\uc81c\ub85c \uc785\ub825\ub418\ub294 \uac12\uc740 \ub2e4\uc74c\uc744 \uc218\ud589\ud6c4 \ub098\uc624\ub294 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,a.kt)("p",null,"data\uc5d0 \uc785\ub825\ub418\uc5b4\uc57c \ud558\ub294 \uac12\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS_ACCESS_KEY_ID: minio"),(0,a.kt)("li",{parentName:"ul"},"AWS_SECRET_ACCESS_KEY: minio123"),(0,a.kt)("li",{parentName:"ul"},"AWS_ENDPOINT_URL: ",(0,a.kt)("a",{parentName:"li",href:"http://minio-service.kubeflow.svc:9000"},"http://minio-service.kubeflow.svc:9000")),(0,a.kt)("li",{parentName:"ul"},"USE_SSL: false")),(0,a.kt)("p",null,"\uc778\ucf54\ub529\uc740 \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574\uc11c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"echo -n minio | base64\n")),(0,a.kt)("p",null,"\uadf8\ub7ec\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uac12\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"bWluaW8=\n")),(0,a.kt)("p",null,"\uc778\ucf54\ub529\uc744 \uc804\uccb4 \uac12\uc5d0 \ub300\ud574\uc11c \uc9c4\ud589\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS_ACCESS_KEY_ID: bWluaW8="),(0,a.kt)("li",{parentName:"ul"},"AWS_SECRET_ACCESS_KEY: bWluaW8xMjM="),(0,a.kt)("li",{parentName:"ul"},"AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLXNlcnZpY2Uua3ViZWZsb3cuc3ZjOjkwMDA="),(0,a.kt)("li",{parentName:"ul"},"USE_SSL: ZmFsc2U=")),(0,a.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 secret\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\ub294 yaml\ud30c\uc77c\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cat < seldon-init-container-secret.yaml\napiVersion: v1\nkind: Secret\nmetadata:\n name: seldon-init-container-secret\n namespace: kubeflow-user-example-com\ntype: Opaque\ndata:\n AWS_ACCESS_KEY_ID: bWluaW8=\n AWS_SECRET_ACCESS_KEY: bWluaW8xMjM=\n AWS_ENDPOINT_URL: aHR0cDovL21pbmlvLXNlcnZpY2Uua3ViZWZsb3cuc3ZjOjkwMDA=\n USE_SSL: ZmFsc2U=\nEOF\n")),(0,a.kt)("p",null,"\ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 secret\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f seldon-init-container-secret.yaml\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"secret/seldon-init-container-secret created\n")),(0,a.kt)("h2",{id:"seldon-core-yaml"},"Seldon Core yaml"),(0,a.kt)("p",null,"\uc774\uc81c Seldon Core\ub97c \uc0dd\uc131\ud558\ub294 yaml\ud30c\uc77c\uc744 \uc791\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: model\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n children: []\n')),(0,a.kt)("p",null,"\uc774 \uc804\uc5d0 \uc791\uc131\ud55c ",(0,a.kt)("a",{parentName:"p",href:"/docs/api-deployment/seldon-fields"},"Seldon Fields"),"\uc640 \ub2ec\ub77c\uc9c4 \uc810\uc740 \ud06c\uac8c \ub450 \ubd80\ubd84\uc785\ub2c8\ub2e4.\ninitContainer\uc5d0 ",(0,a.kt)("inlineCode",{parentName:"p"},"envFrom")," \ud544\ub4dc\uac00 \ucd94\uac00\ub418\uc5c8\uc73c\uba70 args\uc758 \uc8fc\uc18c\uac00 ",(0,a.kt)("inlineCode",{parentName:"p"},"s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc")," \ub85c \ubc14\ub00c\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"args"},"args"),(0,a.kt)("p",null,"\uc55e\uc11c args\uc758 \uccab\ubc88\uc9f8 array\ub294 \uc6b0\ub9ac\uac00 \ub2e4\uc6b4\ub85c\ub4dc\ubc1b\uc744 \ubaa8\ub378\uc758 \uacbd\ub85c\ub77c\uace0 \ud588\uc2b5\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uadf8\ub7fc mlflow\uc5d0 \uc800\uc7a5\ub41c \ubaa8\ub378\uc758 \uacbd\ub85c\ub294 \uc5b4\ub5bb\uac8c \uc54c \uc218 \uc788\uc744\uae4c\uc694?"),(0,a.kt)("p",null,"\ub2e4\uc2dc mlflow\uc5d0 \ub4e4\uc5b4\uac00\uc11c run\uc744 \ud074\ub9ad\ud558\uace0 \ubaa8\ub378\uc744 \ub204\ub974\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"seldon-mlflow-0.png",src:t(8663).Z,width:"3466",height:"2274"})),(0,a.kt)("p",null,"\uc774\ub807\uac8c \ud655\uc778\ub41c \uacbd\ub85c\ub97c \uc785\ub825\ud558\uba74 \ub429\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"envfrom"},"envFrom"),(0,a.kt)("p",null,"minio\uc5d0 \uc811\uadfc\ud574\uc11c \ubaa8\ub378\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \ub370 \ud544\uc694\ud55c \ud658\uacbd\ubcc0\uc218\ub97c \uc785\ub825\ud574\uc8fc\ub294 \uacfc\uc815\uc785\ub2c8\ub2e4.\n\uc55e\uc11c \ub9cc\ub4e0 ",(0,a.kt)("inlineCode",{parentName:"p"},"seldon-init-container-secret"),"\ub97c \uc774\uc6a9\ud569\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"api-\uc0dd\uc131"},"API \uc0dd\uc131"),(0,a.kt)("p",null,"\uc6b0\uc120 \uc704\uc5d0\uc11c \uc815\uc758\ud55c \uc2a4\ud399\uc744 yaml \ud30c\uc77c\ub85c \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: machinelearning.seldon.io/v1\nkind: SeldonDeployment\nmetadata:\n name: seldon-example\n namespace: kubeflow-user-example-com\nspec:\n name: model\n predictors:\n - name: model\n\n componentSpecs:\n - spec:\n volumes:\n - name: model-provision-location\n emptyDir: {}\n\n initContainers:\n - name: model-initializer\n image: gcr.io/kfserving/storage-initializer:v0.4.0\n args:\n - "s3://mlflow/mlflow/artifacts/0/74ba8e33994144f599e50b3be176cdb0/artifacts/svc"\n - "/mnt/models"\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n envFrom:\n - secretRef:\n name: seldon-init-container-secret\n\n containers:\n - name: model\n image: ghcr.io/mlops-for-all/mlflowserver\n volumeMounts:\n - mountPath: /mnt/models\n name: model-provision-location\n readOnly: true\n securityContext:\n privileged: true\n runAsUser: 0\n runAsGroup: 0\n\n graph:\n name: model\n type: MODEL\n parameters:\n - name: model_uri\n type: STRING\n value: "/mnt/models"\n - name: xtype\n type: STRING\n value: "dataframe"\n children: []\nEOF\n')),(0,a.kt)("p",null,"seldon pod\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f seldon-mlflow.yaml\n\n")),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"seldondeployment.machinelearning.seldon.io/seldon-example created\n")),(0,a.kt)("p",null,"\uc774\uc81c pod\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub730 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get po -n kubeflow-user-example-com | grep seldon\n")),(0,a.kt)("p",null,"\ub2e4\uc74c\uacfc \ube44\uc2b7\ud558\uac8c \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c API\ub97c \uc0dd\uc131\ud588\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"seldon-example-model-0-model-5c949bd894-c5f28 3/3 Running 0 69s\n")),(0,a.kt)("p",null,"CLI\ub97c \uc774\uc6a9\ud574 \uc0dd\uc131\ub41c API\uc5d0\ub294 \ub2e4\uc74c request\ub97c \ud1b5\ud574 \uc2e4\ud589\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'curl -X POST http://$NODE_IP:$NODE_PORT/seldon/seldon-deploy/sklearn/api/v1.0/predictions \\\n-H \'Content-Type: application/json\' \\\n-d \'{\n "data": {\n "ndarray": [\n [\n 143.0,\n 0.0,\n 30.0,\n 30.0\n ]\n ],\n "names": [\n "sepal length (cm)",\n "sepal width (cm)",\n "petal length (cm)",\n "petal width (cm)"\n ]\n }\n}\'\n')),(0,a.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc2e4\ud589\ub420 \uacbd\uc6b0 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'{"data":{"names":[],"ndarray":["Virginica"]},"meta":{"requestPath":{"model":"ghcr.io/mlops-for-all/mlflowserver:e141f57"}}}\n')))}d.isMDXComponent=!0},8663:(e,n,t)=>{t.d(n,{Z:()=>l});const l=t.p+"assets/images/seldon-mlflow-0-1d29992e36aa6ee88621e221794159d1.png"}}]); \ No newline at end of file diff --git a/assets/js/e8d17a59.2dad3ffa.js b/assets/js/e8d17a59.36cdca7f.js similarity index 61% rename from assets/js/e8d17a59.2dad3ffa.js rename to assets/js/e8d17a59.36cdca7f.js index ddc6b5fe..e8cf529a 100644 --- a/assets/js/e8d17a59.2dad3ffa.js +++ b/assets/js/e8d17a59.36cdca7f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1526],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"5. Experiments(AutoML)",description:"",sidebar_position:5,contributors:["Jaeyeon Kim"]},i=void 0,s={unversionedId:"kubeflow-dashboard-guide/experiments",id:"version-1.0/kubeflow-dashboard-guide/experiments",title:"5. Experiments(AutoML)",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/experiments",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:5,frontMatter:{title:"5. Experiments(AutoML)",description:"",sidebar_position:5,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Volumes",permalink:"/docs/1.0/kubeflow-dashboard-guide/volumes"},next:{title:"6. Kubeflow Pipeline \uad00\ub828",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments-and-others"}},l={},p=[],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Experiments(AutoML)\uc744 \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"automl",src:r(2815).Z,width:"1498",height:"272"})),(0,o.kt)("p",null,"Experiments(AutoML) \ud398\uc774\uc9c0\ub294 Kubeflow\uc5d0\uc11c Hyperparameter Tuning\uacfc Neural Architecture Search\ub97c \ud1b5\ud55c AutoML\uc744 \ub2f4\ub2f9\ud558\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/katib/overview/"},"Katib"),"\ub97c \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"Katib\uc640 Experiments(AutoML)\uc5d0 \ub300\ud55c \uc0ac\uc6a9\ubc95\uc740 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," v1.0\uc5d0\uc11c\ub294 \ub2e4\ub8e8\uc9c0 \uc54a\uc73c\uba70, v2.0\uc5d0 \ucd94\uac00\ub420 \uc608\uc815\uc785\ub2c8\ub2e4."))}d.isMDXComponent=!0},2815:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/automl-7f762c2c67e5319953ec8567769722fb.png"},6316:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1526],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"5. Experiments(AutoML)",description:"",sidebar_position:5,contributors:["Jaeyeon Kim"]},i=void 0,s={unversionedId:"kubeflow-dashboard-guide/experiments",id:"version-1.0/kubeflow-dashboard-guide/experiments",title:"5. Experiments(AutoML)",description:"",source:"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments.md",sourceDirName:"kubeflow-dashboard-guide",slug:"/kubeflow-dashboard-guide/experiments",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:5,frontMatter:{title:"5. Experiments(AutoML)",description:"",sidebar_position:5,contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Volumes",permalink:"/docs/1.0/kubeflow-dashboard-guide/volumes"},next:{title:"6. Kubeflow Pipeline \uad00\ub828",permalink:"/docs/1.0/kubeflow-dashboard-guide/experiments-and-others"}},l={},p=[],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"\ub2e4\uc74c\uc73c\ub85c\ub294 Central Dashboard\uc758 \uc67c\ucabd \ud0ed\uc758 Experiments(AutoML)\uc744 \ud074\ub9ad\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"left-tabs",src:r(6316).Z,width:"3940",height:"1278"})),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"automl",src:r(2815).Z,width:"1498",height:"272"})),(0,o.kt)("p",null,"Experiments(AutoML) \ud398\uc774\uc9c0\ub294 Kubeflow\uc5d0\uc11c Hyperparameter Tuning\uacfc Neural Architecture Search\ub97c \ud1b5\ud55c AutoML\uc744 \ub2f4\ub2f9\ud558\ub294 ",(0,o.kt)("a",{parentName:"p",href:"https://www.kubeflow.org/docs/components/katib/overview/"},"Katib"),"\ub97c \uad00\ub9ac\ud560 \uc218 \uc788\ub294 \ud398\uc774\uc9c0\uc785\ub2c8\ub2e4."),(0,o.kt)("p",null,"Katib\uc640 Experiments(AutoML)\uc5d0 \ub300\ud55c \uc0ac\uc6a9\ubc95\uc740 ",(0,o.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," v1.0\uc5d0\uc11c\ub294 \ub2e4\ub8e8\uc9c0 \uc54a\uc73c\uba70, v2.0\uc5d0 \ucd94\uac00\ub420 \uc608\uc815\uc785\ub2c8\ub2e4."))}d.isMDXComponent=!0},2815:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/automl-7f762c2c67e5319953ec8567769722fb.png"},6316:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/left-tabs-4290df638df45a698ebc615a5bcb5b86.png"}}]); \ No newline at end of file diff --git a/assets/js/f1d05694.5a6ebbb9.js b/assets/js/f1d05694.5a6ebbb9.js deleted file mode 100644 index fd43e7e1..00000000 --- a/assets/js/f1d05694.5a6ebbb9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8084],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,p=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),d=u(n),m=i,k=d["".concat(p,".").concat(m)]||d[m]||c[m]||l;return n?r.createElement(k,a(a({ref:t},s),{},{components:n})):r.createElement(k,a({ref:t},s))}));function k(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,a=new Array(l);a[0]=m;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o[d]="string"==typeof e?e:i,a[1]=o;for(var u=2;u{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>u});var r=n(7462),i=(n(7294),n(3905));const l={title:"3. Components of MLOps",description:"Describe MLOps Components",sidebar_position:3,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2021-12-10T00:00:00.000Z"),contributors:["Youngcheol Jang"]},a=void 0,o={unversionedId:"introduction/component",id:"introduction/component",title:"3. Components of MLOps",description:"Describe MLOps Components",source:"@site/docs/introduction/component.md",sourceDirName:"introduction",slug:"/introduction/component",permalink:"/docs/introduction/component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/introduction/component.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:3,frontMatter:{title:"3. Components of MLOps",description:"Describe MLOps Components",sidebar_position:3,date:"2021-12-03T00:00:00.000Z",lastmod:"2021-12-10T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"2. Levels of MLOps",permalink:"/docs/introduction/levels"},next:{title:"4. Why Kubernetes?",permalink:"/docs/introduction/why_kubernetes"}},p={},u=[{value:"Practitioners guide to MLOps",id:"practitioners-guide-to-mlops",level:2},{value:"1. Experimentation",id:"1-experimentation",level:3},{value:"2. Data Processing",id:"2-data-processing",level:3},{value:"3. Model training",id:"3-model-training",level:3},{value:"4. Model evaluation",id:"4-model-evaluation",level:3},{value:"5. Model serving",id:"5-model-serving",level:3},{value:"6. Online experimentation",id:"6-online-experimentation",level:3},{value:"7. Model Monitoring",id:"7-model-monitoring",level:3},{value:"8. ML Pipeline",id:"8-ml-pipeline",level:3},{value:"9. Model Registry",id:"9-model-registry",level:3},{value:"10. Dataset and Feature Repository",id:"10-dataset-and-feature-repository",level:3},{value:"11. ML Metadata and Artifact Tracking",id:"11-ml-metadata-and-artifact-tracking",level:3}],s={toc:u},d="wrapper";function c(e){let{components:t,...l}=e;return(0,i.kt)(d,(0,r.Z)({},s,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"practitioners-guide-to-mlops"},"Practitioners guide to MLOps"),(0,i.kt)("p",null," 2021\ub144 5\uc6d4\uc5d0 \ubc1c\ud45c\ub41c \uad6c\uae00\uc758 ",(0,i.kt)("a",{parentName:"p",href:"https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf"},"white paper : Practitioners guide to MLOps: A framework for continuous delivery and automation of machine learning"),"\uc5d0\uc11c\ub294 MLOps\uc758 \ud575\uc2ec \uae30\ub2a5\ub4e4\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc744 \uc5b8\uae09\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"mlops-component",src:n(878).Z,width:"2352",height:"1890"})),(0,i.kt)("p",null," \uac01 \uae30\ub2a5\uc774 \uc5b4\ub5a4 \uc5ed\ud560\uc744 \ud558\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"1-experimentation"},"1. Experimentation"),(0,i.kt)("p",null," \uc2e4\ud5d8(Experimentation)\uc740 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \ub370\uc774\ud130\ub97c \ubd84\uc11d\ud558\uace0, \ud504\ub85c\ud1a0\ud0c0\uc785 \ubaa8\ub378\uc744 \ub9cc\ub4e4\uba70 \ud559\uc2b5 \uae30\ub2a5\uc744 \uad6c\ud604\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uae43(Git)\uacfc \uac19\uc740 \ubc84\uc804 \ucee8\ud2b8\ub864 \ub3c4\uad6c\uc640 \ud1b5\ud569\ub41c \ub178\ud2b8\ubd81(Jupyter Notebook) \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\ud55c \ub370\uc774\ud130, \ud558\uc774\ud37c \ud30c\ub77c\ubbf8\ud130, \ud3c9\uac00 \uc9c0\ud45c\ub97c \ud3ec\ud568\ud55c \uc2e4\ud5d8 \ucd94\uc801 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub370\uc774\ud130\uc640 \ubaa8\ub378\uc5d0 \ub300\ud55c \ubd84\uc11d \ubc0f \uc2dc\uac01\ud654 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"2-data-processing"},"2. Data Processing"),(0,i.kt)("p",null," \ub370\uc774\ud130 \ucc98\ub9ac(Data Processing)\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378 \uac1c\ubc1c \ub2e8\uacc4, \uc9c0\uc18d\uc801\uc778 \ud559\uc2b5(Continuous Training) \ub2e8\uacc4, \uadf8\ub9ac\uace0 API \ubc30\ud3ec(API Deployment) \ub2e8\uacc4\uc5d0\uc11c \ub9ce\uc740 \uc591\uc758 \ub370\uc774\ud130\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574 \uc8fc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ub370\uc774\ud130 \uc18c\uc2a4\uc640 \uc11c\ube44\uc2a4\uc5d0 \ud638\ud658\ub418\ub294 \ub370\uc774\ud130 \ucee4\ub125\ud130(connector) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc640 \ud638\ud658\ub418\ub294 \ub370\uc774\ud130 \uc778\ucf54\ub354(encoder) & \ub514\ucf54\ub354(decoder) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ub370\uc774\ud130 \ubcc0\ud658\uacfc \ud53c\ucc98 \uc5d4\uc9c0\ub2c8\uc5b4\ub9c1(feature engineering) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ud559\uc2b5\uacfc \uc11c\ube59\uc744 \uc704\ud55c \ud655\uc7a5 \uac00\ub2a5\ud55c \ubc30\uce58, \uc2a4\ud2b8\ub9bc \ub370\uc774\ud130 \ucc98\ub9ac \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"3-model-training"},"3. Model training"),(0,i.kt)("p",null," \ubaa8\ub378 \ud559\uc2b5(Model training)\uc740 \ubaa8\ub378 \ud559\uc2b5\uc744 \uc704\ud55c \uc54c\uace0\ub9ac\uc998\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc2e4\ud589\uc2dc\ucf1c\uc8fc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"ML \ud504\ub808\uc784\uc6cc\ud06c\uc758 \uc2e4\ud589\uc744 \uc704\ud55c \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc218\uc758 GPU / \ubd84\uc0b0 \ud559\uc2b5 \uc0ac\uc6a9\uc744 \uc704\ud55c \ubd84\uc0b0 \ud559\uc2b5 \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ud558\uc774\ud37c \ud30c\ub77c\ubbf8\ud130 \ud29c\ub2dd\uacfc \ucd5c\uc801\ud654 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"4-model-evaluation"},"4. Model evaluation"),(0,i.kt)("p",null," \ubaa8\ub378 \ud3c9\uac00(Model evaluation)\ub294 \uc2e4\ud5d8 \ud658\uacbd\uacfc \uc0c1\uc6a9 \ud658\uacbd\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \ubaa8\ub378\uc758 \uc131\ub2a5\uc744 \uad00\ucc30\ud560 \uc218 \uc788\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud3c9\uac00 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ubaa8\ub378 \uc131\ub2a5 \ud3c9\uac00 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \uc9c0\uc18d \ud559\uc2b5 \uc2e4\ud589 \uacb0\uacfc\uc5d0 \ub300\ud55c \uc608\uce21 \uc131\ub2a5 \ucd94\uc801"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \ubaa8\ub378\uc758 \uc131\ub2a5 \ube44\uad50\uc640 \uc2dc\uac01\ud654"),(0,i.kt)("li",{parentName:"ul"},"\ud574\uc11d\ud560 \uc218 \uc788\ub294 AI \uae30\uc220\uc744 \uc774\uc6a9\ud55c \ubaa8\ub378 \ucd9c\ub825 \ud574\uc11d \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"5-model-serving"},"5. Model serving"),(0,i.kt)("p",null," \ubaa8\ub378 \uc11c\ube59(Model serving)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uace0 \uc11c\ube59\ud558\uae30 \uc704\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uc800 \uc9c0\uc5f0 \ucd94\ub860\uacfc \uace0\uac00\uc6a9\uc131 \ucd94\ub860 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c ML \ubaa8\ub378 \uc11c\ube59 \ud504\ub808\uc784\uc6cc\ud06c \uc9c0\uc6d0(Tensorflow Serving, TorchServe, NVIDIA Triton, Scikit-learn, XGBoost. etc)"),(0,i.kt)("li",{parentName:"ul"},"\ubcf5\uc7a1\ud55c \ud615\ud0dc\uc758 \ucd94\ub860 \ub8e8\ud2f4 \uae30\ub2a5 \uc81c\uacf5, \uc608\ub97c \ub4e4\uc5b4 \uc804\ucc98\ub9ac(preprocess) \ub610\ub294 \ud6c4\ucc98\ub9ac(postprocess) \uae30\ub2a5\uacfc \ucd5c\uc885 \uacb0\uacfc\ub97c \uc704\ud574 \ub2e4\uc218\uc758 \ubaa8\ub378\uc774 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\ub97c \ub9d0\ud569\ub2c8\ub2e4."),(0,i.kt)("li",{parentName:"ul"},"\uc21c\uac04\uc801\uc73c\ub85c \uce58\uc19f\ub294 \ucd94\ub860 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc624\ud1a0 \uc2a4\ucf00\uc77c\ub9c1(autoscaling) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ucd94\ub860 \uc694\uccad\uacfc \ucd94\ub860 \uacb0\uacfc\uc5d0 \ub300\ud55c \ub85c\uae45 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"6-online-experimentation"},"6. Online experimentation"),(0,i.kt)("p",null," \uc628\ub77c\uc778 \uc2e4\ud5d8(Online experimentation)\uc740 \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc774 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c, \uc774 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uba74 \uc5b4\ub290 \uc815\ub3c4\uc758 \uc131\ub2a5\uc744 \ubcf4\uc77c \uac83\uc778\uc9c0 \uac80\uc99d\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \uc0c8 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\ub294 \uac83\uae4c\uc9c0 \uc5f0\ub3d9\ud558\uae30 \uc704\ud574 \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\uc640 \uc5f0\ub3d9\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uce74\ub098\ub9ac(canary) & \uc100\ub3c4(shadow) \ubc30\ud3ec \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"A/B \ud14c\uc2a4\ud2b8 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\uba40\ud2f0 \uc554\ub4dc \ubc34\ub527(Multi-armed bandit) \ud14c\uc2a4\ud2b8 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"7-model-monitoring"},"7. Model Monitoring"),(0,i.kt)("p",null,"\ubaa8\ub378 \ubaa8\ub2c8\ud130\ub9c1(Model Monitoring)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0 \ubc30\ud3ec\ub41c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\ub294\uc9c0\ub97c \ubaa8\ub2c8\ud130\ub9c1\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \ub5a8\uc5b4\uc838 \uc5c5\ub370\uc774\ud2b8\uac00 \ud544\uc694\ud55c\uc9c0\uc5d0 \ub300\ud55c \uc815\ubcf4 \ub4f1\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"8-ml-pipeline"},"8. ML Pipeline"),(0,i.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ud30c\uc774\ud504\ub77c\uc778(ML Pipeline)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0\uc11c \ubcf5\uc7a1\ud55c ML \ud559\uc2b5\uacfc \ucd94\ub860 \uc791\uc5c5\uc744 \uad6c\uc131\ud558\uace0 \uc81c\uc5b4\ud558\uace0 \uc790\ub3d9\ud654\ud558\uae30 \uc704\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \uc774\ubca4\ud2b8\ub97c \uc18c\uc2a4\ub97c \ud1b5\ud55c \ud30c\uc774\ud504\ub77c\uc778 \uc2e4\ud589 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\ud30c\uc774\ud504\ub77c\uc778 \ud30c\ub77c\ubbf8\ud130\uc640 \uc0dd\uc131\ub418\ub294 \uc0b0\ucd9c\ubb3c \uad00\ub9ac\ub97c \uc704\ud55c \uba38\uc2e0\ub7ec\ub2dd \uba54\ud0c0\ub370\uc774\ud130 \ucd94\uc801\uacfc \uc5f0\ub3d9 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc778 \uba38\uc2e0\ub7ec\ub2dd \uc791\uc5c5\uc744 \uc704\ud55c \ub0b4\uc7a5 \ucef4\ud3ec\ub10c\ud2b8 \uc9c0\uc6d0\uacfc \uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \uad6c\ud604\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \uc9c0\uc6d0 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \uc2e4\ud589 \ud658\uacbd \uc81c\uacf5 \uae30\ub2a5")),(0,i.kt)("h3",{id:"9-model-registry"},"9. Model Registry"),(0,i.kt)("p",null," \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \uc0dd\uba85 \uc8fc\uae30(Lifecycle)\uc744 \uc911\uc559 \uc800\uc7a5\uc18c\uc5d0\uc11c \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ud574 \uc8fc\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud559\uc2b5\ub41c \ubaa8\ub378 \uadf8\ub9ac\uace0 \ubc30\ud3ec\ub41c \ubaa8\ub378\uc5d0 \ub300\ud55c \ub4f1\ub85d, \ucd94\uc801, \ubc84\uc800\ub2dd \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ubc30\ud3ec\ub97c \uc704\ud574 \ud544\uc694\ud55c \ub370\uc774\ud130\uc640 \ub7f0\ud0c0\uc784 \ud328\ud0a4\uc9c0\ub4e4\uc5d0 \ub300\ud55c \uc815\ubcf4 \uc800\uc7a5 \uae30\ub2a5")),(0,i.kt)("h3",{id:"10-dataset-and-feature-repository"},"10. Dataset and Feature Repository"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub370\uc774\ud130\uc5d0 \ub300\ud55c \uacf5\uc720, \uac80\uc0c9, \uc7ac\uc0ac\uc6a9 \uadf8\ub9ac\uace0 \ubc84\uc804 \uad00\ub9ac \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc774\ubca4\ud2b8 \uc2a4\ud2b8\ub9ac\ubc0d \ubc0f \uc628\ub77c\uc778 \ucd94\ub860 \uc791\uc5c5\uc5d0 \ub300\ud55c \uc2e4\uc2dc\uac04 \ucc98\ub9ac \ubc0f \uc800 \uc9c0\uc5f0 \uc11c\ube59 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc0ac\uc9c4, \ud14d\uc2a4\ud2b8, \ud14c\uc774\ube14 \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130 \uc9c0\uc6d0 \uae30\ub2a5")),(0,i.kt)("h3",{id:"11-ml-metadata-and-artifact-tracking"},"11. ML Metadata and Artifact Tracking"),(0,i.kt)("p",null," MLOps\uc758 \uac01 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \uc0b0\ucd9c\ubb3c\ub4e4\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4. ML \uba54\ud0c0\ub370\uc774\ud130\ub294 \uc774\ub7f0 \uc0b0\ucd9c\ubb3c\ub4e4\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.\nML \uba54\ud0c0\ub370\uc774\ud130\uc640 \uc0b0\ucd9c\ubb3c \uad00\ub9ac\ub294 \uc0b0\ucd9c\ubb3c\uc758 \uc704\uce58, \ud0c0\uc785, \uc18d\uc131, \uadf8\ub9ac\uace0 \uad00\ub828\ub41c \uc2e4\ud5d8(experiment)\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uad00\ub9ac\ud558\uae30 \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"ML \uc0b0\ucd9c\ubb3c\uc5d0 \ub300\ud55c \ud788\uc2a4\ud1a0\ub9ac \uad00\ub9ac \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc2e4\ud5d8\uacfc \ud30c\uc774\ud504\ub77c\uc778 \ud30c\ub77c\ubbf8\ud130 \uc124\uc815\uc5d0 \ub300\ud55c \ucd94\uc801, \uacf5\uc720 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"ML \uc0b0\ucd9c\ubb3c\uc5d0 \ub300\ud55c \uc800\uc7a5, \uc811\uadfc, \uc2dc\uac01\ud654, \ub2e4\uc6b4\ub85c\ub4dc \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\ub978 MLOps \uae30\ub2a5\uacfc\uc758 \ud1b5\ud569 \uae30\ub2a5 \uc81c\uacf5")))}c.isMDXComponent=!0},878:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/mlops-component-540cce1f22f97807b54c5e0dd1fec01e.png"}}]); \ No newline at end of file diff --git a/assets/js/f1d05694.5f460a40.js b/assets/js/f1d05694.5f460a40.js new file mode 100644 index 00000000..a967059e --- /dev/null +++ b/assets/js/f1d05694.5f460a40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8084],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,p=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),c=u(n),m=i,k=c["".concat(p,".").concat(m)]||c[m]||d[m]||l;return n?r.createElement(k,a(a({ref:t},s),{},{components:n})):r.createElement(k,a({ref:t},s))}));function k(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,a=new Array(l);a[0]=m;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o[c]="string"==typeof e?e:i,a[1]=o;for(var u=2;u{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>l,metadata:()=>o,toc:()=>u});var r=n(7462),i=(n(7294),n(3905));const l={title:"3. Components of MLOps",description:"Describe MLOps Components",sidebar_position:3,date:new Date("2021-12-03T00:00:00.000Z"),lastmod:new Date("2021-12-10T00:00:00.000Z"),contributors:["Youngcheol Jang"]},a=void 0,o={unversionedId:"introduction/component",id:"introduction/component",title:"3. Components of MLOps",description:"Describe MLOps Components",source:"@site/docs/introduction/component.md",sourceDirName:"introduction",slug:"/introduction/component",permalink:"/docs/introduction/component",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/introduction/component.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:3,frontMatter:{title:"3. Components of MLOps",description:"Describe MLOps Components",sidebar_position:3,date:"2021-12-03T00:00:00.000Z",lastmod:"2021-12-10T00:00:00.000Z",contributors:["Youngcheol Jang"]},sidebar:"tutorialSidebar",previous:{title:"2. Levels of MLOps",permalink:"/docs/introduction/levels"},next:{title:"4. Why Kubernetes?",permalink:"/docs/introduction/why_kubernetes"}},p={},u=[{value:"Practitioners guide to MLOps",id:"practitioners-guide-to-mlops",level:2},{value:"1. Experimentation",id:"1-experimentation",level:3},{value:"2. Data Processing",id:"2-data-processing",level:3},{value:"3. Model training",id:"3-model-training",level:3},{value:"4. Model evaluation",id:"4-model-evaluation",level:3},{value:"5. Model serving",id:"5-model-serving",level:3},{value:"6. Online experimentation",id:"6-online-experimentation",level:3},{value:"7. Model Monitoring",id:"7-model-monitoring",level:3},{value:"8. ML Pipeline",id:"8-ml-pipeline",level:3},{value:"9. Model Registry",id:"9-model-registry",level:3},{value:"10. Dataset and Feature Repository",id:"10-dataset-and-feature-repository",level:3},{value:"11. ML Metadata and Artifact Tracking",id:"11-ml-metadata-and-artifact-tracking",level:3}],s={toc:u},c="wrapper";function d(e){let{components:t,...l}=e;return(0,i.kt)(c,(0,r.Z)({},s,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"practitioners-guide-to-mlops"},"Practitioners guide to MLOps"),(0,i.kt)("p",null," 2021\ub144 5\uc6d4\uc5d0 \ubc1c\ud45c\ub41c \uad6c\uae00\uc758 ",(0,i.kt)("a",{parentName:"p",href:"https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf"},"white paper : Practitioners guide to MLOps: A framework for continuous delivery and automation of machine learning"),"\uc5d0\uc11c\ub294 MLOps\uc758 \ud575\uc2ec \uae30\ub2a5\ub4e4\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc744 \uc5b8\uae09\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"mlops-component",src:n(878).Z,width:"2352",height:"1890"})),(0,i.kt)("p",null," \uac01 \uae30\ub2a5\uc774 \uc5b4\ub5a4 \uc5ed\ud560\uc744 \ud558\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"1-experimentation"},"1. Experimentation"),(0,i.kt)("p",null," \uc2e4\ud5d8(Experimentation)\uc740 \uba38\uc2e0\ub7ec\ub2dd \uc5d4\uc9c0\ub2c8\uc5b4\ub4e4\uc774 \ub370\uc774\ud130\ub97c \ubd84\uc11d\ud558\uace0, \ud504\ub85c\ud1a0\ud0c0\uc785 \ubaa8\ub378\uc744 \ub9cc\ub4e4\uba70 \ud559\uc2b5 \uae30\ub2a5\uc744 \uad6c\ud604\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uae43(Git)\uacfc \uac19\uc740 \ubc84\uc804 \ucee8\ud2b8\ub864 \ub3c4\uad6c\uc640 \ud1b5\ud569\ub41c \ub178\ud2b8\ubd81(Jupyter Notebook) \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\ud55c \ub370\uc774\ud130, \ud558\uc774\ud37c \ud30c\ub77c\ubbf8\ud130, \ud3c9\uac00 \uc9c0\ud45c\ub97c \ud3ec\ud568\ud55c \uc2e4\ud5d8 \ucd94\uc801 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub370\uc774\ud130\uc640 \ubaa8\ub378\uc5d0 \ub300\ud55c \ubd84\uc11d \ubc0f \uc2dc\uac01\ud654 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"2-data-processing"},"2. Data Processing"),(0,i.kt)("p",null," \ub370\uc774\ud130 \ucc98\ub9ac(Data Processing)\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378 \uac1c\ubc1c \ub2e8\uacc4, \uc9c0\uc18d\uc801\uc778 \ud559\uc2b5(Continuous Training) \ub2e8\uacc4, \uadf8\ub9ac\uace0 API \ubc30\ud3ec(API Deployment) \ub2e8\uacc4\uc5d0\uc11c \ub9ce\uc740 \uc591\uc758 \ub370\uc774\ud130\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574 \uc8fc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ub370\uc774\ud130 \uc18c\uc2a4\uc640 \uc11c\ube44\uc2a4\uc5d0 \ud638\ud658\ub418\ub294 \ub370\uc774\ud130 \ucee4\ub125\ud130(connector) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc640 \ud638\ud658\ub418\ub294 \ub370\uc774\ud130 \uc778\ucf54\ub354(encoder) & \ub514\ucf54\ub354(decoder) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ub370\uc774\ud130 \ubcc0\ud658\uacfc \ud53c\ucc98 \uc5d4\uc9c0\ub2c8\uc5b4\ub9c1(feature engineering) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ud559\uc2b5\uacfc \uc11c\ube59\uc744 \uc704\ud55c \ud655\uc7a5 \uac00\ub2a5\ud55c \ubc30\uce58, \uc2a4\ud2b8\ub9bc \ub370\uc774\ud130 \ucc98\ub9ac \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"3-model-training"},"3. Model training"),(0,i.kt)("p",null," \ubaa8\ub378 \ud559\uc2b5(Model training)\uc740 \ubaa8\ub378 \ud559\uc2b5\uc744 \uc704\ud55c \uc54c\uace0\ub9ac\uc998\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \uc2e4\ud589\uc2dc\ucf1c\uc8fc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"ML \ud504\ub808\uc784\uc6cc\ud06c\uc758 \uc2e4\ud589\uc744 \uc704\ud55c \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc218\uc758 GPU / \ubd84\uc0b0 \ud559\uc2b5 \uc0ac\uc6a9\uc744 \uc704\ud55c \ubd84\uc0b0 \ud559\uc2b5 \ud658\uacbd \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ud558\uc774\ud37c \ud30c\ub77c\ubbf8\ud130 \ud29c\ub2dd\uacfc \ucd5c\uc801\ud654 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"4-model-evaluation"},"4. Model evaluation"),(0,i.kt)("p",null," \ubaa8\ub378 \ud3c9\uac00(Model evaluation)\ub294 \uc2e4\ud5d8 \ud658\uacbd\uacfc \uc0c1\uc6a9 \ud658\uacbd\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \ubaa8\ub378\uc758 \uc131\ub2a5\uc744 \uad00\ucc30\ud560 \uc218 \uc788\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud3c9\uac00 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \ubaa8\ub378 \uc131\ub2a5 \ud3c9\uac00 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \uc9c0\uc18d \ud559\uc2b5 \uc2e4\ud589 \uacb0\uacfc\uc5d0 \ub300\ud55c \uc608\uce21 \uc131\ub2a5 \ucd94\uc801"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \ubaa8\ub378\uc758 \uc131\ub2a5 \ube44\uad50\uc640 \uc2dc\uac01\ud654"),(0,i.kt)("li",{parentName:"ul"},"\ud574\uc11d\ud560 \uc218 \uc788\ub294 AI \uae30\uc220\uc744 \uc774\uc6a9\ud55c \ubaa8\ub378 \ucd9c\ub825 \ud574\uc11d \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"5-model-serving"},"5. Model serving"),(0,i.kt)("p",null," \ubaa8\ub378 \uc11c\ube59(Model serving)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uace0 \uc11c\ube59\ud558\uae30 \uc704\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uc800 \uc9c0\uc5f0 \ucd94\ub860\uacfc \uace0\uac00\uc6a9\uc131 \ucd94\ub860 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c ML \ubaa8\ub378 \uc11c\ube59 \ud504\ub808\uc784\uc6cc\ud06c \uc9c0\uc6d0(Tensorflow Serving, TorchServe, NVIDIA Triton, Scikit-learn, XGBoost. etc)"),(0,i.kt)("li",{parentName:"ul"},"\ubcf5\uc7a1\ud55c \ud615\ud0dc\uc758 \ucd94\ub860 \ub8e8\ud2f4 \uae30\ub2a5 \uc81c\uacf5, \uc608\ub97c \ub4e4\uc5b4 \uc804\ucc98\ub9ac(preprocess) \ub610\ub294 \ud6c4\ucc98\ub9ac(postprocess) \uae30\ub2a5\uacfc \ucd5c\uc885 \uacb0\uacfc\ub97c \uc704\ud574 \ub2e4\uc218\uc758 \ubaa8\ub378\uc774 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0\ub97c \ub9d0\ud569\ub2c8\ub2e4."),(0,i.kt)("li",{parentName:"ul"},"\uc21c\uac04\uc801\uc73c\ub85c \uce58\uc19f\ub294 \ucd94\ub860 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud55c \uc624\ud1a0 \uc2a4\ucf00\uc77c\ub9c1(autoscaling) \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ucd94\ub860 \uc694\uccad\uacfc \ucd94\ub860 \uacb0\uacfc\uc5d0 \ub300\ud55c \ub85c\uae45 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"6-online-experimentation"},"6. Online experimentation"),(0,i.kt)("p",null," \uc628\ub77c\uc778 \uc2e4\ud5d8(Online experimentation)\uc740 \uc0c8\ub85c\uc6b4 \ubaa8\ub378\uc774 \uc0dd\uc131\ub418\uc5c8\uc744 \ub54c, \uc774 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\uba74 \uc5b4\ub290 \uc815\ub3c4\uc758 \uc131\ub2a5\uc744 \ubcf4\uc77c \uac83\uc778\uc9c0 \uac80\uc99d\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \uc0c8 \ubaa8\ub378\uc744 \ubc30\ud3ec\ud558\ub294 \uac83\uae4c\uc9c0 \uc5f0\ub3d9\ud558\uae30 \uc704\ud574 \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\uc640 \uc5f0\ub3d9\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\uce74\ub098\ub9ac(canary) & \uc100\ub3c4(shadow) \ubc30\ud3ec \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"A/B \ud14c\uc2a4\ud2b8 \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\uba40\ud2f0 \uc554\ub4dc \ubc34\ub527(Multi-armed bandit) \ud14c\uc2a4\ud2b8 \uae30\ub2a5 \uc81c\uacf5")),(0,i.kt)("h3",{id:"7-model-monitoring"},"7. Model Monitoring"),(0,i.kt)("p",null,"\ubaa8\ub378 \ubaa8\ub2c8\ud130\ub9c1(Model Monitoring)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0 \ubc30\ud3ec\ub41c \ubaa8\ub378\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ub3d9\uc791\ud558\uace0 \uc788\ub294\uc9c0\ub97c \ubaa8\ub2c8\ud130\ub9c1\ud558\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ubaa8\ub378\uc758 \uc131\ub2a5\uc774 \ub5a8\uc5b4\uc838 \uc5c5\ub370\uc774\ud2b8\uac00 \ud544\uc694\ud55c\uc9c0\uc5d0 \ub300\ud55c \uc815\ubcf4 \ub4f1\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("h3",{id:"8-ml-pipeline"},"8. ML Pipeline"),(0,i.kt)("p",null,"\uba38\uc2e0\ub7ec\ub2dd \ud30c\uc774\ud504\ub77c\uc778(ML Pipeline)\uc740 \uc0c1\uc6a9 \ud658\uacbd\uc5d0\uc11c \ubcf5\uc7a1\ud55c ML \ud559\uc2b5\uacfc \ucd94\ub860 \uc791\uc5c5\uc744 \uad6c\uc131\ud558\uace0 \uc81c\uc5b4\ud558\uace0 \uc790\ub3d9\ud654\ud558\uae30 \uc704\ud55c \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub2e4\uc591\ud55c \uc774\ubca4\ud2b8\ub97c \uc18c\uc2a4\ub97c \ud1b5\ud55c \ud30c\uc774\ud504\ub77c\uc778 \uc2e4\ud589 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\ud30c\uc774\ud504\ub77c\uc778 \ud30c\ub77c\ubbf8\ud130\uc640 \uc0dd\uc131\ub418\ub294 \uc0b0\ucd9c\ubb3c \uad00\ub9ac\ub97c \uc704\ud55c \uba38\uc2e0\ub7ec\ub2dd \uba54\ud0c0\ub370\uc774\ud130 \ucd94\uc801\uacfc \uc5f0\ub3d9 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc778 \uba38\uc2e0\ub7ec\ub2dd \uc791\uc5c5\uc744 \uc704\ud55c \ub0b4\uc7a5 \ucef4\ud3ec\ub10c\ud2b8 \uc9c0\uc6d0\uacfc \uc0ac\uc6a9\uc790\uac00 \uc9c1\uc811 \uad6c\ud604\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc5d0 \ub300\ud55c \uc9c0\uc6d0 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc11c\ub85c \ub2e4\ub978 \uc2e4\ud589 \ud658\uacbd \uc81c\uacf5 \uae30\ub2a5")),(0,i.kt)("h3",{id:"9-model-registry"},"9. Model Registry"),(0,i.kt)("p",null," \ubaa8\ub378 \uc800\uc7a5\uc18c(Model Registry)\ub294 \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378\uc758 \uc0dd\uba85 \uc8fc\uae30(Lifecycle)\uc744 \uc911\uc559 \uc800\uc7a5\uc18c\uc5d0\uc11c \uad00\ub9ac\ud560 \uc218 \uc788\uac8c \ud574 \uc8fc\ub294 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud559\uc2b5\ub41c \ubaa8\ub378 \uadf8\ub9ac\uace0 \ubc30\ud3ec\ub41c \ubaa8\ub378\uc5d0 \ub300\ud55c \ub4f1\ub85d, \ucd94\uc801, \ubc84\uc800\ub2dd \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ubc30\ud3ec\ub97c \uc704\ud574 \ud544\uc694\ud55c \ub370\uc774\ud130\uc640 \ub7f0\ud0c0\uc784 \ud328\ud0a4\uc9c0\ub4e4\uc5d0 \ub300\ud55c \uc815\ubcf4 \uc800\uc7a5 \uae30\ub2a5")),(0,i.kt)("h3",{id:"10-dataset-and-feature-repository"},"10. Dataset and Feature Repository"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ub370\uc774\ud130\uc5d0 \ub300\ud55c \uacf5\uc720, \uac80\uc0c9, \uc7ac\uc0ac\uc6a9 \uadf8\ub9ac\uace0 \ubc84\uc804 \uad00\ub9ac \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc774\ubca4\ud2b8 \uc2a4\ud2b8\ub9ac\ubc0d \ubc0f \uc628\ub77c\uc778 \ucd94\ub860 \uc791\uc5c5\uc5d0 \ub300\ud55c \uc2e4\uc2dc\uac04 \ucc98\ub9ac \ubc0f \uc800 \uc9c0\uc5f0 \uc11c\ube59 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc0ac\uc9c4, \ud14d\uc2a4\ud2b8, \ud14c\uc774\ube14 \ud615\ud0dc\uc758 \ub370\uc774\ud130\uc640 \uac19\uc740 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \ub370\uc774\ud130 \uc9c0\uc6d0 \uae30\ub2a5")),(0,i.kt)("h3",{id:"11-ml-metadata-and-artifact-tracking"},"11. ML Metadata and Artifact Tracking"),(0,i.kt)("p",null," MLOps\uc758 \uac01 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ub2e4\uc591\ud55c \ud615\ud0dc\uc758 \uc0b0\ucd9c\ubb3c\ub4e4\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4. ML \uba54\ud0c0\ub370\uc774\ud130\ub294 \uc774\ub7f0 \uc0b0\ucd9c\ubb3c\ub4e4\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.\nML \uba54\ud0c0\ub370\uc774\ud130\uc640 \uc0b0\ucd9c\ubb3c \uad00\ub9ac\ub294 \uc0b0\ucd9c\ubb3c\uc758 \uc704\uce58, \ud0c0\uc785, \uc18d\uc131, \uadf8\ub9ac\uace0 \uad00\ub828\ub41c \uc2e4\ud5d8(experiment)\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \uad00\ub9ac\ud558\uae30 \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"ML \uc0b0\ucd9c\ubb3c\uc5d0 \ub300\ud55c \ud788\uc2a4\ud1a0\ub9ac \uad00\ub9ac \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"\uc2e4\ud5d8\uacfc \ud30c\uc774\ud504\ub77c\uc778 \ud30c\ub77c\ubbf8\ud130 \uc124\uc815\uc5d0 \ub300\ud55c \ucd94\uc801, \uacf5\uc720 \uae30\ub2a5"),(0,i.kt)("li",{parentName:"ul"},"ML \uc0b0\ucd9c\ubb3c\uc5d0 \ub300\ud55c \uc800\uc7a5, \uc811\uadfc, \uc2dc\uac01\ud654, \ub2e4\uc6b4\ub85c\ub4dc \uae30\ub2a5 \uc81c\uacf5"),(0,i.kt)("li",{parentName:"ul"},"\ub2e4\ub978 MLOps \uae30\ub2a5\uacfc\uc758 \ud1b5\ud569 \uae30\ub2a5 \uc81c\uacf5")))}d.isMDXComponent=!0},878:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/mlops-component-540cce1f22f97807b54c5e0dd1fec01e.png"}}]); \ No newline at end of file diff --git a/assets/js/f28dfc8e.27ee0fd9.js b/assets/js/f28dfc8e.27ee0fd9.js new file mode 100644 index 00000000..dd5b679c --- /dev/null +++ b/assets/js/f28dfc8e.27ee0fd9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3641],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>c});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function p(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var i=n.createContext({}),m=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},d=function(t){var e=m(t.components);return n.createElement(i.Provider,{value:e},t.children)},s="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,i=t.parentName,d=o(t,["components","mdxType","originalType","parentName"]),s=m(a),k=r,c=s["".concat(i,".").concat(k)]||s[k]||u[k]||l;return a?n.createElement(c,p(p({ref:e},d),{},{components:a})):n.createElement(c,p({ref:e},d))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=k;var o={};for(var i in e)hasOwnProperty.call(e,i)&&(o[i]=e[i]);o.originalType=t,o[s]="string"==typeof t?t:r,p[1]=o;for(var m=2;m{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>p,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>m});var n=a(7462),r=(a(7294),a(3905));const l={title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",date:new Date("2021-12-21T00:00:00.000Z"),lastmod:new Date("2021-12-21T00:00:00.000Z")},p=void 0,o={unversionedId:"further-readings/info",id:"further-readings/info",title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",description:"MLOps Component",source:"@site/docs/further-readings/info.md",sourceDirName:"further-readings",slug:"/further-readings/info",permalink:"/docs/further-readings/info",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/further-readings/info.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",frontMatter:{title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",date:"2021-12-21T00:00:00.000Z",lastmod:"2021-12-21T00:00:00.000Z"},sidebar:"tutorialSidebar",previous:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",permalink:"/docs/appendix/metallb"}},i={},m=[{value:"MLOps Component",id:"mlops-component",level:2}],d={toc:m},s="wrapper";function u(t){let{components:e,...l}=t;return(0,r.kt)(s,(0,n.Z)({},d,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"mlops-component"},"MLOps Component"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/introduction/component"},"MLOps Concepts"),"\uc5d0\uc11c \ub2e4\ub8e8\uc5c8\ub358 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub3c4\uc2dd\ud654\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-0.png",src:a(6244).Z,width:"1600",height:"588"})),(0,r.kt)("p",null,"\uc774 \uc911 ",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \ub2e4\ub8ec \uae30\uc220 \uc2a4\ud0dd\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-1.png",src:a(3249).Z,width:"1600",height:"594"})),(0,r.kt)("p",null,"\ubcf4\uc2dc\ub294 \uac83\ucc98\ub7fc \uc544\uc9c1 \uc6b0\ub9ac\uac00 \ub2e4\ub8e8\uc9c0 \ubabb\ud55c \ub9ce\uc740 MLOps \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4. "),(0,r.kt)("p",null,"\uc2dc\uac04 \uad00\uacc4\uc0c1 \uc774\ubc88\uc5d0 \ubaa8\ub450 \ub2e4\ub8e8\uc9c0\ub294 \ubabb\ud588\uc9c0\ub9cc, \ub9cc\uc57d \ud544\uc694\ud558\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4\ub4e4\uc744 \uba3c\uc800 \ucc38\uace0\ud574\ubcf4\uba74 \uc88b\uc744 \uac83 \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-2.png",src:a(9505).Z,width:"1616",height:"588"})),(0,r.kt)("p",null,"\uc138\ubd80 \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Mgmt."),(0,r.kt)("th",{parentName:"tr",align:null},"Component"),(0,r.kt)("th",{parentName:"tr",align:null},"Open Soruce"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Collection"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://kafka.apache.org/"},"Kafka"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Validation"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://beam.apache.org/"},"Beam"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Feature Store"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://flink.apache.org/"},"Flink"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ML Model Dev. & Experiment"),(0,r.kt)("td",{parentName:"tr",align:null},"Modeling"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://jupyter.org/"},"Jupyter"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Analysis & Experiment Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://mlflow.org/"},"MLflow"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"HPO Tuning & AutoML"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/kubeflow/katib"},"Katib"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Deploy Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Serving Framework"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.seldon.io/projects/seldon-core/en/latest/index.html"},"Seldon Core"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"A/B Test"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://iter8.tools/"},"Iter8"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Monitoring"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://grafana.com/oss/grafana/"},"Grafana"),", ",(0,r.kt)("a",{parentName:"td",href:"https://prometheus.io/"},"Prometheus"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Process Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"pipeline"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.kubeflow.org/"},"Kubeflow"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"CI/CD"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/actions"},"Github Action"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Continuous Training"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://argoproj.github.io/events/"},"Argo Events"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Platform Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Configuration Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.consul.io/"},"Consul"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Code Version Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/"},"Github"),", ",(0,r.kt)("a",{parentName:"td",href:"https://min.io/"},"Minio"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Logging"),(0,r.kt)("td",{parentName:"tr",align:null},"(EFK) ",(0,r.kt)("a",{parentName:"td",href:"https://www.elastic.co/kr/elasticsearch/"},"Elastic Search"),", ",(0,r.kt)("a",{parentName:"td",href:"https://www.fluentd.org/"},"Fluentd"),", ",(0,r.kt)("a",{parentName:"td",href:"https://www.elastic.co/kr/kibana/"},"Kibana"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Resource Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://kubernetes.io/"},"Kubernetes"))))))}u.isMDXComponent=!0},6244:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-0-75a5736738cbd950e04122e6252dc2c1.png"},3249:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-1-1ab94bd3c5f055c056a4ffc84f4f03f4.png"},9505:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-2-32f97815a2c7d02a32f080a996712ca6.png"}}]); \ No newline at end of file diff --git a/assets/js/f28dfc8e.ed2075e9.js b/assets/js/f28dfc8e.ed2075e9.js deleted file mode 100644 index 9ffece72..00000000 --- a/assets/js/f28dfc8e.ed2075e9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[3641],{3905:(t,e,a)=>{a.d(e,{Zo:()=>d,kt:()=>c});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function p(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var i=n.createContext({}),m=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},d=function(t){var e=m(t.components);return n.createElement(i.Provider,{value:e},t.children)},s="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},k=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,i=t.parentName,d=o(t,["components","mdxType","originalType","parentName"]),s=m(a),k=r,c=s["".concat(i,".").concat(k)]||s[k]||u[k]||l;return a?n.createElement(c,p(p({ref:e},d),{},{components:a})):n.createElement(c,p({ref:e},d))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=k;var o={};for(var i in e)hasOwnProperty.call(e,i)&&(o[i]=e[i]);o.originalType=t,o[s]="string"==typeof t?t:r,p[1]=o;for(var m=2;m{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>p,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>m});var n=a(7462),r=(a(7294),a(3905));const l={title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",date:new Date("2021-12-21T00:00:00.000Z"),lastmod:new Date("2021-12-21T00:00:00.000Z")},p=void 0,o={unversionedId:"further-readings/info",id:"further-readings/info",title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",description:"MLOps Component",source:"@site/docs/further-readings/info.md",sourceDirName:"further-readings",slug:"/further-readings/info",permalink:"/docs/further-readings/info",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/further-readings/info.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",frontMatter:{title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",date:"2021-12-21T00:00:00.000Z",lastmod:"2021-12-21T00:00:00.000Z"},sidebar:"tutorialSidebar",previous:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",permalink:"/docs/appendix/metallb"}},i={},m=[{value:"MLOps Component",id:"mlops-component",level:2}],d={toc:m},s="wrapper";function u(t){let{components:e,...l}=t;return(0,r.kt)(s,(0,n.Z)({},d,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"mlops-component"},"MLOps Component"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/introduction/component"},"MLOps Concepts"),"\uc5d0\uc11c \ub2e4\ub8e8\uc5c8\ub358 \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub3c4\uc2dd\ud654\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-0.png",src:a(6244).Z,width:"1600",height:"588"})),(0,r.kt)("p",null,"\uc774 \uc911 ",(0,r.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps")," \uc5d0\uc11c \ub2e4\ub8ec \uae30\uc220 \uc2a4\ud0dd\ub4e4\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-1.png",src:a(3249).Z,width:"1600",height:"594"})),(0,r.kt)("p",null,"\ubcf4\uc2dc\ub294 \uac83\ucc98\ub7fc \uc544\uc9c1 \uc6b0\ub9ac\uac00 \ub2e4\ub8e8\uc9c0 \ubabb\ud55c \ub9ce\uc740 MLOps \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4. "),(0,r.kt)("p",null,"\uc2dc\uac04 \uad00\uacc4\uc0c1 \uc774\ubc88\uc5d0 \ubaa8\ub450 \ub2e4\ub8e8\uc9c0\ub294 \ubabb\ud588\uc9c0\ub9cc, \ub9cc\uc57d \ud544\uc694\ud558\ub2e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uc624\ud508\uc18c\uc2a4\ub4e4\uc744 \uba3c\uc800 \ucc38\uace0\ud574\ubcf4\uba74 \uc88b\uc744 \uac83 \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"open-stacks-2.png",src:a(9505).Z,width:"1616",height:"588"})),(0,r.kt)("p",null,"\uc138\ubd80 \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Mgmt."),(0,r.kt)("th",{parentName:"tr",align:null},"Component"),(0,r.kt)("th",{parentName:"tr",align:null},"Open Soruce"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Data Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Collection"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://kafka.apache.org/"},"Kafka"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Validation"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://beam.apache.org/"},"Beam"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Feature Store"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://flink.apache.org/"},"Flink"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ML Model Dev. & Experiment"),(0,r.kt)("td",{parentName:"tr",align:null},"Modeling"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://jupyter.org/"},"Jupyter"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Analysis & Experiment Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://mlflow.org/"},"MLflow"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"HPO Tuning & AutoML"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/kubeflow/katib"},"Katib"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Deploy Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Serving Framework"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.seldon.io/projects/seldon-core/en/latest/index.html"},"Seldon Core"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"A/B Test"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://iter8.tools/"},"Iter8"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Monitoring"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://grafana.com/oss/grafana/"},"Grafana"),", ",(0,r.kt)("a",{parentName:"td",href:"https://prometheus.io/"},"Prometheus"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Process Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"pipeline"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.kubeflow.org/"},"Kubeflow"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"CI/CD"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://docs.github.com/en/actions"},"Github Action"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Continuous Training"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://argoproj.github.io/events/"},"Argo Events"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Platform Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},"Configuration Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.consul.io/"},"Consul"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Code Version Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://github.com/"},"Github"),", ",(0,r.kt)("a",{parentName:"td",href:"https://min.io/"},"Minio"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Logging"),(0,r.kt)("td",{parentName:"tr",align:null},"(EFK) ",(0,r.kt)("a",{parentName:"td",href:"https://www.elastic.co/kr/elasticsearch/"},"Elastic Search"),", ",(0,r.kt)("a",{parentName:"td",href:"https://www.fluentd.org/"},"Fluentd"),", ",(0,r.kt)("a",{parentName:"td",href:"https://www.elastic.co/kr/kibana/"},"Kibana"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null}),(0,r.kt)("td",{parentName:"tr",align:null},"Resource Mgmt."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://kubernetes.io/"},"Kubernetes"))))))}u.isMDXComponent=!0},6244:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-0-75a5736738cbd950e04122e6252dc2c1.png"},3249:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-1-1ab94bd3c5f055c056a4ffc84f4f03f4.png"},9505:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/open-stacks-2-32f97815a2c7d02a32f080a996712ca6.png"}}]); \ No newline at end of file diff --git a/assets/js/f84c40fb.82da9007.js b/assets/js/f84c40fb.82da9007.js new file mode 100644 index 00000000..fc26b357 --- /dev/null +++ b/assets/js/f84c40fb.82da9007.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9700],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>c});var a=t(7294);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(p[t]=e[t]);return p}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(p[t]=e[t])}return p}var o=a.createContext({}),u=function(e){var n=a.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},m=function(e){var n=u(e.components);return a.createElement(o.Provider,{value:n},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},_=a.forwardRef((function(e,n){var t=e.components,p=e.mdxType,r=e.originalType,o=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=u(t),_=p,c=s["".concat(o,".").concat(_)]||s[_]||d[_]||r;return t?a.createElement(c,i(i({ref:n},m),{},{components:t})):a.createElement(c,i({ref:n},m))}));function c(e,n){var t=arguments,p=n&&n.mdxType;if("string"==typeof e||p){var r=t.length,i=new Array(r);i[0]=_;var l={};for(var o in n)hasOwnProperty.call(n,o)&&(l[o]=n[o]);l.originalType=e,l[s]="string"==typeof e?e:p,i[1]=l;for(var u=2;u{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var a=t(7462),p=(t(7294),t(3905));const r={title:"11. Pipeline - Run Result",description:"",sidebar_position:11,contributors:["Jongseob Jeon","SeungTae Kim"]},i=void 0,l={unversionedId:"kubeflow/advanced-run",id:"version-1.0/kubeflow/advanced-run",title:"11. Pipeline - Run Result",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-run.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-run",permalink:"/docs/1.0/kubeflow/advanced-run",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-run.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:11,frontMatter:{title:"11. Pipeline - Run Result",description:"",sidebar_position:11,contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"10. Pipeline - Setting",permalink:"/docs/1.0/kubeflow/advanced-pipeline"},next:{title:"12. Component - MLFlow",permalink:"/docs/1.0/kubeflow/advanced-mlflow"}},o={},u=[{value:"Run Result",id:"run-result",level:2},{value:"Graph",id:"graph",level:2},{value:"Input/Output",id:"inputoutput",level:3},{value:"Logs",id:"logs",level:3},{value:"Visualizations",id:"visualizations",level:3},{value:"Run output",id:"run-output",level:2},{value:"Config",id:"config",level:2}],m={toc:u},s="wrapper";function d(e){let{components:n,...r}=e;return(0,p.kt)(s,(0,a.Z)({},m,r,{components:n,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"run-result"},"Run Result"),(0,p.kt)("p",null,"Run \uc2e4\ud589 \uacb0\uacfc\ub97c \ub20c\ub7ec\ubcf4\uba74 3\uac1c\uc758 \ud0ed\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4.\n\uac01\uac01 Graph, Run output, Config \uc785\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-0.png",src:t(6394).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"graph"},"Graph"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-1.png",src:t(6255).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"\uadf8\ub798\ud504\uc5d0\uc11c\ub294 \uc2e4\ud589\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub204\ub974\uba74 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"inputoutput"},"Input/Output"),(0,p.kt)("p",null,"Input/Output \ud0ed\uc740 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud55c Config\ub4e4\uacfc Input, Output Artifacts\ub97c \ud655\uc778\ud558\uace0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"logs"},"Logs"),(0,p.kt)("p",null,"Logs\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc \uc2e4\ud589 \uc911 \ub098\uc624\ub294 \ubaa8\ub4e0 stdout\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\ub2e4\ub9cc pod\uc740 \uc77c\uc815 \uc2dc\uac04\uc774 \uc9c0\ub09c \ud6c4 \uc9c0\uc6cc\uc9c0\uae30 \ub54c\ubb38\uc5d0 \uc77c\uc815 \uc2dc\uac04\uc774 \uc9c0\ub098\uba74 \uc774 \ud0ed\uc5d0\uc11c\ub294 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\uc774\ub54c\ub294 Output artifacts\uc758 main-logs\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"visualizations"},"Visualizations"),(0,p.kt)("p",null,"Visualizations\uc5d0\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0dd\uc131\ub41c \ud50c\ub78f\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4."),(0,p.kt)("p",null,"\ud50c\ub78f\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},'mlpipeline_ui_metadata: OutputPath("UI_Metadata")')," argument\ub85c \ubcf4\uc5ec\uc8fc\uace0 \uc2f6\uc740 \uac12\uc744 \uc800\uc7a5\ud558\uba74 \ub429\ub2c8\ub2e4. \uc774 \ub54c \ud50c\ub78f\uc758 \ud615\ud0dc\ub294 html \ud3ec\ub9f7\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'\n@partial(\n create_component_from_func,\n packages_to_install=["matplotlib"],\n)\ndef plot_linear(\n mlpipeline_ui_metadata: OutputPath("UI_Metadata")\n):\n import base64\n import json\n from io import BytesIO\n\n import matplotlib.pyplot as plt\n\n plt.plot(x=[1, 2, 3], y=[1, 2,3])\n\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n')),(0,p.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import create_component_from_func, OutputPath\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["matplotlib"],\n)\ndef plot_linear(mlpipeline_ui_metadata: OutputPath("UI_Metadata")):\n import base64\n import json\n from io import BytesIO\n\n import matplotlib.pyplot as plt\n\n plt.plot([1, 2, 3], [1, 2, 3])\n\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n\n\n@pipeline(name="plot_pipeline")\ndef plot_pipeline():\n plot_linear()\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(plot_pipeline, "plot_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \ub098\uc628 ",(0,p.kt)("inlineCode",{parentName:"p"},"plot_pipeline.yaml"),"\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("details",null,(0,p.kt)("summary",null,"plot_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: plot-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9, pipelines.kubeflow.org/pipeline_compilation_time: \'2\n022-01-17T13:31:32.963214\',\n pipelines.kubeflow.org/pipeline_spec: \'{"name": "plot_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9}\nspec:\n entrypoint: plot-pipeline\n templates:\n - name: plot-linear\n container:\n args: [--mlpipeline-ui-metadata, /tmp/outputs/mlpipeline_ui_metadata/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'matplotlib\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet\n --no-warn-script-location \'matplotlib\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n def plot_linear(mlpipeline_ui_metadata):\n import base64\n import json\n from io import BytesIO\n import matplotlib.pyplot as plt\n plt.plot([1, 2, 3], [1, 2, 3])\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Plot linear\', description=\'\')\n _parser.add_argument("--mlpipeline-ui-metadata", dest="mlpipeline_ui_metadata", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n _outputs = plot_linear(**_parsed_args)\n image: python:3.7\n outputs:\n artifacts:\n - {name: mlpipeline-ui-metadata, path: /tmp/outputs/mlpipeline_ui_metadata/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--mlpipeline-ui-metadata", {"outputPath": "mlpipeline_ui_metadata"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'matplotlib\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'\'matplotlib\'\'\n --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef plot_linear(mlpipeline_ui_metadata):\\n import\n base64\\n import json\\n from io import BytesIO\\n\\n import matplotlib.pyplot\n as plt\\n\\n plt.plot([1, 2, 3], [1, 2, 3])\\n\\n tmpfile = BytesIO()\\n plt.savefig(tmpfile,\n format=\\"png\\")\\n encoded = base64.b64encode(tmpfile.getvalue()).decode(\\"utf-8\\")\\n\\n html\n = f\\"\\"\\n metadata = {\\n \\"outputs\\":\n [\\n {\\n \\"type\\": \\"web-app\\",\\n \\"storage\\":\n \\"inline\\",\\n \\"source\\": html,\\n },\\n ],\\n }\\n with\n open(mlpipeline_ui_metadata, \\"w\\") as html_writer:\\n json.dump(metadata,\n html_writer)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Plot\n linear\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--mlpipeline-ui-metadata\\",\n dest=\\"mlpipeline_ui_metadata\\", type=_make_parent_dirs_and_return_path,\n required=True, default=argparse.SUPPRESS)\\n_parsed_args = vars(_parser.parse_args())\\n\\n_outputs\n = plot_linear(**_parsed_args)\\n"], "image": "python:3.7"}}, "name": "Plot\n linear", "outputs": [{"name": "mlpipeline_ui_metadata", "type": "UI_Metadata"}]}\',\n pipelines.kubeflow.org/component_ref: \'{}\'}\n - name: plot-pipeline\n dag:\n tasks:\n - {name: plot-linear, template: plot-linear}\n arguments:\n parameters: []\n serviceAccountName: pipeline-runner\n')))),(0,p.kt)("p",null,"\uc2e4\ud589 \ud6c4 Visualization\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-5.png",src:t(2244).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"run-output"},"Run output"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-2.png",src:t(6266).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"Run output\uc740 kubeflow\uc5d0\uc11c \uc9c0\uc815\ud55c \ud615\ud0dc\ub85c \uc0dd\uae34 Artifacts\ub97c \ubaa8\uc544\uc11c \ubcf4\uc5ec\uc8fc\ub294 \uacf3\uc774\uba70 \ud3c9\uac00 \uc9c0\ud45c(Metric)\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4."),(0,p.kt)("p",null,"\ud3c9\uac00 \uc9c0\ud45c(Metric)\uc744 \ubcf4\uc5ec\uc8fc\uae30 \uc704\ud574\uc11c\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},'mlpipeline_metrics_path: OutputPath("Metrics")')," argument\uc5d0 \ubcf4\uc5ec\uc8fc\uace0 \uc2f6\uc740 \uc774\ub984\uacfc \uac12\uc744 json \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uba74 \ub429\ub2c8\ub2e4.\n\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'@create_component_from_func\ndef show_metric_of_sum(\n number: int,\n mlpipeline_metrics_path: OutputPath("Metrics"),\n ):\n import json\n metrics = {\n "metrics": [\n {\n "name": "sum_value",\n "numberValue": number,\n },\n ],\n }\n with open(mlpipeline_metrics_path, "w") as f:\n json.dump(metrics, f)\n')),(0,p.kt)("p",null,"\ud3c9\uac00 \uc9c0\ud45c\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c ",(0,p.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-pipeline"},"\ud30c\uc774\ud504\ub77c\uc778"),"\uc5d0\uc11c \uc0dd\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc5d0 \ucd94\uac00 \ud6c4 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n\uc804\uccb4 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func, OutputPath\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int) -> int:\n sum_number = number_1 + number_2\n print(sum_number)\n return sum_number\n\n@create_component_from_func\ndef show_metric_of_sum(\n number: int,\n mlpipeline_metrics_path: OutputPath("Metrics"),\n ):\n import json\n metrics = {\n "metrics": [\n {\n "name": "sum_value",\n "numberValue": number,\n },\n ],\n }\n with open(mlpipeline_metrics_path, "w") as f:\n json.dump(metrics, f)\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n show_metric_of_sum(sum_result.output)\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc2e4\ud589 \ud6c4 Run Output\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-4.png",src:t(1882).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"config"},"Config"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-3.png",src:t(1487).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"Config\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778 Config\ub85c \uc785\ub825\ubc1b\uc740 \ubaa8\ub4e0 \uac12\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},6394:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-0-adc975b65f29dee20a2bf33c969773d5.png"},6255:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-1-cfdbe4b3c9d101eecde409c9baf10dbb.png"},6266:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-2-2b0de3bdf8fa16c0e318d2dffda1f9f8.png"},1487:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-3-13783474cf32a499f90a11fc84575eea.png"},1882:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-4-3bfbf40826566f37cb8512a2e2889038.png"},2244:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-5-8de88b76e09f491c9a7c86642a12fbd9.png"}}]); \ No newline at end of file diff --git a/assets/js/f84c40fb.b34894e6.js b/assets/js/f84c40fb.b34894e6.js deleted file mode 100644 index e5fdb28f..00000000 --- a/assets/js/f84c40fb.b34894e6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9700],{3905:(e,n,t)=>{t.d(n,{Zo:()=>m,kt:()=>c});var a=t(7294);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(p[t]=e[t]);return p}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(p[t]=e[t])}return p}var o=a.createContext({}),u=function(e){var n=a.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},m=function(e){var n=u(e.components);return a.createElement(o.Provider,{value:n},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},_=a.forwardRef((function(e,n){var t=e.components,p=e.mdxType,r=e.originalType,o=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=u(t),_=p,c=s["".concat(o,".").concat(_)]||s[_]||d[_]||r;return t?a.createElement(c,i(i({ref:n},m),{},{components:t})):a.createElement(c,i({ref:n},m))}));function c(e,n){var t=arguments,p=n&&n.mdxType;if("string"==typeof e||p){var r=t.length,i=new Array(r);i[0]=_;var l={};for(var o in n)hasOwnProperty.call(n,o)&&(l[o]=n[o]);l.originalType=e,l[s]="string"==typeof e?e:p,i[1]=l;for(var u=2;u{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var a=t(7462),p=(t(7294),t(3905));const r={title:"11. Pipeline - Run Result",description:"",sidebar_position:11,contributors:["Jongseob Jeon","SeungTae Kim"]},i=void 0,l={unversionedId:"kubeflow/advanced-run",id:"version-1.0/kubeflow/advanced-run",title:"11. Pipeline - Run Result",description:"",source:"@site/versioned_docs/version-1.0/kubeflow/advanced-run.md",sourceDirName:"kubeflow",slug:"/kubeflow/advanced-run",permalink:"/docs/1.0/kubeflow/advanced-run",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/kubeflow/advanced-run.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:11,frontMatter:{title:"11. Pipeline - Run Result",description:"",sidebar_position:11,contributors:["Jongseob Jeon","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"10. Pipeline - Setting",permalink:"/docs/1.0/kubeflow/advanced-pipeline"},next:{title:"12. Component - MLFlow",permalink:"/docs/1.0/kubeflow/advanced-mlflow"}},o={},u=[{value:"Run Result",id:"run-result",level:2},{value:"Graph",id:"graph",level:2},{value:"Input/Output",id:"inputoutput",level:3},{value:"Logs",id:"logs",level:3},{value:"Visualizations",id:"visualizations",level:3},{value:"Run output",id:"run-output",level:2},{value:"Config",id:"config",level:2}],m={toc:u},s="wrapper";function d(e){let{components:n,...r}=e;return(0,p.kt)(s,(0,a.Z)({},m,r,{components:n,mdxType:"MDXLayout"}),(0,p.kt)("h2",{id:"run-result"},"Run Result"),(0,p.kt)("p",null,"Run \uc2e4\ud589 \uacb0\uacfc\ub97c \ub20c\ub7ec\ubcf4\uba74 3\uac1c\uc758 \ud0ed\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4.\n\uac01\uac01 Graph, Run output, Config \uc785\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-0.png",src:t(6394).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"graph"},"Graph"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-1.png",src:t(6255).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"\uadf8\ub798\ud504\uc5d0\uc11c\ub294 \uc2e4\ud589\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub97c \ub204\ub974\uba74 \ucef4\ud3ec\ub10c\ud2b8\uc758 \uc2e4\ud589 \uc815\ubcf4\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"inputoutput"},"Input/Output"),(0,p.kt)("p",null,"Input/Output \ud0ed\uc740 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud55c Config\ub4e4\uacfc Input, Output Artifacts\ub97c \ud655\uc778\ud558\uace0 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"logs"},"Logs"),(0,p.kt)("p",null,"Logs\uc5d0\uc11c\ub294 \ud30c\uc774\uc36c \ucf54\ub4dc \uc2e4\ud589 \uc911 \ub098\uc624\ub294 \ubaa8\ub4e0 stdout\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\ub2e4\ub9cc pod\uc740 \uc77c\uc815 \uc2dc\uac04\uc774 \uc9c0\ub09c \ud6c4 \uc9c0\uc6cc\uc9c0\uae30 \ub54c\ubb38\uc5d0 \uc77c\uc815 \uc2dc\uac04\uc774 \uc9c0\ub098\uba74 \uc774 \ud0ed\uc5d0\uc11c\ub294 \ud655\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\uc774\ub54c\ub294 Output artifacts\uc758 main-logs\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("h3",{id:"visualizations"},"Visualizations"),(0,p.kt)("p",null,"Visualizations\uc5d0\uc11c\ub294 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0dd\uc131\ub41c \ud50c\ub78f\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4."),(0,p.kt)("p",null,"\ud50c\ub78f\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},'mlpipeline_ui_metadata: OutputPath("UI_Metadata")')," argument\ub85c \ubcf4\uc5ec\uc8fc\uace0 \uc2f6\uc740 \uac12\uc744 \uc800\uc7a5\ud558\uba74 \ub429\ub2c8\ub2e4. \uc774 \ub54c \ud50c\ub78f\uc758 \ud615\ud0dc\ub294 html \ud3ec\ub9f7\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.\n\ubcc0\ud658\ud558\ub294 \uacfc\uc815\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'\n@partial(\n create_component_from_func,\n packages_to_install=["matplotlib"],\n)\ndef plot_linear(\n mlpipeline_ui_metadata: OutputPath("UI_Metadata")\n):\n import base64\n import json\n from io import BytesIO\n\n import matplotlib.pyplot as plt\n\n plt.plot(x=[1, 2, 3], y=[1, 2,3])\n\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n')),(0,p.kt)("p",null,"\ud30c\uc774\ud504\ub77c\uc778\uc73c\ub85c \uc791\uc131\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub429\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'from functools import partial\n\nimport kfp\nfrom kfp.components import create_component_from_func, OutputPath\nfrom kfp.dsl import pipeline\n\n\n@partial(\n create_component_from_func,\n packages_to_install=["matplotlib"],\n)\ndef plot_linear(mlpipeline_ui_metadata: OutputPath("UI_Metadata")):\n import base64\n import json\n from io import BytesIO\n\n import matplotlib.pyplot as plt\n\n plt.plot([1, 2, 3], [1, 2, 3])\n\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n\n\n@pipeline(name="plot_pipeline")\ndef plot_pipeline():\n plot_linear()\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(plot_pipeline, "plot_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud574\uc11c \ub098\uc628 ",(0,p.kt)("inlineCode",{parentName:"p"},"plot_pipeline.yaml"),"\uc744 \ud655\uc778\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("details",null,(0,p.kt)("summary",null,"plot_pipeline.yaml"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: argoproj.io/v1alpha1\nkind: Workflow\nmetadata:\n generateName: plot-pipeline-\n annotations: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9, pipelines.kubeflow.org/pipeline_compilation_time: \'2\n022-01-17T13:31:32.963214\',\n pipelines.kubeflow.org/pipeline_spec: \'{"name": "plot_pipeline"}\'}\n labels: {pipelines.kubeflow.org/kfp_sdk_version: 1.8.9}\nspec:\n entrypoint: plot-pipeline\n templates:\n - name: plot-linear\n container:\n args: [--mlpipeline-ui-metadata, /tmp/outputs/mlpipeline_ui_metadata/data]\n command:\n - sh\n - -c\n - (PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet --no-warn-script-location\n \'matplotlib\' || PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip install --quiet\n --no-warn-script-location \'matplotlib\' --user) && "$0" "$@"\n - sh\n - -ec\n - |\n program_path=$(mktemp)\n printf "%s" "$0" > "$program_path"\n python3 -u "$program_path" "$@"\n - |\n def _make_parent_dirs_and_return_path(file_path: str):\n import os\n os.makedirs(os.path.dirname(file_path), exist_ok=True)\n return file_path\n def plot_linear(mlpipeline_ui_metadata):\n import base64\n import json\n from io import BytesIO\n import matplotlib.pyplot as plt\n plt.plot([1, 2, 3], [1, 2, 3])\n tmpfile = BytesIO()\n plt.savefig(tmpfile, format="png")\n encoded = base64.b64encode(tmpfile.getvalue()).decode("utf-8")\n html = f""\n metadata = {\n "outputs": [\n {\n "type": "web-app",\n "storage": "inline",\n "source": html,\n },\n ],\n }\n with open(mlpipeline_ui_metadata, "w") as html_writer:\n json.dump(metadata, html_writer)\n\n import argparse\n _parser = argparse.ArgumentParser(prog=\'Plot linear\', description=\'\')\n _parser.add_argument("--mlpipeline-ui-metadata", dest="mlpipeline_ui_metadata", type=_make_parent_dirs_and_return_path, required=True, default=argparse.SUPPRESS)\n _parsed_args = vars(_parser.parse_args())\n _outputs = plot_linear(**_parsed_args)\n image: python:3.7\n outputs:\n artifacts:\n - {name: mlpipeline-ui-metadata, path: /tmp/outputs/mlpipeline_ui_metadata/data}\n metadata:\n labels:\n pipelines.kubeflow.org/kfp_sdk_version: 1.8.9\n pipelines.kubeflow.org/pipeline-sdk-type: kfp\n pipelines.kubeflow.org/enable_caching: "true"\n annotations: {pipelines.kubeflow.org/component_spec: \'{"implementation": {"container":\n {"args": ["--mlpipeline-ui-metadata", {"outputPath": "mlpipeline_ui_metadata"}],\n "command": ["sh", "-c", "(PIP_DISABLE_PIP_VERSION_CHECK=1 python3 -m pip\n install --quiet --no-warn-script-location \'\'matplotlib\'\' || PIP_DISABLE_PIP_VERSION_CHECK=1\n python3 -m pip install --quiet --no-warn-script-location \'\'matplotlib\'\'\n --user) && \\"$0\\" \\"$@\\"", "sh", "-ec", "program_path=$(mktemp)\\nprintf\n \\"%s\\" \\"$0\\" > \\"$program_path\\"\\npython3 -u \\"$program_path\\" \\"$@\\"\\n",\n "def _make_parent_dirs_and_return_path(file_path: str):\\n import os\\n os.makedirs(os.path.dirname(file_path),\n exist_ok=True)\\n return file_path\\n\\ndef plot_linear(mlpipeline_ui_metadata):\\n import\n base64\\n import json\\n from io import BytesIO\\n\\n import matplotlib.pyplot\n as plt\\n\\n plt.plot([1, 2, 3], [1, 2, 3])\\n\\n tmpfile = BytesIO()\\n plt.savefig(tmpfile,\n format=\\"png\\")\\n encoded = base64.b64encode(tmpfile.getvalue()).decode(\\"utf-8\\")\\n\\n html\n = f\\"\\"\\n metadata = {\\n \\"outputs\\":\n [\\n {\\n \\"type\\": \\"web-app\\",\\n \\"storage\\":\n \\"inline\\",\\n \\"source\\": html,\\n },\\n ],\\n }\\n with\n open(mlpipeline_ui_metadata, \\"w\\") as html_writer:\\n json.dump(metadata,\n html_writer)\\n\\nimport argparse\\n_parser = argparse.ArgumentParser(prog=\'\'Plot\n linear\'\', description=\'\'\'\')\\n_parser.add_argument(\\"--mlpipeline-ui-metadata\\",\n dest=\\"mlpipeline_ui_metadata\\", type=_make_parent_dirs_and_return_path,\n required=True, default=argparse.SUPPRESS)\\n_parsed_args = vars(_parser.parse_args())\\n\\n_outputs\n = plot_linear(**_parsed_args)\\n"], "image": "python:3.7"}}, "name": "Plot\n linear", "outputs": [{"name": "mlpipeline_ui_metadata", "type": "UI_Metadata"}]}\',\n pipelines.kubeflow.org/component_ref: \'{}\'}\n - name: plot-pipeline\n dag:\n tasks:\n - {name: plot-linear, template: plot-linear}\n arguments:\n parameters: []\n serviceAccountName: pipeline-runner\n')))),(0,p.kt)("p",null,"\uc2e4\ud589 \ud6c4 Visualization\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-5.png",src:t(2244).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"run-output"},"Run output"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-2.png",src:t(6266).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"Run output\uc740 kubeflow\uc5d0\uc11c \uc9c0\uc815\ud55c \ud615\ud0dc\ub85c \uc0dd\uae34 Artifacts\ub97c \ubaa8\uc544\uc11c \ubcf4\uc5ec\uc8fc\ub294 \uacf3\uc774\uba70 \ud3c9\uac00 \uc9c0\ud45c(Metric)\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4."),(0,p.kt)("p",null,"\ud3c9\uac00 \uc9c0\ud45c(Metric)\uc744 \ubcf4\uc5ec\uc8fc\uae30 \uc704\ud574\uc11c\ub294 ",(0,p.kt)("inlineCode",{parentName:"p"},'mlpipeline_metrics_path: OutputPath("Metrics")')," argument\uc5d0 \ubcf4\uc5ec\uc8fc\uace0 \uc2f6\uc740 \uc774\ub984\uacfc \uac12\uc744 json \ud615\ud0dc\ub85c \uc800\uc7a5\ud558\uba74 \ub429\ub2c8\ub2e4.\n\uc608\ub97c \ub4e4\uc5b4\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \uc791\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'@create_component_from_func\ndef show_metric_of_sum(\n number: int,\n mlpipeline_metrics_path: OutputPath("Metrics"),\n ):\n import json\n metrics = {\n "metrics": [\n {\n "name": "sum_value",\n "numberValue": number,\n },\n ],\n }\n with open(mlpipeline_metrics_path, "w") as f:\n json.dump(metrics, f)\n')),(0,p.kt)("p",null,"\ud3c9\uac00 \uc9c0\ud45c\ub97c \uc0dd\uc131\ud558\ub294 \ucef4\ud3ec\ub10c\ud2b8\ub97c ",(0,p.kt)("a",{parentName:"p",href:"/docs/1.0/kubeflow/basic-pipeline"},"\ud30c\uc774\ud504\ub77c\uc778"),"\uc5d0\uc11c \uc0dd\uc131\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc5d0 \ucd94\uac00 \ud6c4 \uc2e4\ud589\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\n\uc804\uccb4 \ud30c\uc774\ud504\ub77c\uc778\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-python"},'import kfp\nfrom kfp.components import create_component_from_func, OutputPath\nfrom kfp.dsl import pipeline\n\n\n@create_component_from_func\ndef print_and_return_number(number: int) -> int:\n print(number)\n return number\n\n@create_component_from_func\ndef sum_and_print_numbers(number_1: int, number_2: int) -> int:\n sum_number = number_1 + number_2\n print(sum_number)\n return sum_number\n\n@create_component_from_func\ndef show_metric_of_sum(\n number: int,\n mlpipeline_metrics_path: OutputPath("Metrics"),\n ):\n import json\n metrics = {\n "metrics": [\n {\n "name": "sum_value",\n "numberValue": number,\n },\n ],\n }\n with open(mlpipeline_metrics_path, "w") as f:\n json.dump(metrics, f)\n\n@pipeline(name="example_pipeline")\ndef example_pipeline(number_1: int, number_2: int):\n number_1_result = print_and_return_number(number_1)\n number_2_result = print_and_return_number(number_2)\n sum_result = sum_and_print_numbers(\n number_1=number_1_result.output, number_2=number_2_result.output\n )\n show_metric_of_sum(sum_result.output)\n\n\nif __name__ == "__main__":\n kfp.compiler.Compiler().compile(example_pipeline, "example_pipeline.yaml")\n')),(0,p.kt)("p",null,"\uc2e4\ud589 \ud6c4 Run Output\uc744 \ud074\ub9ad\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub098\uc635\ub2c8\ub2e4."),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-4.png",src:t(1882).Z,width:"3360",height:"2100"})),(0,p.kt)("h2",{id:"config"},"Config"),(0,p.kt)("p",null,(0,p.kt)("img",{alt:"advanced-run-3.png",src:t(1487).Z,width:"3360",height:"2100"})),(0,p.kt)("p",null,"Config\uc5d0\uc11c\ub294 \ud30c\uc774\ud504\ub77c\uc778 Config\ub85c \uc785\ub825\ubc1b\uc740 \ubaa8\ub4e0 \uac12\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."))}d.isMDXComponent=!0},6394:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-0-adc975b65f29dee20a2bf33c969773d5.png"},6255:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-1-cfdbe4b3c9d101eecde409c9baf10dbb.png"},6266:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-2-2b0de3bdf8fa16c0e318d2dffda1f9f8.png"},1487:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-3-13783474cf32a499f90a11fc84575eea.png"},1882:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-4-3bfbf40826566f37cb8512a2e2889038.png"},2244:(e,n,t)=>{t.d(n,{Z:()=>a});const a=t.p+"assets/images/advanced-run-5-8de88b76e09f491c9a7c86642a12fbd9.png"}}]); \ No newline at end of file diff --git a/assets/js/facca37e.252c9f93.js b/assets/js/facca37e.252c9f93.js new file mode 100644 index 00000000..0c86f426 --- /dev/null +++ b/assets/js/facca37e.252c9f93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1427],{3905:(t,e,n)=>{n.d(e,{Zo:()=>m,kt:()=>c});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var i=r.createContext({}),u=function(t){var e=r.useContext(i),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},m=function(t){var e=u(t.components);return r.createElement(i.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},k=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,i=t.parentName,m=p(t,["components","mdxType","originalType","parentName"]),s=u(n),k=a,c=s["".concat(i,".").concat(k)]||s[k]||d[k]||l;return n?r.createElement(c,o(o({ref:e},m),{},{components:n})):r.createElement(c,o({ref:e},m))}));function c(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,o=new Array(l);o[0]=k;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=t,p[s]="string"==typeof t?t:a,o[1]=p;for(var u=2;u{n.r(e),n.d(e,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const l={title:"1. Introduction",description:"Setup Introduction",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim","Jongsun Shinn","Youngdon Tae","SeungTae Kim"]},o=void 0,p={unversionedId:"setup-kubernetes/intro",id:"setup-kubernetes/intro",title:"1. Introduction",description:"Setup Introduction",source:"@site/docs/setup-kubernetes/intro.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/intro",permalink:"/docs/setup-kubernetes/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/intro.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Introduction",description:"Setup Introduction",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim","Jongsun Shinn","Youngdon Tae","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Why Kubernetes?",permalink:"/docs/introduction/why_kubernetes"},next:{title:"2. Setup Kubernetes",permalink:"/docs/setup-kubernetes/kubernetes"}},i={},u=[{value:"MLOps \uc2dc\uc2a4\ud15c \uad6c\ucd95\ud574\ubcf4\uae30",id:"mlops-\uc2dc\uc2a4\ud15c-\uad6c\ucd95\ud574\ubcf4\uae30",level:2},{value:"\uad6c\uc131 \uc694\uc18c",id:"\uad6c\uc131-\uc694\uc18c",level:2},{value:"\ud074\ub7ec\uc2a4\ud130",id:"\ud074\ub7ec\uc2a4\ud130",level:3},{value:"1. Software",id:"1-software",level:4},{value:"2. Helm Chart",id:"2-helm-chart",level:4},{value:"\ud074\ub77c\uc774\uc5b8\ud2b8",id:"\ud074\ub77c\uc774\uc5b8\ud2b8",level:3},{value:"Minimum System Requirements",id:"minimum-system-requirements",level:3}],m={toc:u},s="wrapper";function d(t){let{components:e,...n}=t;return(0,a.kt)(s,(0,r.Z)({},m,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"mlops-\uc2dc\uc2a4\ud15c-\uad6c\ucd95\ud574\ubcf4\uae30"},"MLOps \uc2dc\uc2a4\ud15c \uad6c\ucd95\ud574\ubcf4\uae30"),(0,a.kt)("p",null,"MLOps\ub97c \uacf5\ubd80\ud558\ub294 \ub370 \uc788\uc5b4\uc11c \uac00\uc7a5 \ud070 \uc7a5\ubcbd\uc740 MLOps \uc2dc\uc2a4\ud15c\uc744 \uad6c\uc131\ud574\ubcf4\uace0 \uc0ac\uc6a9\ud574\ubcf4\uae30\uac00 \uc5b4\ub835\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4. AWS, GCP \ub4f1\uc758 \ud37c\ube14\ub9ad \ud074\ub77c\uc6b0\ub4dc \ud639\uc740 Weight & Bias, neptune.ai \ub4f1\uc758 \uc0c1\uc6a9 \ud234\uc744 \uc0ac\uc6a9\ud574\ubcf4\uae30\uc5d0\ub294 \uacfc\uae08\uc5d0 \ub300\ud55c \ubd80\ub2f4\uc774 \uc874\uc7ac\ud558\uace0, \ucc98\uc74c\ubd80\ud130 \ubaa8\ub4e0 \ud658\uacbd\uc744 \ud63c\uc790\uc11c \uad6c\uc131\ud558\uae30\uc5d0\ub294 \uc5b4\ub514\uc11c\ubd80\ud130 \uc2dc\uc791\ud574\uc57c \ud560\uc9c0 \ub9c9\ub9c9\ud558\uac8c \ub290\uaef4\uc9c8 \uc218\ubc16\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc774\ub7f0 \uc774\uc720\ub4e4\ub85c MLOps\ub97c \uc120\ub73b \uc2dc\uc791\ud574\ubcf4\uc9c0 \ubabb\ud558\uc2dc\ub294 \ubd84\ub4e4\uc744 \uc704\ud574, ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc6b0\ubd84\ud22c\uac00 \uc124\uce58\ub418\ub294 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub9cc \uc900\ube44\ub418\uc5b4 \uc788\ub2e4\uba74 MLOps \uc2dc\uc2a4\ud15c\uc744 \ubc11\ubc14\ub2e5\ubd80\ud130 \uad6c\ucd95\ud558\uace0 \uc0ac\uc6a9\ud574 \ubcfc \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc6b0\ubd84\ud22c \ub370\uc2a4\ud06c\ud0d1 \ud658\uacbd\uc744 \uc900\ube44\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0, \uac00\uc0c1\uba38\uc2e0\uc744 \ud65c\uc6a9\ud558\uc5ec \ud658\uacbd\uc744 \uad6c\uc131\ud558\uae30"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Windows \ud639\uc740 Intel Mac\uc744 \uc0ac\uc6a9\ud574 ",(0,a.kt)("inlineCode",{parentName:"p"},"\ubaa8\ub450\uc758 MLops")," \uc2e4\uc2b5\uc744 \uc9c4\ud589 \uc911\uc778 \ubd84\ub4e4\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Virtual Box"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"VMware")," \ub4f1\uc758 \uac00\uc0c1\uba38\uc2e0 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec \uc6b0\ubd84\ud22c \ub370\uc2a4\ud06c\ud0d1 \ud658\uacbd\uc744 \uc900\ube44\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub54c, \uad8c\uc7a5 \uc0ac\uc591\uc744 \ub9de\ucdb0 \uac00\uc0c1 \uba38\uc2e0\uc744 \uc0dd\uc131\ud574\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.\n\ub610\ud55c, M1 Mac\uc744 \uc0ac\uc6a9\ud558\uc2dc\ub294 \ubd84\ub4e4\uc740 \uc791\uc131\uc77c(2022\ub144 2\uc6d4) \uae30\uc900\uc73c\ub85c\ub294 Virtual Box, VMware \ub294 \uc774\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. (",(0,a.kt)("a",{parentName:"p",href:"https://isapplesiliconready.com/kr"},"M1 Apple Silicone Mac\uc5d0 \ucd5c\uc801\ud654\ub41c macOS \uc571 \uc9c0\uc6d0 \ud655\uc778\ud558\uae30"),")\n\ub530\ub77c\uc11c, \ud074\ub77c\uc6b0\ub4dc \ud658\uacbd\uc744 \uc774\uc6a9\ud574 \uc2e4\uc2b5\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c\uba74, ",(0,a.kt)("a",{parentName:"p",href:"https://mac.getutm.app/"},"UTM , Virtual machines for Mac"),"\uc744 \uc124\uce58\ud558\uc5ec \uac00\uc0c1 \uba38\uc2e0\uc744 \uc774\uc6a9\ud574\uc8fc\uc138\uc694.\n(\uc571\uc2a4\ud1a0\uc5b4\uc5d0\uc11c \uad6c\ub9e4\ud558\uc5ec \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub294 \uc77c\uc885\uc758 Donation \uac1c\ub150\uc758 \ube44\uc6a9 \uc9c0\ubd88\uc785\ub2c8\ub2e4. \ubb34\ub8cc \ubc84\uc804\uacfc \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8 \uc815\ub3c4\uc758 \ucc28\uc774\uac00 \uc788\uc5b4, \ubb34\ub8cc\ubc84\uc804\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.)\n\ud574\ub2f9 \uac00\uc0c1\uba38\uc2e0 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04.3 LTS")," \uc2e4\uc2b5 \uc6b4\uc601\uccb4\uc81c\ub97c \uc9c0\uc6d0\ud558\uace0 \uc788\uc5b4, M1 Mac\uc5d0\uc11c \uc2e4\uc2b5\uc744 \uc218\ud589\ud558\ub294 \uac83\uc744 \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4.")),(0,a.kt)("p",null,"\ud558\uc9c0\ub9cc ",(0,a.kt)("a",{parentName:"p",href:"/docs/introduction/component"},"MLOps\uc758 \uad6c\uc131\uc694\uc18c"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \uc694\uc18c\ub4e4\uc744 \ubaa8\ub450 \uc0ac\uc6a9\ud574\ubcfc \uc218\ub294 \uc5c6\uae30\uc5d0, ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \ub300\ud45c\uc801\uc778 \uc624\ud508\uc18c\uc2a4\ub9cc\uc744 \uc124\uce58\ud55c \ub4a4, \uc11c\ub85c \uc5f0\ub3d9\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 \ubd80\ubd84\uc744 \uc8fc\ub85c \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc124\uce58\ud558\ub294 \uc624\ud508\uc18c\uc2a4\uac00 \ud45c\uc900\uc744 \uc758\ubbf8\ud558\ub294 \uac83\uc740 \uc544\ub2c8\uba70, \uc5ec\ub7ec\ubd84\uc758 \uc0c1\ud669\uc5d0 \ub9de\uac8c \uc801\uc808\ud55c \ud234\uc744 \ucde8\uc0ac\uc120\ud0dd\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"\uad6c\uc131-\uc694\uc18c"},"\uad6c\uc131 \uc694\uc18c"),(0,a.kt)("p",null,"\uc774 \uae00\uc5d0\uc11c \ub9cc\ub4e4\uc5b4 \ubcfc MLOps \uc2dc\uc2a4\ud15c\uc758 \uad6c\uc131 \uc694\uc18c\ub4e4\uacfc \uac01 \ubc84\uc804\uc740 \uc544\ub798\uc640 \uac19\uc740 \ud658\uacbd\uc5d0\uc11c \uac80\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc6d0\ud65c\ud55c \ud658\uacbd\uc5d0\uc11c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud574 ",(0,a.kt)("strong",{parentName:"p"},"\uc2f1\uae00 \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130 (\ud639\uc740 \ud074\ub7ec\uc2a4\ud130)")," \uc640 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\ub97c \ubd84\ub9ac\ud558\uc5ec \uc124\uba85\ud574 \ub4dc\ub9b4 \uc608\uc815\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub294 \uc6b0\ubd84\ud22c\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub294 \ub178\ud2b8\ubd81 \ud639\uc740 \ud074\ub7ec\uc2a4\ud130\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud1b1 \uc678\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub2e4\ub978 \ub370\uc2a4\ud06c\ud1b1\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \ub450 \ub300\uc758 \uba38\uc2e0\uc744 \uc900\ube44\ud560 \uc218 \uc5c6\ub2e4\uba74 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub97c \ub3d9\uc2dc\uc5d0 \ud074\ub7ec\uc2a4\ud130\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud558\uc154\ub3c4 \uad1c\ucc2e\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"\ud074\ub7ec\uc2a4\ud130"},"\ud074\ub7ec\uc2a4\ud130"),(0,a.kt)("h4",{id:"1-software"},"1. Software"),(0,a.kt)("p",null,"\uc544\ub798\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc124\uce58\ud574\uc57c \ud560 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ubaa9\ub85d\uc785\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Software"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Ubuntu"),(0,a.kt)("td",{parentName:"tr",align:null},"20.04.3 LTS")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Docker (Server)"),(0,a.kt)("td",{parentName:"tr",align:null},"20.10.11")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"NVIDIA-Driver"),(0,a.kt)("td",{parentName:"tr",align:null},"470.86")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Kubernetes"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.7")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Kubeflow"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.4.0")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"MLFlow"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.0")))),(0,a.kt)("h4",{id:"2-helm-chart"},"2. Helm Chart"),(0,a.kt)("p",null,"\uc544\ub798\ub294 Helm\uc744 \uc774\uc6a9\ud574 \uc124\uce58\ub418\uc5b4\uc57c \ud560 \uc368\ub4dc\ud30c\ud2f0 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ubaa9\ub85d\uc785\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Helm Chart Repo Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"datawire/ambassador"),(0,a.kt)("td",{parentName:"tr",align:null},"6.9.3")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"seldonio/seldon-core-operator"),(0,a.kt)("td",{parentName:"tr",align:null},"1.11.2")))),(0,a.kt)("h3",{id:"\ud074\ub77c\uc774\uc5b8\ud2b8"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),(0,a.kt)("p",null,"\ud074\ub77c\uc774\uc5b8\ud2b8\ub294 MacOS (Intel CPU), Ubuntu 20.04 \uc5d0\uc11c \uac80\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Software"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"kubectl"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.7")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"helm"),(0,a.kt)("td",{parentName:"tr",align:null},"v3.7.1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"kustomize"),(0,a.kt)("td",{parentName:"tr",align:null},"v3.10.0")))),(0,a.kt)("h3",{id:"minimum-system-requirements"},"Minimum System Requirements"),(0,a.kt)("p",null,"\ubaa8\ub450\uc758 MLOps\ub97c \uc124\uce58\ud560 \ud074\ub7ec\uc2a4\ud130\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\uc591\uc744 \ub9cc\uc871\uc2dc\ud0a4\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 Kubernetes \ubc0f Kubeflow \uc758 \uad8c\uc7a5 \uc0ac\uc591\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"CPU : 6 core"),(0,a.kt)("li",{parentName:"ul"},"RAM : 12GB"),(0,a.kt)("li",{parentName:"ul"},"DISK : 50GB"),(0,a.kt)("li",{parentName:"ul"},"GPU : NVIDIA GPU (Optional)")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/facca37e.fd470dde.js b/assets/js/facca37e.fd470dde.js deleted file mode 100644 index 889c1a0c..00000000 --- a/assets/js/facca37e.fd470dde.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[1427],{3905:(t,e,n)=>{n.d(e,{Zo:()=>m,kt:()=>c});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var i=r.createContext({}),u=function(t){var e=r.useContext(i),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},m=function(t){var e=u(t.components);return r.createElement(i.Provider,{value:e},t.children)},s="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},k=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,i=t.parentName,m=p(t,["components","mdxType","originalType","parentName"]),s=u(n),k=a,c=s["".concat(i,".").concat(k)]||s[k]||d[k]||l;return n?r.createElement(c,o(o({ref:e},m),{},{components:n})):r.createElement(c,o({ref:e},m))}));function c(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,o=new Array(l);o[0]=k;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=t,p[s]="string"==typeof t?t:a,o[1]=p;for(var u=2;u{n.r(e),n.d(e,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>p,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const l={title:"1. Introduction",description:"Setup Introduction",sidebar_position:1,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-13T00:00:00.000Z"),contributors:["Jaeyeon Kim","Jongsun Shinn","Youngdon Tae","SeungTae Kim"]},o=void 0,p={unversionedId:"setup-kubernetes/intro",id:"setup-kubernetes/intro",title:"1. Introduction",description:"Setup Introduction",source:"@site/docs/setup-kubernetes/intro.md",sourceDirName:"setup-kubernetes",slug:"/setup-kubernetes/intro",permalink:"/docs/setup-kubernetes/intro",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/intro.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Introduction",description:"Setup Introduction",sidebar_position:1,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-13T00:00:00.000Z",contributors:["Jaeyeon Kim","Jongsun Shinn","Youngdon Tae","SeungTae Kim"]},sidebar:"tutorialSidebar",previous:{title:"4. Why Kubernetes?",permalink:"/docs/introduction/why_kubernetes"},next:{title:"2. Setup Kubernetes",permalink:"/docs/setup-kubernetes/kubernetes"}},i={},u=[{value:"MLOps \uc2dc\uc2a4\ud15c \uad6c\ucd95\ud574\ubcf4\uae30",id:"mlops-\uc2dc\uc2a4\ud15c-\uad6c\ucd95\ud574\ubcf4\uae30",level:2},{value:"\uad6c\uc131 \uc694\uc18c",id:"\uad6c\uc131-\uc694\uc18c",level:2},{value:"\ud074\ub7ec\uc2a4\ud130",id:"\ud074\ub7ec\uc2a4\ud130",level:3},{value:"1. Software",id:"1-software",level:4},{value:"2. Helm Chart",id:"2-helm-chart",level:4},{value:"\ud074\ub77c\uc774\uc5b8\ud2b8",id:"\ud074\ub77c\uc774\uc5b8\ud2b8",level:3},{value:"Minimum System Requirements",id:"minimum-system-requirements",level:3}],m={toc:u},s="wrapper";function d(t){let{components:e,...n}=t;return(0,a.kt)(s,(0,r.Z)({},m,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"mlops-\uc2dc\uc2a4\ud15c-\uad6c\ucd95\ud574\ubcf4\uae30"},"MLOps \uc2dc\uc2a4\ud15c \uad6c\ucd95\ud574\ubcf4\uae30"),(0,a.kt)("p",null,"MLOps\ub97c \uacf5\ubd80\ud558\ub294 \ub370 \uc788\uc5b4\uc11c \uac00\uc7a5 \ud070 \uc7a5\ubcbd\uc740 MLOps \uc2dc\uc2a4\ud15c\uc744 \uad6c\uc131\ud574\ubcf4\uace0 \uc0ac\uc6a9\ud574\ubcf4\uae30\uac00 \uc5b4\ub835\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4. AWS, GCP \ub4f1\uc758 \ud37c\ube14\ub9ad \ud074\ub77c\uc6b0\ub4dc \ud639\uc740 Weight & Bias, neptune.ai \ub4f1\uc758 \uc0c1\uc6a9 \ud234\uc744 \uc0ac\uc6a9\ud574\ubcf4\uae30\uc5d0\ub294 \uacfc\uae08\uc5d0 \ub300\ud55c \ubd80\ub2f4\uc774 \uc874\uc7ac\ud558\uace0, \ucc98\uc74c\ubd80\ud130 \ubaa8\ub4e0 \ud658\uacbd\uc744 \ud63c\uc790\uc11c \uad6c\uc131\ud558\uae30\uc5d0\ub294 \uc5b4\ub514\uc11c\ubd80\ud130 \uc2dc\uc791\ud574\uc57c \ud560\uc9c0 \ub9c9\ub9c9\ud558\uac8c \ub290\uaef4\uc9c8 \uc218\ubc16\uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc774\ub7f0 \uc774\uc720\ub4e4\ub85c MLOps\ub97c \uc120\ub73b \uc2dc\uc791\ud574\ubcf4\uc9c0 \ubabb\ud558\uc2dc\ub294 \ubd84\ub4e4\uc744 \uc704\ud574, ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \uc6b0\ubd84\ud22c\uac00 \uc124\uce58\ub418\ub294 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub9cc \uc900\ube44\ub418\uc5b4 \uc788\ub2e4\uba74 MLOps \uc2dc\uc2a4\ud15c\uc744 \ubc11\ubc14\ub2e5\ubd80\ud130 \uad6c\ucd95\ud558\uace0 \uc0ac\uc6a9\ud574 \ubcfc \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc6b0\ubd84\ud22c \ub370\uc2a4\ud06c\ud0d1 \ud658\uacbd\uc744 \uc900\ube44\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0, \uac00\uc0c1\uba38\uc2e0\uc744 \ud65c\uc6a9\ud558\uc5ec \ud658\uacbd\uc744 \uad6c\uc131\ud558\uae30"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Windows \ud639\uc740 Intel Mac\uc744 \uc0ac\uc6a9\ud574 ",(0,a.kt)("inlineCode",{parentName:"p"},"\ubaa8\ub450\uc758 MLops")," \uc2e4\uc2b5\uc744 \uc9c4\ud589 \uc911\uc778 \ubd84\ub4e4\uc740 ",(0,a.kt)("inlineCode",{parentName:"p"},"Virtual Box"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"VMware")," \ub4f1\uc758 \uac00\uc0c1\uba38\uc2e0 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec \uc6b0\ubd84\ud22c \ub370\uc2a4\ud06c\ud0d1 \ud658\uacbd\uc744 \uc900\ube44\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub54c, \uad8c\uc7a5 \uc0ac\uc591\uc744 \ub9de\ucdb0 \uac00\uc0c1 \uba38\uc2e0\uc744 \uc0dd\uc131\ud574\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.\n\ub610\ud55c, M1 Mac\uc744 \uc0ac\uc6a9\ud558\uc2dc\ub294 \ubd84\ub4e4\uc740 \uc791\uc131\uc77c(2022\ub144 2\uc6d4) \uae30\uc900\uc73c\ub85c\ub294 Virtual Box, VMware \ub294 \uc774\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. (",(0,a.kt)("a",{parentName:"p",href:"https://isapplesiliconready.com/kr"},"M1 Apple Silicone Mac\uc5d0 \ucd5c\uc801\ud654\ub41c macOS \uc571 \uc9c0\uc6d0 \ud655\uc778\ud558\uae30"),")\n\ub530\ub77c\uc11c, \ud074\ub77c\uc6b0\ub4dc \ud658\uacbd\uc744 \uc774\uc6a9\ud574 \uc2e4\uc2b5\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c\uba74, ",(0,a.kt)("a",{parentName:"p",href:"https://mac.getutm.app/"},"UTM , Virtual machines for Mac"),"\uc744 \uc124\uce58\ud558\uc5ec \uac00\uc0c1 \uba38\uc2e0\uc744 \uc774\uc6a9\ud574\uc8fc\uc138\uc694.\n(\uc571\uc2a4\ud1a0\uc5b4\uc5d0\uc11c \uad6c\ub9e4\ud558\uc5ec \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub294 \uc77c\uc885\uc758 Donation \uac1c\ub150\uc758 \ube44\uc6a9 \uc9c0\ubd88\uc785\ub2c8\ub2e4. \ubb34\ub8cc \ubc84\uc804\uacfc \uc790\ub3d9 \uc5c5\ub370\uc774\ud2b8 \uc815\ub3c4\uc758 \ucc28\uc774\uac00 \uc788\uc5b4, \ubb34\ub8cc\ubc84\uc804\uc744 \uc0ac\uc6a9\ud574\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.)\n\ud574\ub2f9 \uac00\uc0c1\uba38\uc2e0 \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub294 ",(0,a.kt)("inlineCode",{parentName:"p"},"Ubuntu 20.04.3 LTS")," \uc2e4\uc2b5 \uc6b4\uc601\uccb4\uc81c\ub97c \uc9c0\uc6d0\ud558\uace0 \uc788\uc5b4, M1 Mac\uc5d0\uc11c \uc2e4\uc2b5\uc744 \uc218\ud589\ud558\ub294 \uac83\uc744 \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4.")),(0,a.kt)("p",null,"\ud558\uc9c0\ub9cc ",(0,a.kt)("a",{parentName:"p",href:"/docs/introduction/component"},"MLOps\uc758 \uad6c\uc131\uc694\uc18c"),"\uc5d0\uc11c \uc124\uba85\ud558\ub294 \uc694\uc18c\ub4e4\uc744 \ubaa8\ub450 \uc0ac\uc6a9\ud574\ubcfc \uc218\ub294 \uc5c6\uae30\uc5d0, ",(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 \ub300\ud45c\uc801\uc778 \uc624\ud508\uc18c\uc2a4\ub9cc\uc744 \uc124\uce58\ud55c \ub4a4, \uc11c\ub85c \uc5f0\ub3d9\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 \ubd80\ubd84\uc744 \uc8fc\ub85c \ub2e4\ub8f0 \uc608\uc815\uc785\ub2c8\ub2e4."),(0,a.kt)("p",null,(0,a.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c \uc124\uce58\ud558\ub294 \uc624\ud508\uc18c\uc2a4\uac00 \ud45c\uc900\uc744 \uc758\ubbf8\ud558\ub294 \uac83\uc740 \uc544\ub2c8\uba70, \uc5ec\ub7ec\ubd84\uc758 \uc0c1\ud669\uc5d0 \ub9de\uac8c \uc801\uc808\ud55c \ud234\uc744 \ucde8\uc0ac\uc120\ud0dd\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4."),(0,a.kt)("h2",{id:"\uad6c\uc131-\uc694\uc18c"},"\uad6c\uc131 \uc694\uc18c"),(0,a.kt)("p",null,"\uc774 \uae00\uc5d0\uc11c \ub9cc\ub4e4\uc5b4 \ubcfc MLOps \uc2dc\uc2a4\ud15c\uc758 \uad6c\uc131 \uc694\uc18c\ub4e4\uacfc \uac01 \ubc84\uc804\uc740 \uc544\ub798\uc640 \uac19\uc740 \ud658\uacbd\uc5d0\uc11c \uac80\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("p",null,"\uc6d0\ud65c\ud55c \ud658\uacbd\uc5d0\uc11c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud574 ",(0,a.kt)("strong",{parentName:"p"},"\uc2f1\uae00 \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130 (\ud639\uc740 \ud074\ub7ec\uc2a4\ud130)")," \uc640 ",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\ub97c \ubd84\ub9ac\ud558\uc5ec \uc124\uba85\ud574 \ub4dc\ub9b4 \uc608\uc815\uc785\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub294 \uc6b0\ubd84\ud22c\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n",(0,a.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub294 \ub178\ud2b8\ubd81 \ud639\uc740 \ud074\ub7ec\uc2a4\ud130\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \ub370\uc2a4\ud06c\ud1b1 \uc678\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub2e4\ub978 \ub370\uc2a4\ud06c\ud1b1\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\ud558\uc9c0\ub9cc \ub450 \ub300\uc758 \uba38\uc2e0\uc744 \uc900\ube44\ud560 \uc218 \uc5c6\ub2e4\uba74 \ub370\uc2a4\ud06c\ud1b1 \ud558\ub098\ub97c \ub3d9\uc2dc\uc5d0 \ud074\ub7ec\uc2a4\ud130\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ud558\uc154\ub3c4 \uad1c\ucc2e\uc2b5\ub2c8\ub2e4."),(0,a.kt)("h3",{id:"\ud074\ub7ec\uc2a4\ud130"},"\ud074\ub7ec\uc2a4\ud130"),(0,a.kt)("h4",{id:"1-software"},"1. Software"),(0,a.kt)("p",null,"\uc544\ub798\ub294 \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc124\uce58\ud574\uc57c \ud560 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ubaa9\ub85d\uc785\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Software"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Ubuntu"),(0,a.kt)("td",{parentName:"tr",align:null},"20.04.3 LTS")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Docker (Server)"),(0,a.kt)("td",{parentName:"tr",align:null},"20.10.11")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"NVIDIA-Driver"),(0,a.kt)("td",{parentName:"tr",align:null},"470.86")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Kubernetes"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.7")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Kubeflow"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.4.0")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"MLFlow"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.0")))),(0,a.kt)("h4",{id:"2-helm-chart"},"2. Helm Chart"),(0,a.kt)("p",null,"\uc544\ub798\ub294 Helm\uc744 \uc774\uc6a9\ud574 \uc124\uce58\ub418\uc5b4\uc57c \ud560 \uc368\ub4dc\ud30c\ud2f0 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \ubaa9\ub85d\uc785\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Helm Chart Repo Name"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"datawire/ambassador"),(0,a.kt)("td",{parentName:"tr",align:null},"6.9.3")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"seldonio/seldon-core-operator"),(0,a.kt)("td",{parentName:"tr",align:null},"1.11.2")))),(0,a.kt)("h3",{id:"\ud074\ub77c\uc774\uc5b8\ud2b8"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),(0,a.kt)("p",null,"\ud074\ub77c\uc774\uc5b8\ud2b8\ub294 MacOS (Intel CPU), Ubuntu 20.04 \uc5d0\uc11c \uac80\uc99d\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Software"),(0,a.kt)("th",{parentName:"tr",align:null},"Version"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"kubectl"),(0,a.kt)("td",{parentName:"tr",align:null},"v1.21.7")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"helm"),(0,a.kt)("td",{parentName:"tr",align:null},"v3.7.1")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"kustomize"),(0,a.kt)("td",{parentName:"tr",align:null},"v3.10.0")))),(0,a.kt)("h3",{id:"minimum-system-requirements"},"Minimum System Requirements"),(0,a.kt)("p",null,"\ubaa8\ub450\uc758 MLOps\ub97c \uc124\uce58\ud560 \ud074\ub7ec\uc2a4\ud130\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc0ac\uc591\uc744 \ub9cc\uc871\uc2dc\ud0a4\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.",(0,a.kt)("br",{parentName:"p"}),"\n","\uc774\ub294 Kubernetes \ubc0f Kubeflow \uc758 \uad8c\uc7a5 \uc0ac\uc591\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"CPU : 6 core"),(0,a.kt)("li",{parentName:"ul"},"RAM : 12GB"),(0,a.kt)("li",{parentName:"ul"},"DISK : 50GB"),(0,a.kt)("li",{parentName:"ul"},"GPU : NVIDIA GPU (Optional)")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fb6a8c4a.34d53713.js b/assets/js/fb6a8c4a.34d53713.js deleted file mode 100644 index 5a1efc2d..00000000 --- a/assets/js/fb6a8c4a.34d53713.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9229],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var u=i.createContext({}),o=function(e){var n=i.useContext(u),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=o(e.components);return i.createElement(u.Provider,{value:n},e.children)},d="mdxType",k={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},b=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,u=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=o(t),b=r,m=d["".concat(u,".").concat(b)]||d[b]||k[b]||a;return t?i.createElement(m,l(l({ref:n},p),{},{components:t})):i.createElement(m,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,l=new Array(a);l[0]=b;var s={};for(var u in n)hasOwnProperty.call(n,u)&&(s[u]=n[u]);s.originalType=e,s[d]="string"==typeof e?e:r,l[1]=s;for(var o=2;o{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>a,metadata:()=>s,toc:()=>o});var i=t(7462),r=(t(7294),t(3905));const a={title:"4.2. Minikube",description:"",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},l=void 0,s={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-minikube",id:"setup-kubernetes/install-kubernetes/kubernetes-with-minikube",title:"4.2. Minikube",description:"",source:"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"4.2. Minikube",description:"",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4.3. Kubeadm",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm"},next:{title:"5. Install Kubernetes Modules",permalink:"/docs/setup-kubernetes/install-kubernetes-module"}},u={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"Minikube binary",id:"minikube-binary",level:3},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"Disable default addons",id:"disable-default-addons",level:3},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2}],p={toc:o},d="wrapper";function k(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,i.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"minikube-binary"},"Minikube binary"),(0,r.kt)("p",null,"Minikube\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, v1.24.0 \ubc84\uc804\uc758 Minikube \ubc14\uc774\ub108\ub9ac\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://github.com/kubernetes/minikube/releases/download/v1.24.0/minikube-linux-amd64\nsudo install minikube-linux-amd64 /usr/local/bin/minikube\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube version\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ minikube version\nminikube version: v1.24.0\ncommit: 76b94fb3c4e8ac5062daf70d60cf03ddcc0a741b\n")),(0,r.kt)("h2",{id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5"},"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5"),(0,r.kt)("p",null,"\uc774\uc81c Minikube\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uad6c\ucd95\ud569\ub2c8\ub2e4.\nGPU \uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uacfc \ud074\ub7ec\uc2a4\ud130-\ud074\ub77c\uc774\uc5b8\ud2b8 \uac04 \ud1b5\uc2e0\uc744 \uac04\ud3b8\ud558\uac8c \uc218\ud589\ud558\uae30 \uc704\ud574, Minikube \ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"driver=none")," \uc635\uc158\uc744 \ud65c\uc6a9\ud558\uc5ec \uc2e4\ud589\ud569\ub2c8\ub2e4. ",(0,r.kt)("inlineCode",{parentName:"p"},"driver=none")," \uc635\uc158\uc740 root user \ub85c \uc2e4\ud589\ud574\uc57c \ud568\uc5d0 \uc8fc\uc758 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"root user\ub85c \uc804\ud658\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo su\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"minikube start"),"\ub97c \uc218\ud589\ud558\uc5ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\uc744 \uc9c4\ud589\ud569\ub2c8\ub2e4. Kubeflow\uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uc744 \uc704\ud574, \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ubc84\uc804\uc740 v1.21.7\ub85c \uc9c0\uc815\ud558\uc5ec \uad6c\ucd95\ud558\uba70 ",(0,r.kt)("inlineCode",{parentName:"p"},"--extra-config"),"\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube start --driver=none \\\n --kubernetes-version=v1.21.7 \\\n --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key \\\n --extra-config=apiserver.service-account-issuer=kubernetes.default.svc\n")),(0,r.kt)("h3",{id:"disable-default-addons"},"Disable default addons"),(0,r.kt)("p",null,"Minikube\ub97c \uc124\uce58\ud558\uba74 Default\ub85c \uc124\uce58\ub418\ub294 addon\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc774 \uc911 \uc800\ud76c\uac00 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc744 addon\uc744 \ube44\ud65c\uc131\ud654\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube addons disable storage-provisioner\nminikube addons disable default-storageclass\n")),(0,r.kt)("p",null,"\ubaa8\ub4e0 addon\uc774 \ube44\ud65c\uc131\ud654\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube addons list\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"root@ubuntu:/home/mlops# minikube addons list\n|-----------------------------|----------|--------------|-----------------------|\n| ADDON NAME | PROFILE | STATUS | MAINTAINER |\n|-----------------------------|----------|--------------|-----------------------|\n| ambassador | minikube | disabled | unknown (third-party) |\n| auto-pause | minikube | disabled | google |\n| csi-hostpath-driver | minikube | disabled | kubernetes |\n| dashboard | minikube | disabled | kubernetes |\n| default-storageclass | minikube | disabled | kubernetes |\n| efk | minikube | disabled | unknown (third-party) |\n| freshpod | minikube | disabled | google |\n| gcp-auth | minikube | disabled | google |\n| gvisor | minikube | disabled | google |\n| helm-tiller | minikube | disabled | unknown (third-party) |\n| ingress | minikube | disabled | unknown (third-party) |\n| ingress-dns | minikube | disabled | unknown (third-party) |\n| istio | minikube | disabled | unknown (third-party) |\n| istio-provisioner | minikube | disabled | unknown (third-party) |\n| kubevirt | minikube | disabled | unknown (third-party) |\n| logviewer | minikube | disabled | google |\n| metallb | minikube | disabled | unknown (third-party) |\n| metrics-server | minikube | disabled | kubernetes |\n| nvidia-driver-installer | minikube | disabled | google |\n| nvidia-gpu-device-plugin | minikube | disabled | unknown (third-party) |\n| olm | minikube | disabled | unknown (third-party) |\n| pod-security-policy | minikube | disabled | unknown (third-party) |\n| portainer | minikube | disabled | portainer.io |\n| registry | minikube | disabled | google |\n| registry-aliases | minikube | disabled | unknown (third-party) |\n| registry-creds | minikube | disabled | unknown (third-party) |\n| storage-provisioner | minikube | disabled | kubernetes |\n| storage-provisioner-gluster | minikube | disabled | unknown (third-party) |\n| volumesnapshots | minikube | disabled | kubernetes |\n|-----------------------------|----------|--------------|-----------------------|\n")),(0,r.kt)("h2",{id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5"},"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5"),(0,r.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc5d0 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uc744 \uc704\ud55c \ub3c4\uad6c\ub97c \uc124\uce58\ud569\ub2c8\ub2e4.\n",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uac00 \ubd84\ub9ac\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub294 root user\ub85c \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc9c4\ud589\ud574\uc57c \ud568\uc5d0 \uc8fc\uc758\ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uac00 \ubd84\ub9ac\ub41c \uacbd\uc6b0, \uc6b0\uc120 kubernetes\uc758 \uad00\ub9ac\uc790 \uc778\uc99d \uc815\ubcf4\ub97c ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\ub85c \uac00\uc838\uc635\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc5d0\uc11c config\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\nminikube kubectl -- config view --flatten\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uc815\ubcf4\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"cluster:\ncertificate-authority-data: LS0tLS1CRUd....\nextensions:",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"- extension:\n last-update: Mon, 06 Dec 2021 06:55:46 UTC\n provider: minikube.sigs.k8s.io\n version: v1.24.0\n name: cluster_info\nserver: https://192.168.0.62:8443\n"))," name: minikube\ncontexts:"),(0,r.kt)("li",{parentName:"ul"},"context:\ncluster: minikube\nextensions:",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"- extension:\n last-update: Mon, 06 Dec 2021 06:55:46 UTC\n provider: minikube.sigs.k8s.io\n version: v1.24.0\n name: context_info\nnamespace: default\nuser: minikube\n"))," name: minikube\ncurrent-context: minikube\nkind: Config\npreferences: {}\nusers:"),(0,r.kt)("li",{parentName:"ul"},"name: minikube\nuser:\nclient-certificate-data: LS0tLS1CRUdJTi....\nclient-key-data: LS0tLS1CRUdJTiBSU0....",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"")))),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub178\ub4dc\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},".kube")," \ud3f4\ub354\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\nmkdir -p /home/$USER/.kube\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud574\ub2f9 \ud30c\uc77c\uc5d0 2. \uc5d0\uc11c \ucd9c\ub825\ub41c \uc815\ubcf4\ub97c \ubd99\uc5ec\ub123\uc740 \ub4a4 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"vi /home/$USER/.kube/config\n")))),(0,r.kt)("h2",{id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58"},"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-kubernetes-module"},"Setup Kubernetes Modules"),"\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"helm"),(0,r.kt)("li",{parentName:"ul"},"kustomize"),(0,r.kt)("li",{parentName:"ul"},"CSI plugin"),(0,r.kt)("li",{parentName:"ul"},"[Optional]"," nvidia-docker, nvidia-device-plugin")),(0,r.kt)("h2",{id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\ucd5c\uc885\uc801\uc73c\ub85c node\uac00 Ready \uc778\uc9c0, OS, Docker, Kubernetes \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get nodes -o wide\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nubuntu Ready control-plane,master 2d23h v1.21.7 192.168.0.75 Ubuntu 20.04.3 LTS 5.4.0-91-generic docker://20.10.11\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fb6a8c4a.8824ce52.js b/assets/js/fb6a8c4a.8824ce52.js new file mode 100644 index 00000000..c7bf530e --- /dev/null +++ b/assets/js/fb6a8c4a.8824ce52.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[9229],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>m});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var u=i.createContext({}),o=function(e){var n=i.useContext(u),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=o(e.components);return i.createElement(u.Provider,{value:n},e.children)},d="mdxType",k={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},b=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,u=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=o(t),b=r,m=d["".concat(u,".").concat(b)]||d[b]||k[b]||a;return t?i.createElement(m,l(l({ref:n},p),{},{components:t})):i.createElement(m,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,l=new Array(a);l[0]=b;var s={};for(var u in n)hasOwnProperty.call(n,u)&&(s[u]=n[u]);s.originalType=e,s[d]="string"==typeof e?e:r,l[1]=s;for(var o=2;o{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>k,frontMatter:()=>a,metadata:()=>s,toc:()=>o});var i=t(7462),r=(t(7294),t(3905));const a={title:"4.2. Minikube",description:"",sidebar_position:2,date:new Date("2021-12-13T00:00:00.000Z"),lastmod:new Date("2021-12-20T00:00:00.000Z"),contributors:["Jaeyeon Kim"]},l=void 0,s={unversionedId:"setup-kubernetes/install-kubernetes/kubernetes-with-minikube",id:"setup-kubernetes/install-kubernetes/kubernetes-with-minikube",title:"4.2. Minikube",description:"",source:"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",sourceDirName:"setup-kubernetes/install-kubernetes",slug:"/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"4.2. Minikube",description:"",sidebar_position:2,date:"2021-12-13T00:00:00.000Z",lastmod:"2021-12-20T00:00:00.000Z",contributors:["Jaeyeon Kim"]},sidebar:"tutorialSidebar",previous:{title:"4.3. Kubeadm",permalink:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm"},next:{title:"5. Install Kubernetes Modules",permalink:"/docs/setup-kubernetes/install-kubernetes-module"}},u={},o=[{value:"1. Prerequisite",id:"1-prerequisite",level:2},{value:"Minikube binary",id:"minikube-binary",level:3},{value:"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5",id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5",level:2},{value:"Disable default addons",id:"disable-default-addons",level:3},{value:"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5",id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5",level:2},{value:"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58",id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58",level:2},{value:"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:2}],p={toc:o},d="wrapper";function k(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,i.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"1-prerequisite"},"1. Prerequisite"),(0,r.kt)("p",null,"\ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c \uad6c\ucd95\ud558\uae30\uc5d0 \uc55e\uc11c, \ud544\uc694\ud55c \uad6c\uc131 \uc694\uc18c\ub4e4\uc744 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-prerequisite"},"Install Prerequisite"),"\uc744 \ucc38\uace0\ud558\uc5ec Kubernetes\ub97c \uc124\uce58\ud558\uae30 \uc804\uc5d0 \ud544\uc694\ud55c \uc694\uc18c\ub4e4\uc744 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("h3",{id:"minikube-binary"},"Minikube binary"),(0,r.kt)("p",null,"Minikube\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574, v1.24.0 \ubc84\uc804\uc758 Minikube \ubc14\uc774\ub108\ub9ac\ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://github.com/kubernetes/minikube/releases/download/v1.24.0/minikube-linux-amd64\nsudo install minikube-linux-amd64 /usr/local/bin/minikube\n")),(0,r.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube version\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ minikube version\nminikube version: v1.24.0\ncommit: 76b94fb3c4e8ac5062daf70d60cf03ddcc0a741b\n")),(0,r.kt)("h2",{id:"2-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub7ec\uc2a4\ud130-\uc14b\uc5c5"},"2. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uc14b\uc5c5"),(0,r.kt)("p",null,"\uc774\uc81c Minikube\ub97c \ud65c\uc6a9\ud574 \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130\ub97c ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130\uc5d0")," \uad6c\ucd95\ud569\ub2c8\ub2e4.\nGPU \uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uacfc \ud074\ub7ec\uc2a4\ud130-\ud074\ub77c\uc774\uc5b8\ud2b8 \uac04 \ud1b5\uc2e0\uc744 \uac04\ud3b8\ud558\uac8c \uc218\ud589\ud558\uae30 \uc704\ud574, Minikube \ub294 ",(0,r.kt)("inlineCode",{parentName:"p"},"driver=none")," \uc635\uc158\uc744 \ud65c\uc6a9\ud558\uc5ec \uc2e4\ud589\ud569\ub2c8\ub2e4. ",(0,r.kt)("inlineCode",{parentName:"p"},"driver=none")," \uc635\uc158\uc740 root user \ub85c \uc2e4\ud589\ud574\uc57c \ud568\uc5d0 \uc8fc\uc758 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,"root user\ub85c \uc804\ud658\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo su\n")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"minikube start"),"\ub97c \uc218\ud589\ud558\uc5ec \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\uc744 \uc9c4\ud589\ud569\ub2c8\ub2e4. Kubeflow\uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uc744 \uc704\ud574, \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ubc84\uc804\uc740 v1.21.7\ub85c \uc9c0\uc815\ud558\uc5ec \uad6c\ucd95\ud558\uba70 ",(0,r.kt)("inlineCode",{parentName:"p"},"--extra-config"),"\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube start --driver=none \\\n --kubernetes-version=v1.21.7 \\\n --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key \\\n --extra-config=apiserver.service-account-issuer=kubernetes.default.svc\n")),(0,r.kt)("h3",{id:"disable-default-addons"},"Disable default addons"),(0,r.kt)("p",null,"Minikube\ub97c \uc124\uce58\ud558\uba74 Default\ub85c \uc124\uce58\ub418\ub294 addon\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc774 \uc911 \uc800\ud76c\uac00 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc744 addon\uc744 \ube44\ud65c\uc131\ud654\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube addons disable storage-provisioner\nminikube addons disable default-storageclass\n")),(0,r.kt)("p",null,"\ubaa8\ub4e0 addon\uc774 \ube44\ud65c\uc131\ud654\ub41c \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"minikube addons list\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"root@ubuntu:/home/mlops# minikube addons list\n|-----------------------------|----------|--------------|-----------------------|\n| ADDON NAME | PROFILE | STATUS | MAINTAINER |\n|-----------------------------|----------|--------------|-----------------------|\n| ambassador | minikube | disabled | unknown (third-party) |\n| auto-pause | minikube | disabled | google |\n| csi-hostpath-driver | minikube | disabled | kubernetes |\n| dashboard | minikube | disabled | kubernetes |\n| default-storageclass | minikube | disabled | kubernetes |\n| efk | minikube | disabled | unknown (third-party) |\n| freshpod | minikube | disabled | google |\n| gcp-auth | minikube | disabled | google |\n| gvisor | minikube | disabled | google |\n| helm-tiller | minikube | disabled | unknown (third-party) |\n| ingress | minikube | disabled | unknown (third-party) |\n| ingress-dns | minikube | disabled | unknown (third-party) |\n| istio | minikube | disabled | unknown (third-party) |\n| istio-provisioner | minikube | disabled | unknown (third-party) |\n| kubevirt | minikube | disabled | unknown (third-party) |\n| logviewer | minikube | disabled | google |\n| metallb | minikube | disabled | unknown (third-party) |\n| metrics-server | minikube | disabled | kubernetes |\n| nvidia-driver-installer | minikube | disabled | google |\n| nvidia-gpu-device-plugin | minikube | disabled | unknown (third-party) |\n| olm | minikube | disabled | unknown (third-party) |\n| pod-security-policy | minikube | disabled | unknown (third-party) |\n| portainer | minikube | disabled | portainer.io |\n| registry | minikube | disabled | google |\n| registry-aliases | minikube | disabled | unknown (third-party) |\n| registry-creds | minikube | disabled | unknown (third-party) |\n| storage-provisioner | minikube | disabled | kubernetes |\n| storage-provisioner-gluster | minikube | disabled | unknown (third-party) |\n| volumesnapshots | minikube | disabled | kubernetes |\n|-----------------------------|----------|--------------|-----------------------|\n")),(0,r.kt)("h2",{id:"3-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\ud074\ub77c\uc774\uc5b8\ud2b8-\uc14b\uc5c5"},"3. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc14b\uc5c5"),(0,r.kt)("p",null,"\uc774\ubc88\uc5d0\ub294 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc5d0 \ucfe0\ubc84\ub124\ud2f0\uc2a4\uc758 \uc6d0\ud65c\ud55c \uc0ac\uc6a9\uc744 \uc704\ud55c \ub3c4\uad6c\ub97c \uc124\uce58\ud569\ub2c8\ub2e4.\n",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uac00 \ubd84\ub9ac\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub294 root user\ub85c \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc9c4\ud589\ud574\uc57c \ud568\uc5d0 \uc8fc\uc758\ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\uc640 ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130")," \ub178\ub4dc\uac00 \ubd84\ub9ac\ub41c \uacbd\uc6b0, \uc6b0\uc120 kubernetes\uc758 \uad00\ub9ac\uc790 \uc778\uc99d \uc815\ubcf4\ub97c ",(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8"),"\ub85c \uac00\uc838\uc635\ub2c8\ub2e4."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"\ud074\ub7ec\uc2a4\ud130"),"\uc5d0\uc11c config\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\nminikube kubectl -- config view --flatten\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ub2e4\uc74c\uacfc \uac19\uc740 \uc815\ubcf4\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nclusters:\n")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"cluster:\ncertificate-authority-data: LS0tLS1CRUd....\nextensions:",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"- extension:\n last-update: Mon, 06 Dec 2021 06:55:46 UTC\n provider: minikube.sigs.k8s.io\n version: v1.24.0\n name: cluster_info\nserver: https://192.168.0.62:8443\n"))," name: minikube\ncontexts:"),(0,r.kt)("li",{parentName:"ul"},"context:\ncluster: minikube\nextensions:",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"- extension:\n last-update: Mon, 06 Dec 2021 06:55:46 UTC\n provider: minikube.sigs.k8s.io\n version: v1.24.0\n name: context_info\nnamespace: default\nuser: minikube\n"))," name: minikube\ncurrent-context: minikube\nkind: Config\npreferences: {}\nusers:"),(0,r.kt)("li",{parentName:"ul"},"name: minikube\nuser:\nclient-certificate-data: LS0tLS1CRUdJTi....\nclient-key-data: LS0tLS1CRUdJTiBSU0....",(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},"")))),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"\ud074\ub77c\uc774\uc5b8\ud2b8")," \ub178\ub4dc\uc5d0\uc11c ",(0,r.kt)("inlineCode",{parentName:"p"},".kube")," \ud3f4\ub354\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\nmkdir -p /home/$USER/.kube\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\ud574\ub2f9 \ud30c\uc77c\uc5d0 2. \uc5d0\uc11c \ucd9c\ub825\ub41c \uc815\ubcf4\ub97c \ubd99\uc5ec\ub123\uc740 \ub4a4 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"vi /home/$USER/.kube/config\n")))),(0,r.kt)("h2",{id:"4-\ucfe0\ubc84\ub124\ud2f0\uc2a4-\uae30\ubcf8-\ubaa8\ub4c8-\uc124\uce58"},"4. \ucfe0\ubc84\ub124\ud2f0\uc2a4 \uae30\ubcf8 \ubaa8\ub4c8 \uc124\uce58"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"/docs/setup-kubernetes/install-kubernetes-module"},"Setup Kubernetes Modules"),"\uc744 \ucc38\uace0\ud558\uc5ec \ub2e4\uc74c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 \uc124\uce58\ud574 \uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"helm"),(0,r.kt)("li",{parentName:"ul"},"kustomize"),(0,r.kt)("li",{parentName:"ul"},"CSI plugin"),(0,r.kt)("li",{parentName:"ul"},"[Optional]"," nvidia-docker, nvidia-device-plugin")),(0,r.kt)("h2",{id:"5-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"5. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,r.kt)("p",null,"\ucd5c\uc885\uc801\uc73c\ub85c node\uac00 Ready \uc778\uc9c0, OS, Docker, Kubernetes \ubc84\uc804\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get nodes -o wide\n")),(0,r.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ubcf4\uc774\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME\nubuntu Ready control-plane,master 2d23h v1.21.7 192.168.0.75 Ubuntu 20.04.3 LTS 5.4.0-91-generic docker://20.10.11\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fb803674.30697e86.js b/assets/js/fb803674.30697e86.js deleted file mode 100644 index f24193d7..00000000 --- a/assets/js/fb803674.30697e86.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8834],{3905:(e,n,t)=>{t.d(n,{Zo:()=>v,kt:()=>y});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},v=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,r=e.originalType,s=e.parentName,v=o(e,["components","mdxType","originalType","parentName"]),u=p(t),c=l,y=u["".concat(s,".").concat(c)]||u[c]||h[c]||r;return t?a.createElement(y,i(i({ref:n},v),{},{components:t})):a.createElement(y,i({ref:n},v))}));function y(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var r=t.length,i=new Array(r);i[0]=c;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o[u]="string"==typeof e?e:l,i[1]=o;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const r={title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",sidebar_position:1},i=void 0,o={unversionedId:"appendix/pyenv",id:"appendix/pyenv",title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",description:"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd",source:"@site/docs/appendix/pyenv.md",sourceDirName:"appendix",slug:"/appendix/pyenv",permalink:"/docs/appendix/pyenv",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/appendix/pyenv.md",tags:[],version:"current",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:1,frontMatter:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"6. Multi Models",permalink:"/docs/api-deployment/seldon-children"},next:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",permalink:"/docs/appendix/metallb"}},s={},p=[{value:"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd",id:"\ud30c\uc774\uc36c-\uac00\uc0c1\ud658\uacbd",level:2},{value:"pyenv \uc124\uce58",id:"pyenv-\uc124\uce58",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"\uc124\uce58 - macOS",id:"\uc124\uce58---macos",level:3},{value:"\uc124\uce58 - Ubuntu",id:"\uc124\uce58---ubuntu",level:3},{value:"pyenv \uc0ac\uc6a9",id:"pyenv-\uc0ac\uc6a9",level:2},{value:"Python \ubc84\uc804 \uc124\uce58",id:"python-\ubc84\uc804-\uc124\uce58",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \uc0dd\uc131",id:"python-\uac00\uc0c1\ud658\uacbd-\uc0dd\uc131",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9",id:"python-\uac00\uc0c1\ud658\uacbd-\uc0ac\uc6a9",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \ube44\ud65c\uc131\ud654",id:"python-\uac00\uc0c1\ud658\uacbd-\ube44\ud65c\uc131\ud654",level:3}],v={toc:p},u="wrapper";function h(e){let{components:n,...t}=e;return(0,l.kt)(u,(0,a.Z)({},v,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"\ud30c\uc774\uc36c-\uac00\uc0c1\ud658\uacbd"},"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),(0,l.kt)("p",null,"Python \ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\ub2e4 \ubcf4\uba74 \uc5ec\ub7ec \ubc84\uc804\uc758 Python \ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\ub098, \uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\ubcc4 \ud328\ud0a4\uc9c0 \ubc84\uc804\uc744 \ub530\ub85c \uad00\ub9ac\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\ucc98\ub7fc Python \ud658\uacbd \ud639\uc740 Python Package \ud658\uacbd\uc744 \uac00\uc0c1\ud654\ud558\uc5ec \uad00\ub9ac\ud558\ub294 \uac83\uc744 \uc27d\uac8c \ub3c4\uc640\uc8fc\ub294 \ub3c4\uad6c\ub85c\ub294 pyenv, conda, virtualenv, venv \ub4f1\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774 \uc911 ",(0,l.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv"},"pyenv"),"\uc640 ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv-virtualenv"},"pyenv-virtualenv"),"\ub97c \uc124\uce58\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","pyenv\ub294 Python \ubc84\uc804\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc8fc\uba70, pyenv-virtualenv\ub294 pyenv\uc758 plugin\uc73c\ub85c\uc368 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0 \ud658\uacbd\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc90d\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"pyenv-\uc124\uce58"},"pyenv \uc124\uce58"),(0,l.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,l.kt)("p",null,"\uc6b4\uc601 \uccb4\uc81c\ubcc4\ub85c Prerequisites\uac00 \ub2e4\ub985\ub2c8\ub2e4. ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv/wiki#suggested-build-environment"},"\ub2e4\uc74c \ud398\uc774\uc9c0"),"\ub97c \ucc38\uace0\ud558\uc5ec \ud544\uc218 \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud574\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"\uc124\uce58---macos"},"\uc124\uce58 - macOS"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"pyenv, pyenv-virtualenv \uc124\uce58")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"brew update\nbrew install pyenv\nbrew install pyenv-virtualenv\n")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"pyenv \uc124\uc815")),(0,l.kt)("p",null,"macOS\uc758 \uacbd\uc6b0 \uce74\ud0c8\ub9ac\ub098 \ubc84\uc804 \uc774\ud6c4 \uae30\ubcf8 shell\uc774 zsh\ub85c \ubcc0\uacbd\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 zsh\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"echo 'eval \"$(pyenv init -)\"' >> ~/.zshrc\necho 'eval \"$(pyenv virtualenv-init -)\"' >> ~/.zshrc\nsource ~/.zshrc\n")),(0,l.kt)("p",null,"pyenv \uba85\ub839\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv --help\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv --help\nUsage: pyenv []\n\nSome useful pyenv commands are:\n --version Display the version of pyenv\n activate Activate virtual environment\n commands List all available pyenv commands\n deactivate Deactivate virtual environment\n exec Run an executable with the selected Python version\n global Set or show the global Python version(s)\n help Display help for a command\n hooks List hook scripts for a given pyenv command\n init Configure the shell environment for pyenv\n install Install a Python version using python-build\n local Set or show the local application-specific Python version(s)\n prefix Display prefix for a Python version\n rehash Rehash pyenv shims (run this after installing executables)\n root Display the root directory where versions and shims are kept\n shell Set or show the shell-specific Python version\n shims List existing pyenv shims\n uninstall Uninstall a specific Python version\n version Show the current Python version(s) and its origin\n version-file Detect the file that sets the current pyenv version\n version-name Show the current Python version\n version-origin Explain how the current Python version is set\n versions List all Python versions available to pyenv\n virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin\n virtualenv-delete Uninstall a specific Python virtualenv\n virtualenv-init Configure the shell environment for pyenv-virtualenv\n virtualenv-prefix Display real_prefix for a Python virtualenv version\n virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.\n whence List all Python versions that contain the given executable\n which Display the full path to an executable\n\nSee `pyenv help ' for information on a specific command.\nFor full documentation, see: https://github.com/pyenv/pyenv#readme\n")),(0,l.kt)("h3",{id:"\uc124\uce58---ubuntu"},"\uc124\uce58 - Ubuntu"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"pyenv, pyenv-virtualenv \uc124\uce58")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"curl https://pyenv.run | bash\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"}," % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n 0 0 0 0 0 0 0 0 --:--:-- --:--:-- 0 0 0 0 0 0 0 0 --:--:-- --:--:-- 100 270 100 270 0 0 239 0 0:00:01 0:00:01 --:--:-- 239\nCloning into '/home/mlops/.pyenv'...\nr\n...\n\uc911\ub7b5...\n...\nremote: Enumerating objects: 10, done.\nremote: Counting objects: 100% (10/10), done.\nremote: Compressing objects: 100% (6/6), done.\nremote: Total 10 (delta 1), reused 6 (delta 0), pack-reused 0\nUnpacking objects: 100% (10/10), 2.92 KiB | 2.92 MiB/s, done.\n\nWARNING: seems you still have not added 'pyenv' to the load path.\n\n\n# See the README for instructions on how to set up\n# your shell environment for Pyenv.\n\n# Load pyenv-virtualenv automatically by adding\n# the following to ~/.bashrc:\n\neval \"$(pyenv virtualenv-init -)\"\n\n")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"pyenv \uc124\uc815")),(0,l.kt)("p",null,"\uae30\ubcf8 shell\ub85c bash shell\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4.\nbash\uc5d0\uc11c pyenv\uc640 pyenv-virtualenv \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo vi ~/.bashrc\n")),(0,l.kt)("p",null,"\ub2e4\uc74c \ubb38\uc790\uc5f4\uc744 \uc785\ub825\ud55c \ud6c4 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'export PATH="$HOME/.pyenv/bin:$PATH"\neval "$(pyenv init -)"\neval "$(pyenv virtualenv-init -)"\n')),(0,l.kt)("p",null,"shell\uc744 restart \ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"exec $SHELL\n")),(0,l.kt)("p",null,"pyenv \uba85\ub839\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv --help\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv\npyenv 2.2.2\nUsage: pyenv []\n\nSome useful pyenv commands are:\n --version Display the version of pyenv\n activate Activate virtual environment\n commands List all available pyenv commands\n deactivate Deactivate virtual environment\n doctor Verify pyenv installation and development tools to build pythons.\n exec Run an executable with the selected Python version\n global Set or show the global Python version(s)\n help Display help for a command\n hooks List hook scripts for a given pyenv command\n init Configure the shell environment for pyenv\n install Install a Python version using python-build\n local Set or show the local application-specific Python version(s)\n prefix Display prefix for a Python version\n rehash Rehash pyenv shims (run this after installing executables)\n root Display the root directory where versions and shims are kept\n shell Set or show the shell-specific Python version\n shims List existing pyenv shims\n uninstall Uninstall a specific Python version\n version Show the current Python version(s) and its origin\n version-file Detect the file that sets the current pyenv version\n version-name Show the current Python version\n version-origin Explain how the current Python version is set\n versions List all Python versions available to pyenv\n virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin\n virtualenv-delete Uninstall a specific Python virtualenv\n virtualenv-init Configure the shell environment for pyenv-virtualenv\n virtualenv-prefix Display real_prefix for a Python virtualenv version\n virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.\n whence List all Python versions that contain the given executable\n which Display the full path to an executable\n\nSee `pyenv help ' for information on a specific command.\nFor full documentation, see: https://github.com/pyenv/pyenv#readme\n")),(0,l.kt)("h2",{id:"pyenv-\uc0ac\uc6a9"},"pyenv \uc0ac\uc6a9"),(0,l.kt)("h3",{id:"python-\ubc84\uc804-\uc124\uce58"},"Python \ubc84\uc804 \uc124\uce58"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv install ")," \uba85\ub839\uc744 \ud1b5\ud574 \uc6d0\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc744 \uc124\uce58\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc608\uc2dc\ub85c kubeflow\uc5d0\uc11c \uae30\ubcf8\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ud30c\uc774\uc36c 3.7.12 \ubc84\uc804\uc744 \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv install 3.7.12\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv install 3.7.12\nDownloading Python-3.7.12.tar.xz...\n-> https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tar.xz\nInstalling Python-3.7.12...\npatching file Doc/library/ctypes.rst\npatching file Lib/test/test_unicode.py\npatching file Modules/_ctypes/_ctypes.c\npatching file Modules/_ctypes/callproc.c\npatching file Modules/_ctypes/ctypes.h\npatching file setup.py\npatching file 'Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst'\npatching file Modules/_decimal/libmpdec/mpdecimal.h\nInstalled Python-3.7.12 to /home/mlops/.pyenv/versions/3.7.12\n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\uc0dd\uc131"},"Python \uac00\uc0c1\ud658\uacbd \uc0dd\uc131"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv virtualenv <\uac00\uc0c1\ud658\uacbd-\uc774\ub984>")," \uba85\ub839\uc744 \ud1b5\ud574 \uc6d0\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc758 \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\uc2dc\ub85c Python 3.7.12 \ubc84\uc804\uc758 ",(0,l.kt)("inlineCode",{parentName:"p"},"demo"),"\ub77c\ub294 \uc774\ub984\uc758 Python \uac00\uc0c1\ud658\uacbd\uc744 \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv virtualenv 3.7.12 demo\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv virtualenv 3.7.12 demo\nLooking in links: /tmp/tmpffqys0gv\nRequirement already satisfied: setuptools in /home/mlops/.pyenv/versions/3.7.12/envs/demo/lib/python3.7/site-packages (47.1.0)\nRequirement already satisfied: pip in /home/mlops/.pyenv/versions/3.7.12/envs/demo/lib/python3.7/site-packages (20.1.1)\n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\uc0ac\uc6a9"},"Python \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv activate <\uac00\uc0c1\ud658\uacbd \uc774\ub984>")," \uba85\ub839\uc744 \ud1b5\ud574 \uc704\uc640 \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \uc0dd\uc131\ud55c \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\uc2dc\ub85c\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"demo"),"\ub77c\ub294 \uc774\ub984\uc758 Python \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv activate demo\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ud604\uc7ac \uac00\uc0c1\ud658\uacbd\uc758 \uc815\ubcf4\uac00 shell\uc758 \ub9e8 \uc55e\uc5d0 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null," Before"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ pyenv activate demo\n")),(0,l.kt)("p",null," After"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.\n(demo) mlops@ubuntu:~$ \n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\ube44\ud65c\uc131\ud654"},"Python \uac00\uc0c1\ud658\uacbd \ube44\ud65c\uc131\ud654"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"source deactivate")," \uba85\ub839\uc744 \ud1b5\ud574 \ud604\uc7ac \uc0ac\uc6a9 \uc911\uc778 \uac00\uc0c1\ud658\uacbd\uc744 \ube44\ud65c\uc131\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source deactivate\n")),(0,l.kt)("p",null," Before"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"(demo) mlops@ubuntu:~$ source deactivate\n")),(0,l.kt)("p",null," After"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ \n")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fb803674.9a37d25f.js b/assets/js/fb803674.9a37d25f.js new file mode 100644 index 00000000..f1cf0415 --- /dev/null +++ b/assets/js/fb803674.9a37d25f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[8834],{3905:(e,n,t)=>{t.d(n,{Zo:()=>v,kt:()=>y});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},v=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},h=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,r=e.originalType,s=e.parentName,v=o(e,["components","mdxType","originalType","parentName"]),u=p(t),h=l,y=u["".concat(s,".").concat(h)]||u[h]||c[h]||r;return t?a.createElement(y,i(i({ref:n},v),{},{components:t})):a.createElement(y,i({ref:n},v))}));function y(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var r=t.length,i=new Array(r);i[0]=h;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o[u]="string"==typeof e?e:l,i[1]=o;for(var p=2;p{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const r={title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",sidebar_position:1},i=void 0,o={unversionedId:"appendix/pyenv",id:"appendix/pyenv",title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",description:"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd",source:"@site/docs/appendix/pyenv.md",sourceDirName:"appendix",slug:"/appendix/pyenv",permalink:"/docs/appendix/pyenv",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/docs/appendix/pyenv.md",tags:[],version:"current",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:1,frontMatter:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"6. Multi Models",permalink:"/docs/api-deployment/seldon-children"},next:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",permalink:"/docs/appendix/metallb"}},s={},p=[{value:"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd",id:"\ud30c\uc774\uc36c-\uac00\uc0c1\ud658\uacbd",level:2},{value:"pyenv \uc124\uce58",id:"pyenv-\uc124\uce58",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"\uc124\uce58 - macOS",id:"\uc124\uce58---macos",level:3},{value:"\uc124\uce58 - Ubuntu",id:"\uc124\uce58---ubuntu",level:3},{value:"pyenv \uc0ac\uc6a9",id:"pyenv-\uc0ac\uc6a9",level:2},{value:"Python \ubc84\uc804 \uc124\uce58",id:"python-\ubc84\uc804-\uc124\uce58",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \uc0dd\uc131",id:"python-\uac00\uc0c1\ud658\uacbd-\uc0dd\uc131",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9",id:"python-\uac00\uc0c1\ud658\uacbd-\uc0ac\uc6a9",level:3},{value:"Python \uac00\uc0c1\ud658\uacbd \ube44\ud65c\uc131\ud654",id:"python-\uac00\uc0c1\ud658\uacbd-\ube44\ud65c\uc131\ud654",level:3}],v={toc:p},u="wrapper";function c(e){let{components:n,...t}=e;return(0,l.kt)(u,(0,a.Z)({},v,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"\ud30c\uc774\uc36c-\uac00\uc0c1\ud658\uacbd"},"\ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd"),(0,l.kt)("p",null,"Python \ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\ub2e4 \ubcf4\uba74 \uc5ec\ub7ec \ubc84\uc804\uc758 Python \ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\ub098, \uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\ubcc4 \ud328\ud0a4\uc9c0 \ubc84\uc804\uc744 \ub530\ub85c \uad00\ub9ac\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\ucc98\ub7fc Python \ud658\uacbd \ud639\uc740 Python Package \ud658\uacbd\uc744 \uac00\uc0c1\ud654\ud558\uc5ec \uad00\ub9ac\ud558\ub294 \uac83\uc744 \uc27d\uac8c \ub3c4\uc640\uc8fc\ub294 \ub3c4\uad6c\ub85c\ub294 pyenv, conda, virtualenv, venv \ub4f1\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774 \uc911 ",(0,l.kt)("em",{parentName:"p"},"\ubaa8\ub450\uc758 MLOps"),"\uc5d0\uc11c\ub294 ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv"},"pyenv"),"\uc640 ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv-virtualenv"},"pyenv-virtualenv"),"\ub97c \uc124\uce58\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8f9\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","pyenv\ub294 Python \ubc84\uc804\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc8fc\uba70, pyenv-virtualenv\ub294 pyenv\uc758 plugin\uc73c\ub85c\uc368 \ud30c\uc774\uc36c \ud328\ud0a4\uc9c0 \ud658\uacbd\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ub3c4\uc640\uc90d\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"pyenv-\uc124\uce58"},"pyenv \uc124\uce58"),(0,l.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,l.kt)("p",null,"\uc6b4\uc601 \uccb4\uc81c\ubcc4\ub85c Prerequisites\uac00 \ub2e4\ub985\ub2c8\ub2e4. ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/pyenv/pyenv/wiki#suggested-build-environment"},"\ub2e4\uc74c \ud398\uc774\uc9c0"),"\ub97c \ucc38\uace0\ud558\uc5ec \ud544\uc218 \ud328\ud0a4\uc9c0\ub4e4\uc744 \uc124\uce58\ud574\uc8fc\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"\uc124\uce58---macos"},"\uc124\uce58 - macOS"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"pyenv, pyenv-virtualenv \uc124\uce58")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"brew update\nbrew install pyenv\nbrew install pyenv-virtualenv\n")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"pyenv \uc124\uc815")),(0,l.kt)("p",null,"macOS\uc758 \uacbd\uc6b0 \uce74\ud0c8\ub9ac\ub098 \ubc84\uc804 \uc774\ud6c4 \uae30\ubcf8 shell\uc774 zsh\ub85c \ubcc0\uacbd\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 zsh\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"echo 'eval \"$(pyenv init -)\"' >> ~/.zshrc\necho 'eval \"$(pyenv virtualenv-init -)\"' >> ~/.zshrc\nsource ~/.zshrc\n")),(0,l.kt)("p",null,"pyenv \uba85\ub839\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv --help\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv --help\nUsage: pyenv []\n\nSome useful pyenv commands are:\n --version Display the version of pyenv\n activate Activate virtual environment\n commands List all available pyenv commands\n deactivate Deactivate virtual environment\n exec Run an executable with the selected Python version\n global Set or show the global Python version(s)\n help Display help for a command\n hooks List hook scripts for a given pyenv command\n init Configure the shell environment for pyenv\n install Install a Python version using python-build\n local Set or show the local application-specific Python version(s)\n prefix Display prefix for a Python version\n rehash Rehash pyenv shims (run this after installing executables)\n root Display the root directory where versions and shims are kept\n shell Set or show the shell-specific Python version\n shims List existing pyenv shims\n uninstall Uninstall a specific Python version\n version Show the current Python version(s) and its origin\n version-file Detect the file that sets the current pyenv version\n version-name Show the current Python version\n version-origin Explain how the current Python version is set\n versions List all Python versions available to pyenv\n virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin\n virtualenv-delete Uninstall a specific Python virtualenv\n virtualenv-init Configure the shell environment for pyenv-virtualenv\n virtualenv-prefix Display real_prefix for a Python virtualenv version\n virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.\n whence List all Python versions that contain the given executable\n which Display the full path to an executable\n\nSee `pyenv help ' for information on a specific command.\nFor full documentation, see: https://github.com/pyenv/pyenv#readme\n")),(0,l.kt)("h3",{id:"\uc124\uce58---ubuntu"},"\uc124\uce58 - Ubuntu"),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"pyenv, pyenv-virtualenv \uc124\uce58")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"curl https://pyenv.run | bash\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \ub0b4\uc6a9\uc774 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"}," % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n 0 0 0 0 0 0 0 0 --:--:-- --:--:-- 0 0 0 0 0 0 0 0 --:--:-- --:--:-- 100 270 100 270 0 0 239 0 0:00:01 0:00:01 --:--:-- 239\nCloning into '/home/mlops/.pyenv'...\nr\n...\n\uc911\ub7b5...\n...\nremote: Enumerating objects: 10, done.\nremote: Counting objects: 100% (10/10), done.\nremote: Compressing objects: 100% (6/6), done.\nremote: Total 10 (delta 1), reused 6 (delta 0), pack-reused 0\nUnpacking objects: 100% (10/10), 2.92 KiB | 2.92 MiB/s, done.\n\nWARNING: seems you still have not added 'pyenv' to the load path.\n\n\n# See the README for instructions on how to set up\n# your shell environment for Pyenv.\n\n# Load pyenv-virtualenv automatically by adding\n# the following to ~/.bashrc:\n\neval \"$(pyenv virtualenv-init -)\"\n\n")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"pyenv \uc124\uc815")),(0,l.kt)("p",null,"\uae30\ubcf8 shell\ub85c bash shell\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub97c \uac00\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4.\nbash\uc5d0\uc11c pyenv\uc640 pyenv-virtualenv \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uc815\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo vi ~/.bashrc\n")),(0,l.kt)("p",null,"\ub2e4\uc74c \ubb38\uc790\uc5f4\uc744 \uc785\ub825\ud55c \ud6c4 \uc800\uc7a5\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'export PATH="$HOME/.pyenv/bin:$PATH"\neval "$(pyenv init -)"\neval "$(pyenv virtualenv-init -)"\n')),(0,l.kt)("p",null,"shell\uc744 restart \ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"exec $SHELL\n")),(0,l.kt)("p",null,"pyenv \uba85\ub839\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv --help\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub418\uba74 \uc815\uc0c1\uc801\uc73c\ub85c \uc124\uc815\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv\npyenv 2.2.2\nUsage: pyenv []\n\nSome useful pyenv commands are:\n --version Display the version of pyenv\n activate Activate virtual environment\n commands List all available pyenv commands\n deactivate Deactivate virtual environment\n doctor Verify pyenv installation and development tools to build pythons.\n exec Run an executable with the selected Python version\n global Set or show the global Python version(s)\n help Display help for a command\n hooks List hook scripts for a given pyenv command\n init Configure the shell environment for pyenv\n install Install a Python version using python-build\n local Set or show the local application-specific Python version(s)\n prefix Display prefix for a Python version\n rehash Rehash pyenv shims (run this after installing executables)\n root Display the root directory where versions and shims are kept\n shell Set or show the shell-specific Python version\n shims List existing pyenv shims\n uninstall Uninstall a specific Python version\n version Show the current Python version(s) and its origin\n version-file Detect the file that sets the current pyenv version\n version-name Show the current Python version\n version-origin Explain how the current Python version is set\n versions List all Python versions available to pyenv\n virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin\n virtualenv-delete Uninstall a specific Python virtualenv\n virtualenv-init Configure the shell environment for pyenv-virtualenv\n virtualenv-prefix Display real_prefix for a Python virtualenv version\n virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.\n whence List all Python versions that contain the given executable\n which Display the full path to an executable\n\nSee `pyenv help ' for information on a specific command.\nFor full documentation, see: https://github.com/pyenv/pyenv#readme\n")),(0,l.kt)("h2",{id:"pyenv-\uc0ac\uc6a9"},"pyenv \uc0ac\uc6a9"),(0,l.kt)("h3",{id:"python-\ubc84\uc804-\uc124\uce58"},"Python \ubc84\uc804 \uc124\uce58"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv install ")," \uba85\ub839\uc744 \ud1b5\ud574 \uc6d0\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc744 \uc124\uce58\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\uc774\ubc88 \ud398\uc774\uc9c0\uc5d0\uc11c\ub294 \uc608\uc2dc\ub85c kubeflow\uc5d0\uc11c \uae30\ubcf8\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ud30c\uc774\uc36c 3.7.12 \ubc84\uc804\uc744 \uc124\uce58\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv install 3.7.12\n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc124\uce58\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uba54\uc2dc\uc9c0\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv install 3.7.12\nDownloading Python-3.7.12.tar.xz...\n-> https://www.python.org/ftp/python/3.7.12/Python-3.7.12.tar.xz\nInstalling Python-3.7.12...\npatching file Doc/library/ctypes.rst\npatching file Lib/test/test_unicode.py\npatching file Modules/_ctypes/_ctypes.c\npatching file Modules/_ctypes/callproc.c\npatching file Modules/_ctypes/ctypes.h\npatching file setup.py\npatching file 'Misc/NEWS.d/next/Core and Builtins/2020-06-30-04-44-29.bpo-41100.PJwA6F.rst'\npatching file Modules/_decimal/libmpdec/mpdecimal.h\nInstalled Python-3.7.12 to /home/mlops/.pyenv/versions/3.7.12\n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\uc0dd\uc131"},"Python \uac00\uc0c1\ud658\uacbd \uc0dd\uc131"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv virtualenv <\uac00\uc0c1\ud658\uacbd-\uc774\ub984>")," \uba85\ub839\uc744 \ud1b5\ud574 \uc6d0\ud558\ub294 \ud30c\uc774\uc36c \ubc84\uc804\uc758 \ud30c\uc774\uc36c \uac00\uc0c1\ud658\uacbd\uc744 \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\uc2dc\ub85c Python 3.7.12 \ubc84\uc804\uc758 ",(0,l.kt)("inlineCode",{parentName:"p"},"demo"),"\ub77c\ub294 \uc774\ub984\uc758 Python \uac00\uc0c1\ud658\uacbd\uc744 \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv virtualenv 3.7.12 demo\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ pyenv virtualenv 3.7.12 demo\nLooking in links: /tmp/tmpffqys0gv\nRequirement already satisfied: setuptools in /home/mlops/.pyenv/versions/3.7.12/envs/demo/lib/python3.7/site-packages (47.1.0)\nRequirement already satisfied: pip in /home/mlops/.pyenv/versions/3.7.12/envs/demo/lib/python3.7/site-packages (20.1.1)\n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\uc0ac\uc6a9"},"Python \uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"pyenv activate <\uac00\uc0c1\ud658\uacbd \uc774\ub984>")," \uba85\ub839\uc744 \ud1b5\ud574 \uc704\uc640 \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \uc0dd\uc131\ud55c \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\uc2dc\ub85c\ub294 ",(0,l.kt)("inlineCode",{parentName:"p"},"demo"),"\ub77c\ub294 \uc774\ub984\uc758 Python \uac00\uc0c1\ud658\uacbd\uc744 \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv activate demo\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 \ud604\uc7ac \uac00\uc0c1\ud658\uacbd\uc758 \uc815\ubcf4\uac00 shell\uc758 \ub9e8 \uc55e\uc5d0 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null," Before"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ pyenv activate demo\n")),(0,l.kt)("p",null," After"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.\n(demo) mlops@ubuntu:~$ \n")),(0,l.kt)("h3",{id:"python-\uac00\uc0c1\ud658\uacbd-\ube44\ud65c\uc131\ud654"},"Python \uac00\uc0c1\ud658\uacbd \ube44\ud65c\uc131\ud654"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"source deactivate")," \uba85\ub839\uc744 \ud1b5\ud574 \ud604\uc7ac \uc0ac\uc6a9 \uc911\uc778 \uac00\uc0c1\ud658\uacbd\uc744 \ube44\ud65c\uc131\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source deactivate\n")),(0,l.kt)("p",null," Before"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"(demo) mlops@ubuntu:~$ source deactivate\n")),(0,l.kt)("p",null," After"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mlops@ubuntu:~$ \n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fc8ffda8.330230bb.js b/assets/js/fc8ffda8.330230bb.js deleted file mode 100644 index ffcab897..00000000 --- a/assets/js/fc8ffda8.330230bb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[860],{3905:(e,a,n)=>{n.d(a,{Zo:()=>c,kt:()=>k});var t=n(7294);function l(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var a=1;a=0||(l[n]=e[n]);return l}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=t.createContext({}),p=function(e){var a=t.useContext(i),n=a;return e&&(n="function"==typeof e?e(a):s(s({},a),e)),n},c=function(e){var a=p(e.components);return t.createElement(i.Provider,{value:a},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},d=t.forwardRef((function(e,a){var n=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=p(n),d=l,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||r;return n?t.createElement(k,s(s({ref:a},c),{},{components:n})):t.createElement(k,s({ref:a},c))}));function k(e,a){var n=arguments,l=a&&a.mdxType;if("string"==typeof e||l){var r=n.length,s=new Array(r);s[0]=d;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[m]="string"==typeof e?e:l,s[1]=o;for(var p=2;p{n.r(a),n.d(a,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var t=n(7462),l=(n(7294),n(3905));const r={title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",sidebar_position:2},s=void 0,o={unversionedId:"appendix/metallb",id:"version-1.0/appendix/metallb",title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",description:"MetalLB\ub780?",source:"@site/versioned_docs/version-1.0/appendix/metallb.md",sourceDirName:"appendix",slug:"/appendix/metallb",permalink:"/docs/1.0/appendix/metallb",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/appendix/metallb.md",tags:[],version:"1.0",lastUpdatedBy:"Minwook Je",lastUpdatedAt:1702865124,formattedLastUpdatedAt:"2023\ub144 12\uc6d4 18\uc77c",sidebarPosition:2,frontMatter:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",permalink:"/docs/1.0/appendix/pyenv"},next:{title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",permalink:"/docs/1.0/further-readings/info"}},i={},p=[{value:"MetalLB\ub780?",id:"metallb\ub780",level:2},{value:"\uc694\uad6c\uc0ac\ud56d",id:"\uc694\uad6c\uc0ac\ud56d",level:2},{value:"MetalLB \uc124\uce58",id:"metallb-\uc124\uce58",level:2},{value:"Preparation",id:"preparation",level:3},{value:"\uc124\uce58 - Manifest",id:"\uc124\uce58---manifest",level:3},{value:"1. MetalLB \ub97c \uc124\uce58\ud569\ub2c8\ub2e4.",id:"1-metallb-\ub97c-\uc124\uce58\ud569\ub2c8\ub2e4",level:4},{value:"2. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"2-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Layer 2 Configuration",id:"layer-2-configuration",level:3},{value:"metallb_config.yaml",id:"metallb_configyaml",level:4},{value:"MetalLB \uc0ac\uc6a9",id:"metallb-\uc0ac\uc6a9",level:2},{value:"Kubeflow Dashboard",id:"kubeflow-dashboard",level:3},{value:"minio Dashboard",id:"minio-dashboard",level:3},{value:"mlflow Dashboard",id:"mlflow-dashboard",level:3},{value:"Grafana Dashboard",id:"grafana-dashboard",level:3}],c={toc:p},m="wrapper";function u(e){let{components:a,...r}=e;return(0,l.kt)(m,(0,t.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"metallb\ub780"},"MetalLB\ub780?"),(0,l.kt)("p",null,"Kubernetes \uc0ac\uc6a9 \uc2dc AWS, GCP, Azure \uc640 \uac19\uc740 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub294 \uc790\uccb4\uc801\uc73c\ub85c \ub85c\ub4dc \ubca8\ub7f0\uc11c(Load Balancer)\ub97c \uc81c\uacf5\ud574 \uc8fc\uc9c0\ub9cc, \uc628\ud504\ub808\ubbf8\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c\ub294 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ubaa8\ub4c8\uc744 \ucd94\uac00\uc801\uc73c\ub85c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("a",{parentName:"p",href:"https://metallb.universe.tf/"},"MetalLB"),"\ub294 \ubca0\uc5b4\uba54\ud0c8 \ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub85c\ub4dc \ubca8\ub7f0\uc11c\ub97c \uc81c\uacf5\ud558\ub294 \uc624\ud508\uc18c\uc2a4 \ud504\ub85c\uc81d\ud2b8 \uc785\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"\uc694\uad6c\uc0ac\ud56d"},"\uc694\uad6c\uc0ac\ud56d"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"\uc694\uad6c \uc0ac\ud56d"),(0,l.kt)("th",{parentName:"tr",align:null},"\ubc84\uc804 \ubc0f \ub0b4\uc6a9"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Kubernetes"),(0,l.kt)("td",{parentName:"tr",align:null},"\ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc774 \uc5c6\ub294 >= v1.13.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://metallb.universe.tf/installation/network-addons/"},"\ud638\ud658\uac00\ub2a5\ud55c \ub124\ud2b8\uc6cc\ud06c CNI")),(0,l.kt)("td",{parentName:"tr",align:null},"Calico, Canal, Cilium, Flannel, Kube-ovn, Kube-router, Weave Net")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IPv4 \uc8fc\uc18c"),(0,l.kt)("td",{parentName:"tr",align:null},"MetalLB \ubc30\ud3ec\uc5d0 \uc0ac\uc6a9")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BGP \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0"),(0,l.kt)("td",{parentName:"tr",align:null},"BGP \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud558\ub294 \ud558\ub098 \uc774\uc0c1\uc758 \ub77c\uc6b0\ud130")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"\ub178\ub4dc \uac04 \ud3ec\ud2b8 TCP/UDP 7946 \uc624\ud508"),(0,l.kt)("td",{parentName:"tr",align:null},"memberlist \uc694\uad6c \uc0ac\ud56d")))),(0,l.kt)("h2",{id:"metallb-\uc124\uce58"},"MetalLB \uc124\uce58"),(0,l.kt)("h3",{id:"preparation"},"Preparation"),(0,l.kt)("p",null,"IPVS \ubaa8\ub4dc\uc5d0\uc11c kube-proxy\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 Kubernetes v1.14.2 \uc774\ud6c4\ubd80\ud130\ub294 \uc5c4\uaca9\ud55c ARP(strictARP) \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Kube-router\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc5c4\uaca9\ud55c ARP\ub97c \ud65c\uc131\ud654\ud558\ubbc0\ub85c \uc11c\ube44\uc2a4 \ud504\ub85d\uc2dc\ub85c \uc0ac\uc6a9\ud560 \uacbd\uc6b0\uc5d0\ub294 \uc774 \uae30\ub2a5\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\uc5c4\uaca9\ud55c ARP \ubaa8\ub4dc\ub97c \uc801\uc6a9\ud558\uae30\uc5d0 \uc55e\uc11c, \ud604\uc7ac \ubaa8\ub4dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"# see what changes would be made, returns nonzero returncode if different\nkubectl get configmap kube-proxy -n kube-system -o yaml | \\\ngrep strictARP\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"strictARP: false\n")),(0,l.kt)("p",null,"strictARP: false \uac00 \ucd9c\ub825\ub418\ub294 \uacbd\uc6b0 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec strictARP: true\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4.\n(strictARP: true\uac00 \uc774\ubbf8 \ucd9c\ub825\ub41c\ub2e4\uba74 \ub2e4\uc74c \ucee4\ub9e8\ub4dc\ub97c \uc218\ud589\ud558\uc9c0 \uc54a\uc73c\uc154\ub3c4 \ub429\ub2c8\ub2e4.)"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'# actually apply the changes, returns nonzero returncode on errors only\nkubectl get configmap kube-proxy -n kube-system -o yaml | \\\nsed -e "s/strictARP: false/strictARP: true/" | \\\nkubectl apply -f - -n kube-system\n')),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"Warning: resource configmaps/kube-proxy is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.\nconfigmap/kube-proxy configured\n")),(0,l.kt)("h3",{id:"\uc124\uce58---manifest"},"\uc124\uce58 - Manifest"),(0,l.kt)("h4",{id:"1-metallb-\ub97c-\uc124\uce58\ud569\ub2c8\ub2e4"},"1. MetalLB \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml\nkubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml\n")),(0,l.kt)("h4",{id:"2-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"2. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,l.kt)("p",null,"metallb-system namespace \uc758 2 \uac1c\uc758 pod \uc774 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n metallb-system\n")),(0,l.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncontroller-7dcc8764f4-8n92q 1/1 Running 1 1m\nspeaker-fnf8l 1/1 Running 1 1m\n")),(0,l.kt)("p",null,"\ub9e4\ub2c8\ud398\uc2a4\ud2b8\uc758 \uad6c\uc131 \uc694\uc18c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"metallb-system/controller",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"deployment \ub85c \ubc30\ud3ec\ub418\uba70, \ub85c\ub4dc \ubca8\ub7f0\uc2f1\uc744 \uc218\ud589\ud560 external IP \uc8fc\uc18c\uc758 \ud560\ub2f9\uc744 \ucc98\ub9ac\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4."))),(0,l.kt)("li",{parentName:"ul"},"metallb-system/speaker",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"daemonset \ud615\ud0dc\ub85c \ubc30\ud3ec\ub418\uba70, \uc678\ubd80 \ud2b8\ub798\ud53d\uacfc \uc11c\ube44\uc2a4\ub97c \uc5f0\uacb0\ud574 \ub124\ud2b8\uc6cc\ud06c \ud1b5\uc2e0\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \uad6c\uc131\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4.")))),(0,l.kt)("p",null,"\uc11c\ube44\uc2a4\uc5d0\ub294 \ucee8\ud2b8\ub864\ub7ec \ubc0f \uc2a4\ud53c\ucee4\uc640 \uad6c\uc131 \uc694\uc18c\uac00 \uc791\ub3d9\ud558\ub294 \ub370 \ud544\uc694\ud55c RBAC \uc0ac\uc6a9 \uad8c\ud55c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"configuration"},"Configuration"),(0,l.kt)("p",null,"MetalLB \uc758 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uc815\ucc45 \uc124\uc815\uc740 \uad00\ub828 \uc124\uc815 \uc815\ubcf4\ub97c \ub2f4\uc740 configmap \uc744 \ubc30\ud3ec\ud558\uc5ec \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"MetalLB \uc5d0\uc11c \uad6c\uc131\ud560 \uc218 \uc788\ub294 \ubaa8\ub4dc\ub85c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 2\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"https://metallb.universe.tf/concepts/layer2/"},"Layer 2 \ubaa8\ub4dc")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"https://metallb.universe.tf/concepts/bgp/"},"BGP \ubaa8\ub4dc"))),(0,l.kt)("p",null,"\uc5ec\uae30\uc5d0\uc11c\ub294 Layer 2 \ubaa8\ub4dc\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"layer-2-configuration"},"Layer 2 Configuration"),(0,l.kt)("p",null,"Layer 2 \ubaa8\ub4dc\ub294 \uac04\ub2e8\ud558\uac8c \uc0ac\uc6a9\ud560 IP \uc8fc\uc18c\uc758 \ub300\uc5ed\ub9cc \uc124\uc815\ud558\uba74 \ub429\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Layer 2 \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc6cc\ucee4 \ub178\ub4dc\uc758 \ub124\ud2b8\uc6cc\ud06c \uc778\ud130\ud398\uc774\uc2a4\uc5d0 IP\ub97c \ubc14\uc778\ub529 \ud558\uc9c0 \uc54a\uc544\ub3c4 \ub418\ub294\ub370 \ub85c\uceec \ub124\ud2b8\uc6cc\ud06c\uc758 ARP \uc694\uccad\uc5d0 \uc9c1\uc811 \uc751\ub2f5\ud558\uc5ec \ucef4\ud4e8\ud130\uc758 MAC\uc8fc\uc18c\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\ub3d9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub2e4\uc74c ",(0,l.kt)("inlineCode",{parentName:"p"},"metallb_config.yaml")," \ud30c\uc77c\uc740 MetalLB \uac00 192.168.35.100 ~ 192.168.35.110\uc758 IP\uc5d0 \ub300\ud55c \uc81c\uc5b4 \uad8c\ud55c\uc744 \uc81c\uacf5\ud558\uace0 Layer 2 \ubaa8\ub4dc\ub97c \uad6c\uc131\ud558\ub294 \uc124\uc815\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uac00 \ubd84\ub9ac\ub41c \uacbd\uc6b0, 192.168.35.100 ~ 192.168.35.110 \ub300\uc5ed\uc774 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc640 \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc \ubaa8\ub450 \uc811\uadfc \uac00\ub2a5\ud55c \ub300\uc5ed\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,l.kt)("h4",{id:"metallb_configyaml"},"metallb_config.yaml"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nkind: ConfigMap\nmetadata:\n namespace: metallb-system\n name: config\ndata:\n config: |\n address-pools:\n - name: default\n protocol: layer2\n addresses:\n - 192.168.35.100-192.168.35.110 # IP \ub300\uc5ed\ud3ed\n")),(0,l.kt)("p",null,"\uc704\uc758 \uc124\uc815\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-test"},"kubectl apply -f metallb_config.yaml \n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-test"},"configmap/config created\n")),(0,l.kt)("h2",{id:"metallb-\uc0ac\uc6a9"},"MetalLB \uc0ac\uc6a9"),(0,l.kt)("h3",{id:"kubeflow-dashboard"},"Kubeflow Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 kubeflow\uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 istio-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 istio-ingressgateway \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 ",(0,l.kt)("inlineCode",{parentName:"p"},"LoadBalancer"),"\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nistio-ingressgateway ClusterIP 10.103.72.5 15021/TCP,80/TCP,443/TCP,31400/TCP,15443/TCP 4h21m\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"spec:\n clusterIP: 10.103.72.5\n clusterIPs:\n - 10.103.72.5\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: status-port\n port: 15021\n protocol: TCP\n targetPort: 15021\n - name: http2\n port: 80\n protocol: TCP\n targetPort: 8080\n - name: https\n port: 443\n protocol: TCP\n targetPort: 8443\n - name: tcp\n port: 31400\n protocol: TCP\n targetPort: 31400\n - name: tls\n port: 15443\n protocol: TCP\n targetPort: 15443\n selector:\n app: istio-ingressgateway\n istio: ingressgateway\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.100 # Add IP\nstatus:\n loadBalancer: {}\n")),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.100")," \uc778 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nistio-ingressgateway LoadBalancer 10.103.72.5 192.168.35.100 15021:31054/TCP,80:30853/TCP,443:30443/TCP,31400:30012/TCP,15443:31650/TCP 5h1m\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.100"},"http://192.168.35.100")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-istio-ingressgateway-setting.png",src:n(5556).Z,width:"1811",height:"1046"})),(0,l.kt)("h3",{id:"minio-dashboard"},"minio Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 minio \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 kubeflow \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 minio-service \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/minio-service -n kubeflow\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nminio-service ClusterIP 10.109.209.87 9000/TCP 5h14m\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/minio-service -n kubeflow\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n kubectl.kubernetes.io/last-applied-configuration: |\n {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"application-crd-id":"kubeflow-pipelines"},"name":"minio-ser>\n creationTimestamp: "2022-01-05T08:44:23Z"\n labels:\n application-crd-id: kubeflow-pipelines\n name: minio-service\n namespace: kubeflow\n resourceVersion: "21120"\n uid: 0053ee28-4f87-47bb-ad6b-7ad68aa29a48\nspec:\n clusterIP: 10.109.209.87\n clusterIPs:\n - 10.109.209.87\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: http\n port: 9000\n protocol: TCP\n targetPort: 9000\n selector:\n app: minio\n application-crd-id: kubeflow-pipelines\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.101 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.101")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/minio-service -n kubeflow\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nminio-service LoadBalancer 10.109.209.87 192.168.35.101 9000:31371/TCP 5h21m\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.101:9000"},"http://192.168.35.101:9000")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-minio-setting.png",src:n(6589).Z,width:"1811",height:"1046"})),(0,l.kt)("h3",{id:"mlflow-dashboard"},"mlflow Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 mlflow \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 mlflow-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 mlflow-server-service \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nmlflow-server-service ClusterIP 10.111.173.209 5000/TCP 4m50s\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n meta.helm.sh/release-name: mlflow-server\n meta.helm.sh/release-namespace: mlflow-system\n creationTimestamp: "2022-01-07T04:00:19Z"\n labels:\n app.kubernetes.io/managed-by: Helm\n name: mlflow-server-service\n namespace: mlflow-system\n resourceVersion: "276246"\n uid: e5d39fb7-ad98-47e7-b512-f9c673055356\nspec:\n clusterIP: 10.111.173.209\n clusterIPs:\n - 10.111.173.209\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - port: 5000\n protocol: TCP\n targetPort: 5000\n selector:\n app.kubernetes.io/name: mlflow-server\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.102 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.102")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nmlflow-server-service LoadBalancer 10.111.173.209 192.168.35.102 5000:32287/TCP 6m11s\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.102:5000"},"http://192.168.35.102:5000")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-mlflow-setting.png",src:n(5864).Z,width:"1922",height:"1082"})),(0,l.kt)("h3",{id:"grafana-dashboard"},"Grafana Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 Grafana \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 seldon-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 seldon-core-analytics-grafana \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nseldon-core-analytics-grafana ClusterIP 10.109.20.161 80/TCP 94s\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n meta.helm.sh/release-name: seldon-core-analytics\n meta.helm.sh/release-namespace: seldon-system\n creationTimestamp: "2022-01-07T04:16:47Z"\n labels:\n app.kubernetes.io/instance: seldon-core-analytics\n app.kubernetes.io/managed-by: Helm\n app.kubernetes.io/name: grafana\n app.kubernetes.io/version: 7.0.3\n helm.sh/chart: grafana-5.1.4\n name: seldon-core-analytics-grafana\n namespace: seldon-system\n resourceVersion: "280605"\n uid: 75073b78-92ec-472c-b0d5-240038ea8fa5\nspec:\n clusterIP: 10.109.20.161\n clusterIPs:\n - 10.109.20.161\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: service\n port: 80\n protocol: TCP\n targetPort: 3000\n selector:\n app.kubernetes.io/instance: seldon-core-analytics\n app.kubernetes.io/name: grafana\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.103 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.103")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nseldon-core-analytics-grafana LoadBalancer 10.109.20.161 192.168.35.103 80:31191/TCP 5m14s\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.103:80"},"http://192.168.35.103:80")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-grafana-setting.png",src:n(2291).Z,width:"1922",height:"1082"})))}u.isMDXComponent=!0},2291:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-grafana-setting-95945b35a1316b2dbd1f0109991c0a0b.png"},5556:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-istio-ingressgateway-setting-3adfcf1bd5c4ddf45c54f4c4b5d4ceab.png"},6589:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-minio-setting-78fb86dafe3137ae3ecfbb49e2d7effb.png"},5864:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-mlflow-setting-a4b0d197be47701209a6ef99612e89d6.png"}}]); \ No newline at end of file diff --git a/assets/js/fc8ffda8.4b99b77c.js b/assets/js/fc8ffda8.4b99b77c.js new file mode 100644 index 00000000..4753d0c1 --- /dev/null +++ b/assets/js/fc8ffda8.4b99b77c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[860],{3905:(e,a,n)=>{n.d(a,{Zo:()=>c,kt:()=>k});var t=n(7294);function l(e,a,n){return a in e?Object.defineProperty(e,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[a]=n,e}function r(e,a){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);a&&(t=t.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var a=1;a=0||(l[n]=e[n]);return l}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=t.createContext({}),p=function(e){var a=t.useContext(i),n=a;return e&&(n="function"==typeof e?e(a):s(s({},a),e)),n},c=function(e){var a=p(e.components);return t.createElement(i.Provider,{value:a},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return t.createElement(t.Fragment,{},a)}},d=t.forwardRef((function(e,a){var n=e.components,l=e.mdxType,r=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=p(n),d=l,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||r;return n?t.createElement(k,s(s({ref:a},c),{},{components:n})):t.createElement(k,s({ref:a},c))}));function k(e,a){var n=arguments,l=a&&a.mdxType;if("string"==typeof e||l){var r=n.length,s=new Array(r);s[0]=d;var o={};for(var i in a)hasOwnProperty.call(a,i)&&(o[i]=a[i]);o.originalType=e,o[m]="string"==typeof e?e:l,s[1]=o;for(var p=2;p{n.r(a),n.d(a,{assets:()=>i,contentTitle:()=>s,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>p});var t=n(7462),l=(n(7294),n(3905));const r={title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",sidebar_position:2},s=void 0,o={unversionedId:"appendix/metallb",id:"version-1.0/appendix/metallb",title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",description:"MetalLB\ub780?",source:"@site/versioned_docs/version-1.0/appendix/metallb.md",sourceDirName:"appendix",slug:"/appendix/metallb",permalink:"/docs/1.0/appendix/metallb",draft:!1,editUrl:"https://github.com/mlops-for-all/mlops-for-all.github.io/tree/main/versioned_docs/version-1.0/appendix/metallb.md",tags:[],version:"1.0",lastUpdatedBy:"conqrean",lastUpdatedAt:1705274857,formattedLastUpdatedAt:"2024\ub144 1\uc6d4 14\uc77c",sidebarPosition:2,frontMatter:{title:"2. Bare Metal \ud074\ub7ec\uc2a4\ud130\uc6a9 load balancer metallb \uc124\uce58",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"1. Python \uac00\uc0c1\ud658\uacbd \uc124\uce58",permalink:"/docs/1.0/appendix/pyenv"},next:{title:"\ub2e4\ub8e8\uc9c0 \ubabb\ud55c \uac83\ub4e4",permalink:"/docs/1.0/further-readings/info"}},i={},p=[{value:"MetalLB\ub780?",id:"metallb\ub780",level:2},{value:"\uc694\uad6c\uc0ac\ud56d",id:"\uc694\uad6c\uc0ac\ud56d",level:2},{value:"MetalLB \uc124\uce58",id:"metallb-\uc124\uce58",level:2},{value:"Preparation",id:"preparation",level:3},{value:"\uc124\uce58 - Manifest",id:"\uc124\uce58---manifest",level:3},{value:"1. MetalLB \ub97c \uc124\uce58\ud569\ub2c8\ub2e4.",id:"1-metallb-\ub97c-\uc124\uce58\ud569\ub2c8\ub2e4",level:4},{value:"2. \uc815\uc0c1 \uc124\uce58 \ud655\uc778",id:"2-\uc815\uc0c1-\uc124\uce58-\ud655\uc778",level:4},{value:"Configuration",id:"configuration",level:2},{value:"Layer 2 Configuration",id:"layer-2-configuration",level:3},{value:"metallb_config.yaml",id:"metallb_configyaml",level:4},{value:"MetalLB \uc0ac\uc6a9",id:"metallb-\uc0ac\uc6a9",level:2},{value:"Kubeflow Dashboard",id:"kubeflow-dashboard",level:3},{value:"minio Dashboard",id:"minio-dashboard",level:3},{value:"mlflow Dashboard",id:"mlflow-dashboard",level:3},{value:"Grafana Dashboard",id:"grafana-dashboard",level:3}],c={toc:p},m="wrapper";function u(e){let{components:a,...r}=e;return(0,l.kt)(m,(0,t.Z)({},c,r,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"metallb\ub780"},"MetalLB\ub780?"),(0,l.kt)("p",null,"Kubernetes \uc0ac\uc6a9 \uc2dc AWS, GCP, Azure \uc640 \uac19\uc740 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc5d0\uc11c\ub294 \uc790\uccb4\uc801\uc73c\ub85c \ub85c\ub4dc \ubca8\ub7f0\uc11c(Load Balancer)\ub97c \uc81c\uacf5\ud574 \uc8fc\uc9c0\ub9cc, \uc628\ud504\ub808\ubbf8\uc2a4 \ud074\ub7ec\uc2a4\ud130\uc5d0\uc11c\ub294 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ubaa8\ub4c8\uc744 \ucd94\uac00\uc801\uc73c\ub85c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("a",{parentName:"p",href:"https://metallb.universe.tf/"},"MetalLB"),"\ub294 \ubca0\uc5b4\uba54\ud0c8 \ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ub85c\ub4dc \ubca8\ub7f0\uc11c\ub97c \uc81c\uacf5\ud558\ub294 \uc624\ud508\uc18c\uc2a4 \ud504\ub85c\uc81d\ud2b8 \uc785\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"\uc694\uad6c\uc0ac\ud56d"},"\uc694\uad6c\uc0ac\ud56d"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"\uc694\uad6c \uc0ac\ud56d"),(0,l.kt)("th",{parentName:"tr",align:null},"\ubc84\uc804 \ubc0f \ub0b4\uc6a9"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Kubernetes"),(0,l.kt)("td",{parentName:"tr",align:null},"\ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc774 \uc5c6\ub294 >= v1.13.0")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://metallb.universe.tf/installation/network-addons/"},"\ud638\ud658\uac00\ub2a5\ud55c \ub124\ud2b8\uc6cc\ud06c CNI")),(0,l.kt)("td",{parentName:"tr",align:null},"Calico, Canal, Cilium, Flannel, Kube-ovn, Kube-router, Weave Net")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"IPv4 \uc8fc\uc18c"),(0,l.kt)("td",{parentName:"tr",align:null},"MetalLB \ubc30\ud3ec\uc5d0 \uc0ac\uc6a9")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"BGP \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0"),(0,l.kt)("td",{parentName:"tr",align:null},"BGP \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud558\ub294 \ud558\ub098 \uc774\uc0c1\uc758 \ub77c\uc6b0\ud130")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"\ub178\ub4dc \uac04 \ud3ec\ud2b8 TCP/UDP 7946 \uc624\ud508"),(0,l.kt)("td",{parentName:"tr",align:null},"memberlist \uc694\uad6c \uc0ac\ud56d")))),(0,l.kt)("h2",{id:"metallb-\uc124\uce58"},"MetalLB \uc124\uce58"),(0,l.kt)("h3",{id:"preparation"},"Preparation"),(0,l.kt)("p",null,"IPVS \ubaa8\ub4dc\uc5d0\uc11c kube-proxy\ub97c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 Kubernetes v1.14.2 \uc774\ud6c4\ubd80\ud130\ub294 \uc5c4\uaca9\ud55c ARP(strictARP) \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Kube-router\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc5c4\uaca9\ud55c ARP\ub97c \ud65c\uc131\ud654\ud558\ubbc0\ub85c \uc11c\ube44\uc2a4 \ud504\ub85d\uc2dc\ub85c \uc0ac\uc6a9\ud560 \uacbd\uc6b0\uc5d0\ub294 \uc774 \uae30\ub2a5\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\uc5c4\uaca9\ud55c ARP \ubaa8\ub4dc\ub97c \uc801\uc6a9\ud558\uae30\uc5d0 \uc55e\uc11c, \ud604\uc7ac \ubaa8\ub4dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"# see what changes would be made, returns nonzero returncode if different\nkubectl get configmap kube-proxy -n kube-system -o yaml | \\\ngrep strictARP\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"strictARP: false\n")),(0,l.kt)("p",null,"strictARP: false \uac00 \ucd9c\ub825\ub418\ub294 \uacbd\uc6b0 \ub2e4\uc74c\uc744 \uc2e4\ud589\ud558\uc5ec strictARP: true\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4.\n(strictARP: true\uac00 \uc774\ubbf8 \ucd9c\ub825\ub41c\ub2e4\uba74 \ub2e4\uc74c \ucee4\ub9e8\ub4dc\ub97c \uc218\ud589\ud558\uc9c0 \uc54a\uc73c\uc154\ub3c4 \ub429\ub2c8\ub2e4.)"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'# actually apply the changes, returns nonzero returncode on errors only\nkubectl get configmap kube-proxy -n kube-system -o yaml | \\\nsed -e "s/strictARP: false/strictARP: true/" | \\\nkubectl apply -f - -n kube-system\n')),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \uc218\ud589\ub418\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"Warning: resource configmaps/kube-proxy is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.\nconfigmap/kube-proxy configured\n")),(0,l.kt)("h3",{id:"\uc124\uce58---manifest"},"\uc124\uce58 - Manifest"),(0,l.kt)("h4",{id:"1-metallb-\ub97c-\uc124\uce58\ud569\ub2c8\ub2e4"},"1. MetalLB \ub97c \uc124\uce58\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml\nkubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml\n")),(0,l.kt)("h4",{id:"2-\uc815\uc0c1-\uc124\uce58-\ud655\uc778"},"2. \uc815\uc0c1 \uc124\uce58 \ud655\uc778"),(0,l.kt)("p",null,"metallb-system namespace \uc758 2 \uac1c\uc758 pod \uc774 \ubaa8\ub450 Running \uc774 \ub420 \ub54c\uae4c\uc9c0 \uae30\ub2e4\ub9bd\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get pod -n metallb-system\n")),(0,l.kt)("p",null,"\ubaa8\ub450 Running \uc774 \ub418\uba74 \ub2e4\uc74c\uacfc \ube44\uc2b7\ud55c \uacb0\uacfc\uac00 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME READY STATUS RESTARTS AGE\ncontroller-7dcc8764f4-8n92q 1/1 Running 1 1m\nspeaker-fnf8l 1/1 Running 1 1m\n")),(0,l.kt)("p",null,"\ub9e4\ub2c8\ud398\uc2a4\ud2b8\uc758 \uad6c\uc131 \uc694\uc18c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"metallb-system/controller",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"deployment \ub85c \ubc30\ud3ec\ub418\uba70, \ub85c\ub4dc \ubca8\ub7f0\uc2f1\uc744 \uc218\ud589\ud560 external IP \uc8fc\uc18c\uc758 \ud560\ub2f9\uc744 \ucc98\ub9ac\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4."))),(0,l.kt)("li",{parentName:"ul"},"metallb-system/speaker",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"daemonset \ud615\ud0dc\ub85c \ubc30\ud3ec\ub418\uba70, \uc678\ubd80 \ud2b8\ub798\ud53d\uacfc \uc11c\ube44\uc2a4\ub97c \uc5f0\uacb0\ud574 \ub124\ud2b8\uc6cc\ud06c \ud1b5\uc2e0\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \uad6c\uc131\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4.")))),(0,l.kt)("p",null,"\uc11c\ube44\uc2a4\uc5d0\ub294 \ucee8\ud2b8\ub864\ub7ec \ubc0f \uc2a4\ud53c\ucee4\uc640 \uad6c\uc131 \uc694\uc18c\uac00 \uc791\ub3d9\ud558\ub294 \ub370 \ud544\uc694\ud55c RBAC \uc0ac\uc6a9 \uad8c\ud55c\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"configuration"},"Configuration"),(0,l.kt)("p",null,"MetalLB \uc758 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uc815\ucc45 \uc124\uc815\uc740 \uad00\ub828 \uc124\uc815 \uc815\ubcf4\ub97c \ub2f4\uc740 configmap \uc744 \ubc30\ud3ec\ud558\uc5ec \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"MetalLB \uc5d0\uc11c \uad6c\uc131\ud560 \uc218 \uc788\ub294 \ubaa8\ub4dc\ub85c\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 2\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"https://metallb.universe.tf/concepts/layer2/"},"Layer 2 \ubaa8\ub4dc")),(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("a",{parentName:"li",href:"https://metallb.universe.tf/concepts/bgp/"},"BGP \ubaa8\ub4dc"))),(0,l.kt)("p",null,"\uc5ec\uae30\uc5d0\uc11c\ub294 Layer 2 \ubaa8\ub4dc\ub85c \uc9c4\ud589\ud558\uaca0\uc2b5\ub2c8\ub2e4."),(0,l.kt)("h3",{id:"layer-2-configuration"},"Layer 2 Configuration"),(0,l.kt)("p",null,"Layer 2 \ubaa8\ub4dc\ub294 \uac04\ub2e8\ud558\uac8c \uc0ac\uc6a9\ud560 IP \uc8fc\uc18c\uc758 \ub300\uc5ed\ub9cc \uc124\uc815\ud558\uba74 \ub429\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","Layer 2 \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc6cc\ucee4 \ub178\ub4dc\uc758 \ub124\ud2b8\uc6cc\ud06c \uc778\ud130\ud398\uc774\uc2a4\uc5d0 IP\ub97c \ubc14\uc778\ub529 \ud558\uc9c0 \uc54a\uc544\ub3c4 \ub418\ub294\ub370 \ub85c\uceec \ub124\ud2b8\uc6cc\ud06c\uc758 ARP \uc694\uccad\uc5d0 \uc9c1\uc811 \uc751\ub2f5\ud558\uc5ec \ucef4\ud4e8\ud130\uc758 MAC\uc8fc\uc18c\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc81c\uacf5\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc791\ub3d9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub2e4\uc74c ",(0,l.kt)("inlineCode",{parentName:"p"},"metallb_config.yaml")," \ud30c\uc77c\uc740 MetalLB \uac00 192.168.35.100 ~ 192.168.35.110\uc758 IP\uc5d0 \ub300\ud55c \uc81c\uc5b4 \uad8c\ud55c\uc744 \uc81c\uacf5\ud558\uace0 Layer 2 \ubaa8\ub4dc\ub97c \uad6c\uc131\ud558\ub294 \uc124\uc815\uc785\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc\uc640 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uac00 \ubd84\ub9ac\ub41c \uacbd\uc6b0, 192.168.35.100 ~ 192.168.35.110 \ub300\uc5ed\uc774 \ud074\ub77c\uc774\uc5b8\ud2b8 \ub178\ub4dc\uc640 \ud074\ub7ec\uc2a4\ud130 \ub178\ub4dc \ubaa8\ub450 \uc811\uadfc \uac00\ub2a5\ud55c \ub300\uc5ed\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4."),(0,l.kt)("h4",{id:"metallb_configyaml"},"metallb_config.yaml"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"apiVersion: v1\nkind: ConfigMap\nmetadata:\n namespace: metallb-system\n name: config\ndata:\n config: |\n address-pools:\n - name: default\n protocol: layer2\n addresses:\n - 192.168.35.100-192.168.35.110 # IP \ub300\uc5ed\ud3ed\n")),(0,l.kt)("p",null,"\uc704\uc758 \uc124\uc815\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-test"},"kubectl apply -f metallb_config.yaml \n")),(0,l.kt)("p",null,"\uc815\uc0c1\uc801\uc73c\ub85c \ubc30\ud3ec\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-test"},"configmap/config created\n")),(0,l.kt)("h2",{id:"metallb-\uc0ac\uc6a9"},"MetalLB \uc0ac\uc6a9"),(0,l.kt)("h3",{id:"kubeflow-dashboard"},"Kubeflow Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 kubeflow\uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 istio-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 istio-ingressgateway \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 ",(0,l.kt)("inlineCode",{parentName:"p"},"LoadBalancer"),"\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nistio-ingressgateway ClusterIP 10.103.72.5 15021/TCP,80/TCP,443/TCP,31400/TCP,15443/TCP 4h21m\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"spec:\n clusterIP: 10.103.72.5\n clusterIPs:\n - 10.103.72.5\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: status-port\n port: 15021\n protocol: TCP\n targetPort: 15021\n - name: http2\n port: 80\n protocol: TCP\n targetPort: 8080\n - name: https\n port: 443\n protocol: TCP\n targetPort: 8443\n - name: tcp\n port: 31400\n protocol: TCP\n targetPort: 31400\n - name: tls\n port: 15443\n protocol: TCP\n targetPort: 15443\n selector:\n app: istio-ingressgateway\n istio: ingressgateway\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.100 # Add IP\nstatus:\n loadBalancer: {}\n")),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.100")," \uc778 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/istio-ingressgateway -n istio-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nistio-ingressgateway LoadBalancer 10.103.72.5 192.168.35.100 15021:31054/TCP,80:30853/TCP,443:30443/TCP,31400:30012/TCP,15443:31650/TCP 5h1m\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.100"},"http://192.168.35.100")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-istio-ingressgateway-setting.png",src:n(5556).Z,width:"1811",height:"1046"})),(0,l.kt)("h3",{id:"minio-dashboard"},"minio Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 minio \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 kubeflow \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 minio-service \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/minio-service -n kubeflow\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nminio-service ClusterIP 10.109.209.87 9000/TCP 5h14m\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/minio-service -n kubeflow\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n kubectl.kubernetes.io/last-applied-configuration: |\n {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"application-crd-id":"kubeflow-pipelines"},"name":"minio-ser>\n creationTimestamp: "2022-01-05T08:44:23Z"\n labels:\n application-crd-id: kubeflow-pipelines\n name: minio-service\n namespace: kubeflow\n resourceVersion: "21120"\n uid: 0053ee28-4f87-47bb-ad6b-7ad68aa29a48\nspec:\n clusterIP: 10.109.209.87\n clusterIPs:\n - 10.109.209.87\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: http\n port: 9000\n protocol: TCP\n targetPort: 9000\n selector:\n app: minio\n application-crd-id: kubeflow-pipelines\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.101 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.101")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/minio-service -n kubeflow\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nminio-service LoadBalancer 10.109.209.87 192.168.35.101 9000:31371/TCP 5h21m\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.101:9000"},"http://192.168.35.101:9000")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-minio-setting.png",src:n(6589).Z,width:"1811",height:"1046"})),(0,l.kt)("h3",{id:"mlflow-dashboard"},"mlflow Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 mlflow \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 mlflow-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 mlflow-server-service \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nmlflow-server-service ClusterIP 10.111.173.209 5000/TCP 4m50s\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n meta.helm.sh/release-name: mlflow-server\n meta.helm.sh/release-namespace: mlflow-system\n creationTimestamp: "2022-01-07T04:00:19Z"\n labels:\n app.kubernetes.io/managed-by: Helm\n name: mlflow-server-service\n namespace: mlflow-system\n resourceVersion: "276246"\n uid: e5d39fb7-ad98-47e7-b512-f9c673055356\nspec:\n clusterIP: 10.111.173.209\n clusterIPs:\n - 10.111.173.209\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - port: 5000\n protocol: TCP\n targetPort: 5000\n selector:\n app.kubernetes.io/name: mlflow-server\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.102 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.102")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/mlflow-server-service -n mlflow-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nmlflow-server-service LoadBalancer 10.111.173.209 192.168.35.102 5000:32287/TCP 6m11s\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.102:5000"},"http://192.168.35.102:5000")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-mlflow-setting.png",src:n(5864).Z,width:"1922",height:"1082"})),(0,l.kt)("h3",{id:"grafana-dashboard"},"Grafana Dashboard"),(0,l.kt)("p",null,"\uba3c\uc800 Grafana \uc758 Dashboard \ub97c \uc81c\uacf5\ud558\ub294 seldon-system \ub124\uc784\uc2a4\ud398\uc774\uc2a4\uc758 seldon-core-analytics-grafana \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc744 LoadBalancer\ub85c \ubcc0\uacbd\ud558\uc5ec MetalLB\ub85c\ubd80\ud130 \ub85c\ub4dc \ubca8\ub7f0\uc2f1 \uae30\ub2a5\uc744 \uc81c\uacf5\ubc1b\uae30 \uc804\uc5d0, \ud604\uc7ac \uc0c1\ud0dc\ub97c \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("p",null,"\ud574\ub2f9 \uc11c\ube44\uc2a4\uc758 \ud0c0\uc785\uc740 ClusterIP\uc774\uba70, External-IP \uac12\uc740 ",(0,l.kt)("inlineCode",{parentName:"p"},"none")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nseldon-core-analytics-grafana ClusterIP 10.109.20.161 80/TCP 94s\n")),(0,l.kt)("p",null,"type \uc744 LoadBalancer \ub85c \ubcc0\uacbd\ud558\uace0 \uc6d0\ud558\ub294 IP \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0 loadBalancerIP \ud56d\ubaa9\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.",(0,l.kt)("br",{parentName:"p"}),"\n","\ucd94\uac00 \ud558\uc9c0 \uc54a\uc744 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc5d0\uc11c \uc124\uc815\ud55c IP \uc8fc\uc18c\ud480\uc5d0\uc11c \uc21c\ucc28\uc801\uc73c\ub85c IP \uc8fc\uc18c\uac00 \ubc30\uc815\ub429\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl edit svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'apiVersion: v1\nkind: Service\nmetadata:\n annotations:\n meta.helm.sh/release-name: seldon-core-analytics\n meta.helm.sh/release-namespace: seldon-system\n creationTimestamp: "2022-01-07T04:16:47Z"\n labels:\n app.kubernetes.io/instance: seldon-core-analytics\n app.kubernetes.io/managed-by: Helm\n app.kubernetes.io/name: grafana\n app.kubernetes.io/version: 7.0.3\n helm.sh/chart: grafana-5.1.4\n name: seldon-core-analytics-grafana\n namespace: seldon-system\n resourceVersion: "280605"\n uid: 75073b78-92ec-472c-b0d5-240038ea8fa5\nspec:\n clusterIP: 10.109.20.161\n clusterIPs:\n - 10.109.20.161\n ipFamilies:\n - IPv4\n ipFamilyPolicy: SingleStack\n ports:\n - name: service\n port: 80\n protocol: TCP\n targetPort: 3000\n selector:\n app.kubernetes.io/instance: seldon-core-analytics\n app.kubernetes.io/name: grafana\n sessionAffinity: None\n type: LoadBalancer # Change ClusterIP to LoadBalancer\n loadBalancerIP: 192.168.35.103 # Add IP\nstatus:\n loadBalancer: {}\n')),(0,l.kt)("p",null,"\ub2e4\uc2dc \ud655\uc778\uc744 \ud574\ubcf4\uba74 External-IP \uac12\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"192.168.35.103")," \uc778 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl get svc/seldon-core-analytics-grafana -n seldon-system\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nseldon-core-analytics-grafana LoadBalancer 10.109.20.161 192.168.35.103 80:31191/TCP 5m14s\n")),(0,l.kt)("p",null,"Web Browser \ub97c \uc5f4\uc5b4 ",(0,l.kt)("a",{parentName:"p",href:"http://192.168.35.103:80"},"http://192.168.35.103:80")," \uc73c\ub85c \uc811\uc18d\ud558\uc5ec, \ub2e4\uc74c\uacfc \uac19\uc740 \ud654\uba74\uc774 \ucd9c\ub825\ub418\ub294 \uac83\uc744 \ud655\uc778\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"login-after-grafana-setting.png",src:n(2291).Z,width:"1922",height:"1082"})))}u.isMDXComponent=!0},2291:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-grafana-setting-95945b35a1316b2dbd1f0109991c0a0b.png"},5556:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-istio-ingressgateway-setting-3adfcf1bd5c4ddf45c54f4c4b5d4ceab.png"},6589:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-minio-setting-78fb86dafe3137ae3ecfbb49e2d7effb.png"},5864:(e,a,n)=>{n.d(a,{Z:()=>t});const t=n.p+"assets/images/login-after-mlflow-setting-a4b0d197be47701209a6ef99612e89d6.png"}}]); \ No newline at end of file diff --git a/assets/js/main.1646a242.js b/assets/js/main.3dad9a1b.js similarity index 96% rename from assets/js/main.1646a242.js rename to assets/js/main.3dad9a1b.js index a7daafc2..8b3db4f5 100644 --- a/assets/js/main.1646a242.js +++ b/assets/js/main.3dad9a1b.js @@ -1,2 +1,2 @@ -/*! For license information please see main.1646a242.js.LICENSE.txt */ -(self.webpackChunkv_2=self.webpackChunkv_2||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),l=n(6887);const s={"01a9496d":[()=>n.e(2416).then(n.bind(n,6377)),"@site/docs/introduction/intro.md",6377],"0425fa84":[()=>n.e(5384).then(n.bind(n,9189)),"@site/versioned_docs/version-1.0/prerequisites/docker/docker.md",9189],"089e5a41":[()=>n.e(2949).then(n.bind(n,1205)),"@site/docs/setup-kubernetes/install-kubernetes-module.md",1205],"13e7227b":[()=>n.e(434).then(n.bind(n,2998)),"@site/docs/setup-components/install-components-mlflow.md",2998],"15cf2139":[()=>n.e(9925).then(n.bind(n,2549)),"@site/docs/setup-components/install-components-seldon.md",2549],"165f2d18":[()=>n.e(6397).then(n.bind(n,1663)),"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/tensorboards.md",1663],"1671dd43":[()=>n.e(6572).then(n.bind(n,5680)),"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",5680],"167d5ab1":[()=>n.e(4177).then(n.bind(n,6659)),"@site/versioned_docs/version-1.0/kubeflow/advanced-environment.md",6659],17896441:[()=>Promise.all([n.e(532),n.e(9455),n.e(7918)]).then(n.bind(n,903)),"@theme/DocItem",903],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"1e99a105":[()=>n.e(7367).then(n.bind(n,1909)),"@site/versioned_docs/version-1.0/prerequisites/docker/introduction.md",1909],"1f391b9e":[()=>Promise.all([n.e(532),n.e(9455),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"2369f063":[()=>n.e(7549).then(n.t.bind(n,5745,19)),"/home/runner/work/mlops-for-all.github.io/mlops-for-all.github.io/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"272bb263":[()=>n.e(6358).then(n.bind(n,2921)),"@site/versioned_docs/version-1.0/prerequisites/docker/command.md",2921],"29c7a46b":[()=>n.e(1612).then(n.bind(n,7272)),"@site/versioned_docs/version-1.0/kubeflow/basic-component.md",7272],"2a07449d":[()=>n.e(200).then(n.bind(n,6006)),"@site/docs/introduction/levels.md",6006],"2bbcffe4":[()=>n.e(9558).then(n.bind(n,9187)),"@site/versioned_docs/version-1.0/setup-components/install-components-mlflow.md",9187],"2d9584e5":[()=>n.e(3870).then(n.bind(n,687)),"@site/versioned_docs/version-1.0/introduction/levels.md",687],"306a8c6c":[()=>n.e(7616).then(n.t.bind(n,9479,19)),"~docs/community/version-current-metadata-prop-751.json",9479],"317f9d80":[()=>n.e(4119).then(n.bind(n,9616)),"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes-module.md",9616],"352e0155":[()=>n.e(2657).then(n.t.bind(n,7395,19)),"~docs/default/version-1-0-metadata-prop-474.json",7395],"3546d36b":[()=>n.e(8677).then(n.bind(n,6230)),"@site/docs/prerequisites/docker/install.md",6230],"36614f1b":[()=>n.e(5865).then(n.bind(n,3347)),"@site/versioned_docs/version-1.0/introduction/intro.md",3347],"36fd762b":[()=>n.e(6052).then(n.bind(n,3066)),"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",3066],38642333:[()=>n.e(6643).then(n.bind(n,3157)),"@site/versioned_docs/version-1.0/api-deployment/seldon-iris.md",3157],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"39b2b572":[()=>n.e(8837).then(n.bind(n,1036)),"@site/versioned_docs/version-1.0/kubeflow/advanced-pipeline.md",1036],"3f2d0791":[()=>n.e(5435).then(n.bind(n,1490)),"@site/docs/prerequisites/docker/images.md",1490],"44d64813":[()=>n.e(4023).then(n.bind(n,8657)),"@site/docs/api-deployment/seldon-children.md",8657],"4579a793":[()=>n.e(8737).then(n.bind(n,1044)),"@site/docs/kubeflow/advanced-run.md",1044],"48eb1972":[()=>n.e(7651).then(n.bind(n,1979)),"@site/docs/prerequisites/docker/introduction.md",1979],"4a09dd96":[()=>n.e(53).then(n.bind(n,9657)),"@site/docs/kubeflow-dashboard-guide/experiments-and-others.md",9657],"4a2e0471":[()=>n.e(3774).then(n.bind(n,5593)),"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/intro.md",5593],"4e3fc5d7":[()=>n.e(6742).then(n.bind(n,5883)),"@site/versioned_docs/version-1.0/kubeflow/basic-pipeline-upload.md",5883],"4fc796a7":[()=>n.e(3872).then(n.bind(n,7984)),"@site/versioned_docs/version-1.0/api-deployment/seldon-children.md",7984],"541347e5":[()=>n.e(2725).then(n.bind(n,8593)),"@site/versioned_docs/version-1.0/introduction/component.md",8593],"5523074d":[()=>n.e(4297).then(n.bind(n,8330)),"@site/versioned_docs/version-1.0/introduction/why_kubernetes.md",8330],"57b26f6a":[()=>n.e(8693).then(n.bind(n,2323)),"@site/versioned_docs/version-1.0/kubeflow/advanced-component.md",2323],"5b3cd5ae":[()=>n.e(2375).then(n.bind(n,5046)),"@site/docs/api-deployment/seldon-fields.md",5046],"5dc48d01":[()=>n.e(2610).then(n.bind(n,3)),"@site/docs/setup-kubernetes/kubernetes.md",3],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6016bee0":[()=>n.e(2349).then(n.bind(n,5008)),"@site/versioned_docs/version-1.0/api-deployment/seldon-pg.md",5008],"6246222d":[()=>n.e(728).then(n.bind(n,8252)),"@site/versioned_docs/version-1.0/setup-components/install-components-seldon.md",8252],"68f81397":[()=>n.e(2603).then(n.bind(n,5542)),"@site/docs/kubeflow-dashboard-guide/experiments.md",5542],"6b57b422":[()=>n.e(8449).then(n.bind(n,1073)),"@site/docs/setup-components/install-components-pg.md",1073],"6b7916cd":[()=>n.e(8457).then(n.bind(n,7852)),"@site/versioned_docs/version-1.0/api-deployment/seldon-mlflow.md",7852],"6d8a40f9":[()=>n.e(4775).then(n.bind(n,778)),"@site/docs/setup-kubernetes/setup-nvidia-gpu.md",778],"6fb0e7c9":[()=>n.e(5105).then(n.bind(n,6761)),"@site/versioned_docs/version-1.0/setup-kubernetes/intro.md",6761],"751a793c":[()=>n.e(8932).then(n.bind(n,1481)),"@site/docs/prerequisites/docker/command.md",1481],"7bb5633a":[()=>n.e(2803).then(n.bind(n,7985)),"@site/versioned_docs/version-1.0/api-deployment/what-is-api-deployment.md",7985],"7ef46b74":[()=>n.e(2676).then(n.bind(n,5435)),"@site/docs/kubeflow/advanced-component.md",5435],"8061fab4":[()=>n.e(1044).then(n.bind(n,7231)),"@site/versioned_docs/version-1.0/setup-components/install-components-kf.md",7231],"838277dc":[()=>n.e(9683).then(n.bind(n,36)),"@site/versioned_docs/version-1.0/kubeflow/kubeflow-concepts.md",36],"84c20269":[()=>n.e(1017).then(n.bind(n,1108)),"@site/docs/prerequisites/docker/docker.md",1108],"88b38b2b":[()=>n.e(4299).then(n.bind(n,4977)),"@site/docs/kubeflow/basic-component.md",4977],"8999d56c":[()=>n.e(8231).then(n.bind(n,8629)),"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/notebooks.md",8629],"8b8d160d":[()=>n.e(5787).then(n.bind(n,5219)),"@site/versioned_docs/version-1.0/setup-kubernetes/install-prerequisite.md",5219],"8c6322ce":[()=>n.e(5604).then(n.bind(n,5762)),"@site/docs/kubeflow/how-to-debug.md",5762],"8dd8b1e3":[()=>n.e(8425).then(n.bind(n,7503)),"@site/docs/prerequisites/docker/advanced.md",7503],"91e4f63c":[()=>n.e(822).then(n.bind(n,3018)),"@site/versioned_docs/version-1.0/api-deployment/seldon-fields.md",3018],"92059b0a":[()=>n.e(5658).then(n.bind(n,8719)),"@site/docs/kubeflow/advanced-pipeline.md",8719],"935f2afb":[()=>n.e(2197).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"97a152fd":[()=>n.e(6012).then(n.bind(n,1131)),"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s.md",1131],"9a73b948":[()=>n.e(1725).then(n.bind(n,1344)),"@site/docs/kubeflow/basic-run.md",1344],"9b54c487":[()=>n.e(1008).then(n.bind(n,8527)),"@site/versioned_docs/version-1.0/kubeflow/basic-requirements.md",8527],"9c5e90dd":[()=>n.e(5867).then(n.bind(n,3215)),"@site/community/contributors.md",3215],"9f898b75":[()=>n.e(2157).then(n.bind(n,6496)),"@site/versioned_docs/version-1.0/further-readings/info.md",6496],a606c19a:[()=>n.e(4555).then(n.bind(n,2171)),"@site/docs/kubeflow-dashboard-guide/volumes.md",2171],a7958b24:[()=>n.e(3255).then(n.bind(n,2316)),"@site/docs/kubeflow/advanced-environment.md",2316],ae95ad8d:[()=>n.e(2996).then(n.t.bind(n,3769,19)),"/home/runner/work/mlops-for-all.github.io/mlops-for-all.github.io/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],affd256f:[()=>n.e(3457).then(n.bind(n,1085)),"@site/docs/kubeflow-dashboard-guide/notebooks.md",1085],b0207dc0:[()=>n.e(5597).then(n.bind(n,6707)),"@site/community/how-to-contribute.md",6707],b0739f8c:[()=>n.e(1948).then(n.bind(n,6621)),"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments-and-others.md",6621],b1ad0a9e:[()=>n.e(956).then(n.bind(n,4836)),"@site/docs/setup-components/install-components-kf.md",4836],b1f93f8c:[()=>n.e(5717).then(n.bind(n,4408)),"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",4408],b2277d04:[()=>n.e(6746).then(n.bind(n,8526)),"@site/docs/kubeflow/basic-pipeline.md",8526],b3824f13:[()=>n.e(4818).then(n.bind(n,7482)),"@site/docs/kubeflow/kubeflow-concepts.md",7482],b91e83a7:[()=>n.e(560).then(n.bind(n,4087)),"@site/versioned_docs/version-1.0/kubeflow/how-to-debug.md",4087],b93cd888:[()=>n.e(797).then(n.bind(n,864)),"@site/docs/setup-kubernetes/install-prerequisite.md",864],bb396da7:[()=>n.e(5642).then(n.bind(n,9886)),"@site/docs/kubeflow-dashboard-guide/tensorboards.md",9886],bcbfd5bd:[()=>n.e(2527).then(n.t.bind(n,2481,19)),"/home/runner/work/mlops-for-all.github.io/mlops-for-all.github.io/.docusaurus/docusaurus-plugin-content-docs/community/plugin-route-context-module-100.json",2481],be2f486c:[()=>n.e(9398).then(n.bind(n,1043)),"@site/docs/api-deployment/seldon-iris.md",1043],bf383222:[()=>n.e(6661).then(n.bind(n,9104)),"@site/versioned_docs/version-1.0/setup-kubernetes/kubernetes.md",9104],c07e8a62:[()=>n.e(1800).then(n.bind(n,7182)),"@site/versioned_docs/version-1.0/prerequisites/docker/images.md",7182],c1115317:[()=>n.e(6639).then(n.bind(n,5072)),"@site/versioned_docs/version-1.0/prerequisites/docker/advanced.md",5072],c1242cde:[()=>n.e(2508).then(n.bind(n,4981)),"@site/versioned_docs/version-1.0/prerequisites/docker/install.md",4981],c37072e4:[()=>n.e(9325).then(n.bind(n,3561)),"@site/versioned_docs/version-1.0/kubeflow/basic-run.md",3561],c430b8da:[()=>n.e(3684).then(n.bind(n,4182)),"@site/versioned_docs/version-1.0/appendix/pyenv.md",4182],c4afae5c:[()=>n.e(5825).then(n.bind(n,5150)),"@site/docs/kubeflow-dashboard-guide/intro.md",5150],c58e39e2:[()=>n.e(1804).then(n.bind(n,8953)),"@site/docs/kubeflow/basic-pipeline-upload.md",8953],c8feb4f8:[()=>n.e(6540).then(n.bind(n,3019)),"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/volumes.md",3019],cf706b7e:[()=>n.e(2779).then(n.bind(n,7013)),"@site/docs/appendix/metallb.md",7013],d0b69af8:[()=>n.e(2429).then(n.bind(n,4292)),"@site/versioned_docs/version-1.0/setup-components/install-components-pg.md",4292],d3303310:[()=>n.e(7346).then(n.bind(n,4762)),"@site/versioned_docs/version-1.0/setup-kubernetes/setup-nvidia-gpu.md",4762],d5c893db:[()=>n.e(3225).then(n.bind(n,7950)),"@site/docs/kubeflow/kubeflow-intro.md",7950],d6a8d944:[()=>n.e(8860).then(n.bind(n,2145)),"@site/docs/kubeflow/advanced-mlflow.md",2145],d7d2d94a:[()=>n.e(8309).then(n.bind(n,626)),"@site/docs/api-deployment/seldon-pg.md",626],d7dc9408:[()=>n.e(8225).then(n.bind(n,6240)),"@site/community/community.md",6240],d9cdcec8:[()=>n.e(2335).then(n.bind(n,8233)),"@site/docs/introduction/why_kubernetes.md",8233],d9ed3de0:[()=>n.e(7345).then(n.bind(n,5965)),"@site/docs/api-deployment/what-is-api-deployment.md",5965],e070c0d8:[()=>n.e(5127).then(n.bind(n,762)),"@site/docs/kubeflow/basic-requirements.md",762],e287e96b:[()=>n.e(8657).then(n.bind(n,14)),"@site/versioned_docs/version-1.0/kubeflow/basic-pipeline.md",14],e2bc44c1:[()=>n.e(5040).then(n.bind(n,2741)),"@site/versioned_docs/version-1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm.md",2741],e3a88667:[()=>n.e(5271).then(n.bind(n,5310)),"@site/versioned_docs/version-1.0/kubeflow/kubeflow-intro.md",5310],e46e340c:[()=>n.e(204).then(n.bind(n,3621)),"@site/versioned_docs/version-1.0/kubeflow/advanced-mlflow.md",3621],e7600b97:[()=>n.e(799).then(n.bind(n,5609)),"@site/docs/api-deployment/seldon-mlflow.md",5609],e8d17a59:[()=>n.e(1526).then(n.bind(n,8370)),"@site/versioned_docs/version-1.0/kubeflow-dashboard-guide/experiments.md",8370],f1d05694:[()=>n.e(8084).then(n.bind(n,8749)),"@site/docs/introduction/component.md",8749],f28dfc8e:[()=>n.e(3641).then(n.bind(n,7180)),"@site/docs/further-readings/info.md",7180],f84c40fb:[()=>n.e(9700).then(n.bind(n,4046)),"@site/versioned_docs/version-1.0/kubeflow/advanced-run.md",4046],facca37e:[()=>n.e(1427).then(n.bind(n,5208)),"@site/docs/setup-kubernetes/intro.md",5208],fb6a8c4a:[()=>n.e(9229).then(n.bind(n,3595)),"@site/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube.md",3595],fb803674:[()=>n.e(8834).then(n.bind(n,1676)),"@site/docs/appendix/pyenv.md",1676],fc8ffda8:[()=>n.e(860).then(n.bind(n,6808)),"@site/versioned_docs/version-1.0/appendix/metallb.md",6808]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function p(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],p={},f=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=s[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const f=[{path:"/markdown-page",component:p("/markdown-page","c62"),exact:!0},{path:"/docs/1.0",component:p("/docs/1.0","8c8"),routes:[{path:"/docs/1.0/api-deployment/seldon-children",component:p("/docs/1.0/api-deployment/seldon-children","fc8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/api-deployment/seldon-fields",component:p("/docs/1.0/api-deployment/seldon-fields","117"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/api-deployment/seldon-iris",component:p("/docs/1.0/api-deployment/seldon-iris","648"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/api-deployment/seldon-mlflow",component:p("/docs/1.0/api-deployment/seldon-mlflow","1e7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/api-deployment/seldon-pg",component:p("/docs/1.0/api-deployment/seldon-pg","8b3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/api-deployment/what-is-api-deployment",component:p("/docs/1.0/api-deployment/what-is-api-deployment","8b2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/appendix/metallb",component:p("/docs/1.0/appendix/metallb","95d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/appendix/pyenv",component:p("/docs/1.0/appendix/pyenv","409"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/further-readings/info",component:p("/docs/1.0/further-readings/info","fdd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/introduction/component",component:p("/docs/1.0/introduction/component","f7b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/introduction/intro",component:p("/docs/1.0/introduction/intro","da5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/introduction/levels",component:p("/docs/1.0/introduction/levels","b73"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/introduction/why_kubernetes",component:p("/docs/1.0/introduction/why_kubernetes","96a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow-dashboard-guide/experiments",component:p("/docs/1.0/kubeflow-dashboard-guide/experiments","018"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow-dashboard-guide/experiments-and-others",component:p("/docs/1.0/kubeflow-dashboard-guide/experiments-and-others","4ad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow-dashboard-guide/intro",component:p("/docs/1.0/kubeflow-dashboard-guide/intro","fe5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow-dashboard-guide/notebooks",component:p("/docs/1.0/kubeflow-dashboard-guide/notebooks","c71"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow-dashboard-guide/tensorboards",component:p("/docs/1.0/kubeflow-dashboard-guide/tensorboards","bcd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow-dashboard-guide/volumes",component:p("/docs/1.0/kubeflow-dashboard-guide/volumes","01a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/advanced-component",component:p("/docs/1.0/kubeflow/advanced-component","bf6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/advanced-environment",component:p("/docs/1.0/kubeflow/advanced-environment","349"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/advanced-mlflow",component:p("/docs/1.0/kubeflow/advanced-mlflow","a52"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/advanced-pipeline",component:p("/docs/1.0/kubeflow/advanced-pipeline","c00"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/advanced-run",component:p("/docs/1.0/kubeflow/advanced-run","b83"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/basic-component",component:p("/docs/1.0/kubeflow/basic-component","0c4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/basic-pipeline",component:p("/docs/1.0/kubeflow/basic-pipeline","594"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/basic-pipeline-upload",component:p("/docs/1.0/kubeflow/basic-pipeline-upload","817"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/basic-requirements",component:p("/docs/1.0/kubeflow/basic-requirements","745"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/basic-run",component:p("/docs/1.0/kubeflow/basic-run","8b5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/how-to-debug",component:p("/docs/1.0/kubeflow/how-to-debug","abc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/kubeflow-concepts",component:p("/docs/1.0/kubeflow/kubeflow-concepts","384"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/kubeflow/kubeflow-intro",component:p("/docs/1.0/kubeflow/kubeflow-intro","63f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/prerequisites/docker/",component:p("/docs/1.0/prerequisites/docker/","321"),exact:!0,sidebar:"preSidebar"},{path:"/docs/1.0/prerequisites/docker/advanced",component:p("/docs/1.0/prerequisites/docker/advanced","b58"),exact:!0,sidebar:"preSidebar"},{path:"/docs/1.0/prerequisites/docker/command",component:p("/docs/1.0/prerequisites/docker/command","0a4"),exact:!0,sidebar:"preSidebar"},{path:"/docs/1.0/prerequisites/docker/images",component:p("/docs/1.0/prerequisites/docker/images","b32"),exact:!0,sidebar:"preSidebar"},{path:"/docs/1.0/prerequisites/docker/install",component:p("/docs/1.0/prerequisites/docker/install","071"),exact:!0,sidebar:"preSidebar"},{path:"/docs/1.0/prerequisites/docker/introduction",component:p("/docs/1.0/prerequisites/docker/introduction","3c1"),exact:!0,sidebar:"preSidebar"},{path:"/docs/1.0/setup-components/install-components-kf",component:p("/docs/1.0/setup-components/install-components-kf","a10"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-components/install-components-mlflow",component:p("/docs/1.0/setup-components/install-components-mlflow","0c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-components/install-components-pg",component:p("/docs/1.0/setup-components/install-components-pg","2a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-components/install-components-seldon",component:p("/docs/1.0/setup-components/install-components-seldon","841"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-kubernetes/install-kubernetes-module",component:p("/docs/1.0/setup-kubernetes/install-kubernetes-module","4d6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",component:p("/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s","b8a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",component:p("/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm","d04"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",component:p("/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube","e02"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-kubernetes/install-prerequisite",component:p("/docs/1.0/setup-kubernetes/install-prerequisite","997"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-kubernetes/intro",component:p("/docs/1.0/setup-kubernetes/intro","346"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-kubernetes/kubernetes",component:p("/docs/1.0/setup-kubernetes/kubernetes","7b2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/1.0/setup-kubernetes/setup-nvidia-gpu",component:p("/docs/1.0/setup-kubernetes/setup-nvidia-gpu","103"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/community",component:p("/community","b74"),routes:[{path:"/community/community",component:p("/community/community","8f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/community/contributors",component:p("/community/contributors","d74"),exact:!0,sidebar:"tutorialSidebar"},{path:"/community/how-to-contribute",component:p("/community/how-to-contribute","e2d"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/docs",component:p("/docs","361"),routes:[{path:"/docs/api-deployment/seldon-children",component:p("/docs/api-deployment/seldon-children","fa2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api-deployment/seldon-fields",component:p("/docs/api-deployment/seldon-fields","1b4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api-deployment/seldon-iris",component:p("/docs/api-deployment/seldon-iris","e52"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api-deployment/seldon-mlflow",component:p("/docs/api-deployment/seldon-mlflow","d47"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api-deployment/seldon-pg",component:p("/docs/api-deployment/seldon-pg","223"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api-deployment/what-is-api-deployment",component:p("/docs/api-deployment/what-is-api-deployment","9c8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/appendix/metallb",component:p("/docs/appendix/metallb","a3a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/appendix/pyenv",component:p("/docs/appendix/pyenv","989"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/further-readings/info",component:p("/docs/further-readings/info","7af"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/introduction/component",component:p("/docs/introduction/component","54d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/introduction/intro",component:p("/docs/introduction/intro","86b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/introduction/levels",component:p("/docs/introduction/levels","c78"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/introduction/why_kubernetes",component:p("/docs/introduction/why_kubernetes","d27"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow-dashboard-guide/experiments",component:p("/docs/kubeflow-dashboard-guide/experiments","4da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow-dashboard-guide/experiments-and-others",component:p("/docs/kubeflow-dashboard-guide/experiments-and-others","8a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow-dashboard-guide/intro",component:p("/docs/kubeflow-dashboard-guide/intro","736"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow-dashboard-guide/notebooks",component:p("/docs/kubeflow-dashboard-guide/notebooks","fcb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow-dashboard-guide/tensorboards",component:p("/docs/kubeflow-dashboard-guide/tensorboards","dfd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow-dashboard-guide/volumes",component:p("/docs/kubeflow-dashboard-guide/volumes","e19"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/advanced-component",component:p("/docs/kubeflow/advanced-component","461"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/advanced-environment",component:p("/docs/kubeflow/advanced-environment","742"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/advanced-mlflow",component:p("/docs/kubeflow/advanced-mlflow","433"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/advanced-pipeline",component:p("/docs/kubeflow/advanced-pipeline","720"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/advanced-run",component:p("/docs/kubeflow/advanced-run","e7b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/basic-component",component:p("/docs/kubeflow/basic-component","550"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/basic-pipeline",component:p("/docs/kubeflow/basic-pipeline","4bc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/basic-pipeline-upload",component:p("/docs/kubeflow/basic-pipeline-upload","c91"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/basic-requirements",component:p("/docs/kubeflow/basic-requirements","d5d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/basic-run",component:p("/docs/kubeflow/basic-run","763"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/how-to-debug",component:p("/docs/kubeflow/how-to-debug","0f2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/kubeflow-concepts",component:p("/docs/kubeflow/kubeflow-concepts","d23"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/kubeflow/kubeflow-intro",component:p("/docs/kubeflow/kubeflow-intro","4ff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/prerequisites/docker/",component:p("/docs/prerequisites/docker/","528"),exact:!0,sidebar:"preSidebar"},{path:"/docs/prerequisites/docker/advanced",component:p("/docs/prerequisites/docker/advanced","4ad"),exact:!0,sidebar:"preSidebar"},{path:"/docs/prerequisites/docker/command",component:p("/docs/prerequisites/docker/command","3dd"),exact:!0,sidebar:"preSidebar"},{path:"/docs/prerequisites/docker/images",component:p("/docs/prerequisites/docker/images","857"),exact:!0,sidebar:"preSidebar"},{path:"/docs/prerequisites/docker/install",component:p("/docs/prerequisites/docker/install","c90"),exact:!0,sidebar:"preSidebar"},{path:"/docs/prerequisites/docker/introduction",component:p("/docs/prerequisites/docker/introduction","5b5"),exact:!0,sidebar:"preSidebar"},{path:"/docs/setup-components/install-components-kf",component:p("/docs/setup-components/install-components-kf","b88"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-components/install-components-mlflow",component:p("/docs/setup-components/install-components-mlflow","61c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-components/install-components-pg",component:p("/docs/setup-components/install-components-pg","e17"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-components/install-components-seldon",component:p("/docs/setup-components/install-components-seldon","e68"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-kubernetes/install-kubernetes-module",component:p("/docs/setup-kubernetes/install-kubernetes-module","752"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s",component:p("/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s","120"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm",component:p("/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm","f7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube",component:p("/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube","ae9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-kubernetes/install-prerequisite",component:p("/docs/setup-kubernetes/install-prerequisite","ead"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-kubernetes/intro",component:p("/docs/setup-kubernetes/intro","b38"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-kubernetes/kubernetes",component:p("/docs/setup-kubernetes/kubernetes","9fe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/setup-kubernetes/setup-nvidia-gpu",component:p("/docs/setup-kubernetes/setup-nvidia-gpu","696"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:p("/","e82"),exact:!0},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),l=n(412);const s=[n(6657),n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(5742),h=n(2263),b=n(4996),g=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),S=n(197);function E(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e}}=(0,h.Z)(),{pathname:t}=(0,c.TH)();return e+(0,b.Z)(t)}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function x(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,g.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(_,null),r.createElement(E,null),r.createElement(S.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var L=n(8934),A=n(8940);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const R=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),N("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?N("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=N("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(R,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const D=O,I="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function j(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${I}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,j(e))),r.createElement("div",{id:I}))}function q(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(z,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,b.Z)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var $=n(4763);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement($.Z,null,r.createElement(A.M,null,r.createElement(L.t,null,r.createElement(p,null,r.createElement(U,null),r.createElement(x,null),r.createElement(q,null),r.createElement(D,{location:T(t)},e)))))}var G=n(6887);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var V=n(9670);const W=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,Q={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),P(e))},X=Object.freeze(Q);if(l.Z.canUseDOM){window.docusaurus=X;const e=o.hydrate;P(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-097K82469K"],"anonymizeIP":true,"id":"default"}},"docusaurus-plugin-content-docs":{"community":{"path":"/community","versions":[{"name":"current","label":"Next","isLast":true,"path":"/community","mainDocId":"community","docs":[{"id":"community","path":"/community/community","sidebar":"tutorialSidebar"},{"id":"contributors","path":"/community/contributors","sidebar":"tutorialSidebar"},{"id":"how-to-contribute","path":"/community/how-to-contribute","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/community/community","label":"community"}}}}],"breadcrumbs":true},"default":{"path":"/docs","versions":[{"name":"current","label":"1.0","isLast":true,"path":"/docs","mainDocId":"introduction/intro","docs":[{"id":"api-deployment/seldon-children","path":"/docs/api-deployment/seldon-children","sidebar":"tutorialSidebar"},{"id":"api-deployment/seldon-fields","path":"/docs/api-deployment/seldon-fields","sidebar":"tutorialSidebar"},{"id":"api-deployment/seldon-iris","path":"/docs/api-deployment/seldon-iris","sidebar":"tutorialSidebar"},{"id":"api-deployment/seldon-mlflow","path":"/docs/api-deployment/seldon-mlflow","sidebar":"tutorialSidebar"},{"id":"api-deployment/seldon-pg","path":"/docs/api-deployment/seldon-pg","sidebar":"tutorialSidebar"},{"id":"api-deployment/what-is-api-deployment","path":"/docs/api-deployment/what-is-api-deployment","sidebar":"tutorialSidebar"},{"id":"appendix/metallb","path":"/docs/appendix/metallb","sidebar":"tutorialSidebar"},{"id":"appendix/pyenv","path":"/docs/appendix/pyenv","sidebar":"tutorialSidebar"},{"id":"further-readings/info","path":"/docs/further-readings/info","sidebar":"tutorialSidebar"},{"id":"introduction/component","path":"/docs/introduction/component","sidebar":"tutorialSidebar"},{"id":"introduction/intro","path":"/docs/introduction/intro","sidebar":"tutorialSidebar"},{"id":"introduction/levels","path":"/docs/introduction/levels","sidebar":"tutorialSidebar"},{"id":"introduction/why_kubernetes","path":"/docs/introduction/why_kubernetes","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/experiments","path":"/docs/kubeflow-dashboard-guide/experiments","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/experiments-and-others","path":"/docs/kubeflow-dashboard-guide/experiments-and-others","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/intro","path":"/docs/kubeflow-dashboard-guide/intro","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/notebooks","path":"/docs/kubeflow-dashboard-guide/notebooks","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/tensorboards","path":"/docs/kubeflow-dashboard-guide/tensorboards","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/volumes","path":"/docs/kubeflow-dashboard-guide/volumes","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-component","path":"/docs/kubeflow/advanced-component","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-environment","path":"/docs/kubeflow/advanced-environment","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-mlflow","path":"/docs/kubeflow/advanced-mlflow","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-pipeline","path":"/docs/kubeflow/advanced-pipeline","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-run","path":"/docs/kubeflow/advanced-run","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-component","path":"/docs/kubeflow/basic-component","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-pipeline","path":"/docs/kubeflow/basic-pipeline","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-pipeline-upload","path":"/docs/kubeflow/basic-pipeline-upload","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-requirements","path":"/docs/kubeflow/basic-requirements","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-run","path":"/docs/kubeflow/basic-run","sidebar":"tutorialSidebar"},{"id":"kubeflow/how-to-debug","path":"/docs/kubeflow/how-to-debug","sidebar":"tutorialSidebar"},{"id":"kubeflow/kubeflow-concepts","path":"/docs/kubeflow/kubeflow-concepts","sidebar":"tutorialSidebar"},{"id":"kubeflow/kubeflow-intro","path":"/docs/kubeflow/kubeflow-intro","sidebar":"tutorialSidebar"},{"id":"prerequisites/docker/advanced","path":"/docs/prerequisites/docker/advanced","sidebar":"preSidebar"},{"id":"prerequisites/docker/command","path":"/docs/prerequisites/docker/command","sidebar":"preSidebar"},{"id":"prerequisites/docker/docker","path":"/docs/prerequisites/docker/","sidebar":"preSidebar"},{"id":"prerequisites/docker/images","path":"/docs/prerequisites/docker/images","sidebar":"preSidebar"},{"id":"prerequisites/docker/install","path":"/docs/prerequisites/docker/install","sidebar":"preSidebar"},{"id":"prerequisites/docker/introduction","path":"/docs/prerequisites/docker/introduction","sidebar":"preSidebar"},{"id":"setup-components/install-components-kf","path":"/docs/setup-components/install-components-kf","sidebar":"tutorialSidebar"},{"id":"setup-components/install-components-mlflow","path":"/docs/setup-components/install-components-mlflow","sidebar":"tutorialSidebar"},{"id":"setup-components/install-components-pg","path":"/docs/setup-components/install-components-pg","sidebar":"tutorialSidebar"},{"id":"setup-components/install-components-seldon","path":"/docs/setup-components/install-components-seldon","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-kubernetes-module","path":"/docs/setup-kubernetes/install-kubernetes-module","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-kubernetes/kubernetes-with-k3s","path":"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-k3s","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm","path":"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-kubernetes/kubernetes-with-minikube","path":"/docs/setup-kubernetes/install-kubernetes/kubernetes-with-minikube","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-prerequisite","path":"/docs/setup-kubernetes/install-prerequisite","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/intro","path":"/docs/setup-kubernetes/intro","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/kubernetes","path":"/docs/setup-kubernetes/kubernetes","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/setup-nvidia-gpu","path":"/docs/setup-kubernetes/setup-nvidia-gpu","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/introduction/intro","label":"introduction/intro"}},"preSidebar":{"link":{"path":"/docs/prerequisites/docker/install","label":"prerequisites/docker/install"}}}},{"name":"1.0","label":"1.0","isLast":false,"path":"/docs/1.0","mainDocId":"introduction/intro","docs":[{"id":"api-deployment/seldon-children","path":"/docs/1.0/api-deployment/seldon-children","sidebar":"tutorialSidebar"},{"id":"api-deployment/seldon-fields","path":"/docs/1.0/api-deployment/seldon-fields","sidebar":"tutorialSidebar"},{"id":"api-deployment/seldon-iris","path":"/docs/1.0/api-deployment/seldon-iris","sidebar":"tutorialSidebar"},{"id":"api-deployment/seldon-mlflow","path":"/docs/1.0/api-deployment/seldon-mlflow","sidebar":"tutorialSidebar"},{"id":"api-deployment/seldon-pg","path":"/docs/1.0/api-deployment/seldon-pg","sidebar":"tutorialSidebar"},{"id":"api-deployment/what-is-api-deployment","path":"/docs/1.0/api-deployment/what-is-api-deployment","sidebar":"tutorialSidebar"},{"id":"appendix/metallb","path":"/docs/1.0/appendix/metallb","sidebar":"tutorialSidebar"},{"id":"appendix/pyenv","path":"/docs/1.0/appendix/pyenv","sidebar":"tutorialSidebar"},{"id":"further-readings/info","path":"/docs/1.0/further-readings/info","sidebar":"tutorialSidebar"},{"id":"introduction/component","path":"/docs/1.0/introduction/component","sidebar":"tutorialSidebar"},{"id":"introduction/intro","path":"/docs/1.0/introduction/intro","sidebar":"tutorialSidebar"},{"id":"introduction/levels","path":"/docs/1.0/introduction/levels","sidebar":"tutorialSidebar"},{"id":"introduction/why_kubernetes","path":"/docs/1.0/introduction/why_kubernetes","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/experiments","path":"/docs/1.0/kubeflow-dashboard-guide/experiments","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/experiments-and-others","path":"/docs/1.0/kubeflow-dashboard-guide/experiments-and-others","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/intro","path":"/docs/1.0/kubeflow-dashboard-guide/intro","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/notebooks","path":"/docs/1.0/kubeflow-dashboard-guide/notebooks","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/tensorboards","path":"/docs/1.0/kubeflow-dashboard-guide/tensorboards","sidebar":"tutorialSidebar"},{"id":"kubeflow-dashboard-guide/volumes","path":"/docs/1.0/kubeflow-dashboard-guide/volumes","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-component","path":"/docs/1.0/kubeflow/advanced-component","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-environment","path":"/docs/1.0/kubeflow/advanced-environment","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-mlflow","path":"/docs/1.0/kubeflow/advanced-mlflow","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-pipeline","path":"/docs/1.0/kubeflow/advanced-pipeline","sidebar":"tutorialSidebar"},{"id":"kubeflow/advanced-run","path":"/docs/1.0/kubeflow/advanced-run","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-component","path":"/docs/1.0/kubeflow/basic-component","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-pipeline","path":"/docs/1.0/kubeflow/basic-pipeline","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-pipeline-upload","path":"/docs/1.0/kubeflow/basic-pipeline-upload","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-requirements","path":"/docs/1.0/kubeflow/basic-requirements","sidebar":"tutorialSidebar"},{"id":"kubeflow/basic-run","path":"/docs/1.0/kubeflow/basic-run","sidebar":"tutorialSidebar"},{"id":"kubeflow/how-to-debug","path":"/docs/1.0/kubeflow/how-to-debug","sidebar":"tutorialSidebar"},{"id":"kubeflow/kubeflow-concepts","path":"/docs/1.0/kubeflow/kubeflow-concepts","sidebar":"tutorialSidebar"},{"id":"kubeflow/kubeflow-intro","path":"/docs/1.0/kubeflow/kubeflow-intro","sidebar":"tutorialSidebar"},{"id":"prerequisites/docker/advanced","path":"/docs/1.0/prerequisites/docker/advanced","sidebar":"preSidebar"},{"id":"prerequisites/docker/command","path":"/docs/1.0/prerequisites/docker/command","sidebar":"preSidebar"},{"id":"prerequisites/docker/docker","path":"/docs/1.0/prerequisites/docker/","sidebar":"preSidebar"},{"id":"prerequisites/docker/images","path":"/docs/1.0/prerequisites/docker/images","sidebar":"preSidebar"},{"id":"prerequisites/docker/install","path":"/docs/1.0/prerequisites/docker/install","sidebar":"preSidebar"},{"id":"prerequisites/docker/introduction","path":"/docs/1.0/prerequisites/docker/introduction","sidebar":"preSidebar"},{"id":"setup-components/install-components-kf","path":"/docs/1.0/setup-components/install-components-kf","sidebar":"tutorialSidebar"},{"id":"setup-components/install-components-mlflow","path":"/docs/1.0/setup-components/install-components-mlflow","sidebar":"tutorialSidebar"},{"id":"setup-components/install-components-pg","path":"/docs/1.0/setup-components/install-components-pg","sidebar":"tutorialSidebar"},{"id":"setup-components/install-components-seldon","path":"/docs/1.0/setup-components/install-components-seldon","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-kubernetes-module","path":"/docs/1.0/setup-kubernetes/install-kubernetes-module","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-kubernetes/kubernetes-with-k3s","path":"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-k3s","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm","path":"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-kubeadm","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-kubernetes/kubernetes-with-minikube","path":"/docs/1.0/setup-kubernetes/install-kubernetes/kubernetes-with-minikube","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/install-prerequisite","path":"/docs/1.0/setup-kubernetes/install-prerequisite","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/intro","path":"/docs/1.0/setup-kubernetes/intro","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/kubernetes","path":"/docs/1.0/setup-kubernetes/kubernetes","sidebar":"tutorialSidebar"},{"id":"setup-kubernetes/setup-nvidia-gpu","path":"/docs/1.0/setup-kubernetes/setup-nvidia-gpu","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/1.0/introduction/intro","label":"introduction/intro"}},"preSidebar":{"link":{"path":"/docs/1.0/prerequisites/docker/install","label":"prerequisites/docker/install"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"ko","locales":["en","ko"],"path":"i18n","currentLocale":"ko","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"},"ko":{"label":"\ud55c\uad6d\uc5b4","direction":"ltr","htmlLang":"ko","calendar":"gregory","path":"ko"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"}}}'),u={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(412),a=n(5742),i=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),o=n(7294),a=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=o.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":b,autoAddBaseUrl:g=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),S=(0,o.useContext)(c),E=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>E.current));const _=p||f;const x=(0,s.Z)(_),C=_?.replace("pathname://","");let T=void 0!==C?(L=C,g&&(e=>e.startsWith("/"))(L)?k(L):L):void 0;var L;T&&x&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const A=(0,o.useRef)(!1),N=n?a.OL:a.rU,R=u.Z.canUseIntersectionObserver,P=(0,o.useRef)(),O=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,o.useEffect)((()=>(!R&&x&&null!=T&&window.docusaurus.prefetch(T),()=>{R&&P.current&&P.current.disconnect()})),[P,T,R,x]);const D=T?.startsWith("#")??!1,I=!T||!x||D;return I||b||S.collectLink(T),I?o.createElement("a",(0,r.Z)({ref:E,href:T},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(N,(0,r.Z)({},v,{onMouseEnter:O,onTouchStart:O,innerRef:e=>{E.current=e,R&&e&&x&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T},n&&{isActive:h,activeClassName:m}))}const f=o.forwardRef(p)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),o=n(2263),a=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8940);function a(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>p,_r:()=>c,Jo:()=>b,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(6550),o=n(2263),a=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function b(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6657:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),o=n(6010),a=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(5936);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:o}),t))}var b=n(5281),g=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:v.skipToContent})}var w=n(6668),k=n(9689);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const E={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",E.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function L(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:T.announcementBarClose}))}var A=n(2961),N=n(2466);var R=n(902),P=n(3102);const O=r.createContext(null);function D(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,P.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,R.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(O.Provider,{value:n},t)}function I(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function M(){const e=(0,r.useContext)(O);if(!e)throw new R.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:I(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=M();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var B=n(2949),j=n(2389);function z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function q(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function $(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const l=(0,j.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)(U.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!l&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement(q,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})))}const H=r.memo($),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,B.I)();return o?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var V=n(1327);function W(){return r.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,A.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(W,null),r.createElement(Z,{className:"margin-right--md"}),r.createElement(Y,null))}var Q=n(9960),X=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const p=(0,X.Z)(o),f=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),b=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(Q.Z,(0,l.Z)({href:c?m:a},d,b)):r.createElement(Q.Z,(0,l.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},d,b))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,l.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),f()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var fe=n(4711);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var be=n(1875);const ge={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ge.searchBox)},t)}var ye=n(143),we=n(2802);var ke=n(373);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const Ee={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),p=(0,fe.l)(),{search:f,hash:m}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],b=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(pe,(0,l.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),b),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(be.Z,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,ye.Iw)(o),s=(0,we.vY)(t,o);return null===s?null:r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,ye.Iw)(o),s=(0,we.oz)(t,o).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,l.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,we.lO)(o)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,l.Z)({},a,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:p}=(0,s.TH)(),f=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:h}=(0,ke.J)(n),b=[...a,...m.map((e=>{const t=f.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...i],g=(0,we.lO)(n)[0],v=t&&b.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,y=t&&b.length>1?void 0:Se(g).path;return b.length<=1?r.createElement(ae,(0,l.Z)({},c,{mobile:t,label:v,to:y,isActive:o?()=>!1:void 0})):r.createElement(pe,(0,l.Z)({},c,{mobile:t,label:v,to:y,items:b,isActive:o?()=>!1:void 0}))}};function _e(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ee[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function xe(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(_e,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=M();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Le(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(xe,null),secondaryMenu:r.createElement(Te,null)}):null}const Ae={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ne(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,A.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ae.navbarHideable,!s&&Ae.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(Ne,{onClick:i.toggle}),r.createElement(Le,null))}var Pe=n(8780);const Oe={errorBoundaryError:"errorBoundaryError_a6uf"};function De(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ie(e){let{error:t}=e;const n=(0,Pe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oe.errorBoundaryError},n)}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function Be(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,l.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function je(){const{toggle:e,shown:t}=(0,A.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Be,null))}const ze={colorModeToggle:"colorModeToggle_DEke"};function qe(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Me,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(_e,e)))))}function Ue(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function $e(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ue,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(je,null),r.createElement(W,null),r.createElement(qe,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(qe,{items:o}),r.createElement(Z,{className:ze.colorModeToggle}),!a&&r.createElement(ve,null,r.createElement(be.Z,null)))})}function He(){return r.createElement(Re,null,r.createElement($e,null))}function Ge(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...s}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(Q.Z,(0,l.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},s),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ze(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ge,{item:t}))}function Ve(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ze,{key:t,item:e})))))}function We(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ve,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ge,{item:t})}function Qe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Xe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(We,{columns:t}):r.createElement(Qe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(Q.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ot(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function at(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(ot,{style:a,links:n&&n.length>0&&r.createElement(Xe,{links:n}),logo:o&&r.createElement(nt,{logo:o}),copyright:t&&r.createElement(rt,{copyright:t})})}const it=r.memo(at),lt=(0,R.Qc)([B.S,k.pl,N.OC,ke.L5,i.VC,function(e){let{children:t}=e;return r.createElement(P.n2,null,r.createElement(A.M,null,r.createElement(D,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ut(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(De,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ie,{error:t})))))}const ct={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,g.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(L,null),r.createElement(He,null),r.createElement("div",{id:d,className:(0,o.Z)(b.k.wrapper.main,ct.mainWrapper,l)},r.createElement(a.Z,{fallback:e=>r.createElement(ut,e)},t)),!n&&r.createElement(it,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,b=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},f,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:b,imageClassName:d}),null!=n&&o.createElement("b",{className:p},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(5742);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(s.themedImage,s[`themedImage--${e}`],c)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>b});var r=n(7462),o=n(7294),a=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,o.useRef)(null);return p({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[l,s]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&s(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function b(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),o=n(2389),a=n(12),i=n(902),l=n(6668);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>h});var r=n(7294),o=n(412),a=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>o.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{c.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,a]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(s.Provider,{value:n},t)}function b(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b});var r=n(7294),o=n(143),a=n(9935),i=n(6668),l=n(2802),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function b(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function g(){const e=(0,r.useContext)(f);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=g(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),o=n(902);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),o=n(3102),a=n(7524),i=n(6550),l=(n(1688),n(902));function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6668);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function p(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),o=n(902);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>h,cE:()=>d,hI:()=>k,lO:()=>v,vY:()=>w,oz:()=>y,s1:()=>g});var r=n(7294),o=n(6550),a=n(8790),i=n(143),l=n(373),s=n(1116);function u(e){return Array.from(new Set(e))}var c=n(8596);const d=!!i._r;function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}const f=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function b(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function g(){const e=(0,s.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?b({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function y(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function k(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>c,VC:()=>f});var r=n(7294),o=n(6010),a=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),l)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function f(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,o.Z)(a,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),o=n(723),a=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d});var r=n(7294),o=n(412),a=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>a});var r=n(2263),o=n(6550);function a(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:a}}=(0,r.Z)(),{pathname:i}=(0,o.TH)(),l=a===n?e:e.replace(`/${a}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:o}=e;return`${o?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(902);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>L,Ep:()=>p});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),b=0;b{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(l+=e.slice(i,f),i=f+d.length,p)l+=p[1];else{var m=e[i],h=n[2],b=n[3],g=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=h&&null!=m&&m!==h,S="+"===y||"*"===y,E="?"===y||"*"===y,_=n[2]||c,x=g||v;r.push({name:b||a++,prefix:h||"",delimiter:_,optional:E,repeat:S,partial:k,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);E+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,C=1;if(v){if(!(x=a(k,E,e,g))||x.index>=e.length)break;var T=x.index,L=x.index+x[0].length,A=E;for(A+=S.value.length;T>=A;)A+=(S=S.next).value.length;if(E=A-=S.value.length,S.value instanceof o)continue;for(var N=S;N!==t.tail&&(Ad.reach&&(d.reach=D);var I=S.prev;if(P&&(I=s(t,I,P),E+=P.length),u(t,I,C),S=s(t,I,new o(p,b?r.tokenize(R,b):R,y,R)),O&&s(t,S,O),C>1){var M={cause:p+","+m,reach:D};i(e,t,n,S.prev,E,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o"+a.content+""},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=p(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&f(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),p=Object.keys(c);return i=0,function e(t){for(var n=0;n=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=p[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),f=a.substring(l+o.length),m=[];if(s&&m.push(s),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var b=r.content;Array.isArray(b)?e(b):e([b])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function a(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),b=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),g=p.substring(m+f.length),v=[];h&&v.push.apply(v,i([h])),v.push(b),g&&v.push.apply(v,i([g])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;o(m);){for(var h in p={},m){var b=s[h];t(b&&b.modify,(function(e){e in d&&(p[e]=!0)}))}for(var g in d)if(!(g in c))for(var v in f(g))if(v in c){p[g]=!0;break}for(var y in m=p)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return l[e]=o}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n