hye-log

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 17_DAY 79 ๋ณธ๋ฌธ

Boostcourse/AI Tech 4๊ธฐ

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 17_DAY 79

iihye_ 2023. 1. 12. 18:33

๐ŸŒŒ ๊ฐœ๋ณ„ํ•™์Šต


[3-2] FastAPI 2

2. Pydantic

1) Pydantic

- Data Validation / Settings Management ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

- Type Hint๋ฅผ ๋Ÿฐํƒ€์ž„์—์„œ ๊ฐ•์ œํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ํ•ธ๋“ค๋ง

- ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ํƒ€์ž…(String, int ๋“ฑ) + List, Dict, Tuple์— ๋Œ€ํ•œ Validation ์ง€์›

- Config๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ๋„์™€์คŒ

- ๋จธ์‹ ๋Ÿฌ๋‹ Feature Data Validation์œผ๋กœ๋„ ํ™œ์šฉ ๊ฐ€๋Šฅ

 

2) Pythonic Validation

(1) Machine Learning Model Input Validation

(2) Online Serving์—์„œ Input ๋ฐ์ดํ„ฐ๋ฅผ Validationํ•จ

(3) Validation Check Logic

- ์กฐ๊ฑด 1: ์˜ฌ๋ฐ”๋ฅธ url์„ ์ž…๋ ฅ ๋ฐ›์Œ(url)

- ์กฐ๊ฑด 2: 1~10 ์‚ฌ์ด์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ ๋ฐ›์Œ(rate)

- ์กฐ๊ฑด 3: ์˜ฌ๋ฐ”๋ฅธ ํด๋” ์ด๋ฆ„์„ ์ž…๋ ฅ ๋ฐ›์Œ(target_dir)

(4) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

- ์ผ๋ฐ˜ Python class๋ฅผ ํ™œ์šฉํ•œ Input Definition ๋ฐ Validation

- Dataclass๋ฅผ ํ™œ์šฉํ•œ Input Definition ๋ฐ Validation

- Pydantic์„ ํ™œ์šฉํ•œ Input Definition ๋ฐ Validation

(5) Python class๋ฅผ ํ™œ์šฉํ•  ๊ฒฝ์šฐ

- ์˜๋ฏธ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๋ณต์žกํ•ด์ง

- ๋ฉ”์ธ ๋กœ์ง(Input์„ ๋ฐ›์•„์„œ Inference๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”)์— ์ง‘์ค‘ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง

(6) Dataclass ํ™œ์šฉํ•  ๊ฒฝ์šฐ

- dataclass decorator ์‚ฌ์šฉ์œผ๋กœ init method๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

- post_init๊ณผ ๊ฐ™์€ ํŽธ์˜ ๋งค์ง ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

- validate method๋Š” ๋งŒ๋“ค์–ด์•ผ ํ•จ 

(7) Pydantic Validation

- ์˜ฌ๋ฐ”๋ฅธ Http URL์ธ์ง€ ๊ฒ€์ฆ

- Field ์˜ต์…˜์œผ๋กœ >=1, <=10 ์ธ์ง€ ๊ฒ€์ฆ

- ์กด์žฌํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ธ์ง€ ๊ฒ€์ฆ

- ์–ด๋””์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ location, type, message ๋“ฑ์„ ์•Œ๋ ค์คŒ

 

3) Pydantic Config

(1) Config๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ๋ฐฉ๋ฒ•์„ ์ œ๊ณต

(2) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์„ค์ •์„ ์ƒ์ˆ˜๋กœ ์ฝ”๋“œ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ -> Twelve-Factor ์œ„๋ฐ˜

- Twelve-Factor : ์„ค์ •์„ ์ฝ”๋“œ์—์„œ ์—„๊ฒฉํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ

- ์„ค์ •์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜(envvars, env)์— ์ €์žฅํ•จ

- ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ์‰ฝ๊ฒŒ ๋ฐฐํฌ ๋•Œ๋งˆ๋‹ค ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ

(3) .ini, .yaml ํŒŒ์ผ ๋“ฑ์œผ๋กœ config ์„ค์ •ํ•˜๊ธฐ

- yaml๋กœ ์‰ฝ๊ฒŒ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ(ํ•˜๋“œ์ฝ”๋”ฉ)

- ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ์œ ์—ฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์›€

(4) flask-style config.py

- config ํด๋ž˜์Šค์—์„œ yaml, ini ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์™€ python class ํ•„๋“œ๋กœ ์ฃผ์ž…

- config ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์‚ฌ์šฉ

(5) pydantic base setting

- BaseSetting์„ ์ƒ์†ํ•œ ํด๋ž˜์Šค์—์„œ Type Hint๋กœ ์ฃผ์ž…๋œ ์„ค์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Œ

- Field ํด๋ž˜์Šค์˜ env ์ธ์ž๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ๋ถ€ํ„ฐ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ์ˆ˜ ์žˆ์Œ

- .env ํŒŒ์ผ๋“ค์„ ํ™˜๊ฒฝ๋ณ„๋กœ ๋งŒ๋“ค์–ด ๋‘๊ฑฐ๋‚˜, ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ์ˆ˜ ์žˆ์Œ



๐ŸŒŒ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

์˜ค์ „ ๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ์—์„œ ํŠน๋ณ„ํ•œ ์ด์Šˆ๋Š” ์—†์—ˆ๊ณ , ์–ด์ œ annnotation๊นŒ์ง€ ํ•œ ๋ฐ์ดํ„ฐ์…‹ ํ›ˆ๋ จ ์‹œ์ผœ๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ.. ํ—คใ…”.. ๋ญ”๊ฐ€ ํŒŒ์ผ ๊ฐœ์ˆ˜๊ฐ€ ์•ˆ ๋งž์•„์„œ ์ฐพ์•„๋ณด๋‹ˆ annotation ๋งŒ๋“ค๋ฉด์„œ ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋˜ ๊ฑฐ ๊ฐ™๋‹ค. ๋‹ค์‹œ train image, annotation ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์„œ ๋ฐ์ดํ„ฐ์…‹ ๊ตฌ์ถ•... ํŒŒ์ผ์ด 50๋งŒ ์žฅ ์ •๋„ ๋˜๋‹ค๋ณด๋‹ˆ ํด๋”๋งŒ ํด๋ฆญํ•˜๋ฉด vscode๊ฐ€ ๋ ‰์ด ๊ฑธ๋ฆฌ๋Š”... ๋ˆ„๊ฐ€ vscode์— ์ง€๋ขฐ๋ฅผ ์‹ฌ์–ด๋‘”๊ฑฐ ๊ฐ™๋‹ค..-_- ๋งˆ์Šคํ„ฐํด๋ž˜์Šค ๋•Œ์—๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด์ฃผ์…จ๋Š”๋ฐ, ํŠนํžˆ๋‚˜ ๋ฉด์ ‘์„ ๋ณผ ๋•Œ ์ง€์›ํ•˜๊ณ  ์‹ถ์€ ํšŒ์‚ฌ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ์„ ๋ถ„์„ํ•ด๋ณด๊ณ  ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์‚ฐ๋˜์„œ ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ด๋ณผ ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ณด๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋ง์”€ํ•ด์ฃผ์…จ๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ์„ ๋•Œ์—๋„ ํ•จ๊ป˜ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ๋‚˜๋ˆ„๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๊ณผ ์ผ์„ ํ•˜๊ณ  ์‹ถ์€ ๊ฒŒ ํšŒ์‚ฌ์˜ ์ž…์žฅ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค..(!!) ์ฑ„์šฉ๊ณต๊ณ  ์ฐพ์•„๋ณด๋ฉด์„œ ์ด ํšŒ์‚ฌ์—๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ณ  ๋‚ด๊ฐ€ ์–ด๋–ค ์ผ์„ ํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ด์•ผ๊ฒ ๋‹ค๐Ÿฐ

728x90
Comments