Skip to content

KDT-AiVENGERS/PolarStar_AIInfra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

PolarStar AI Infra

๋ถ๊ทน์„ฑ ์„œ๋น„์Šค ์ •๋ณด ๋ฐ”๋กœ๊ฐ€๊ธฐ

โ—๏ธ About AiVENGERS Infra Repository

Infra Repository๋Š” AiVENGERS์˜ ๋ถ๊ทน์„ฑ ํ”„๋กœ์ ํŠธ์—์„œ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ,

"์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธ" ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.

aiinfra_diagram

PolarStar_AIInfra ์ „์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ


๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ ์„œ๋ฒ„์‹ค โ†’ IDC โ†’ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ

๊ฐœ๋ฐœ์ž๋“ค์€ ๋ถ€์ˆ˜์ ์ธ ๊ฒƒ์„ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ณ 

์˜ค๋กœ์ง€, ๊ฐœ๋ฐœ๊ณผ ์„œ๋น„์Šค์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ํฐ ์ƒ์‚ฐ์„ฑ๊ณผ ํšจ์œจ์„ฑ์˜ ์ฆ๋Œ€๋กœ ์ด์–ด์กŒ์Šต๋‹ˆ๋‹ค.


์ธ๊ณต์ง€๋Šฅ ๊ฐœ๋ฐœ์—์„œ๋„, ์ธ๊ณต์ง€๋Šฅ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋น„์Šค์— ์ ํ•ฉํ•œ ๋ชจ๋ธ์„ ์„ ์ •ํ•˜๊ณ 

์ด๋ฅผ ๋น„๊ต ํ‰๊ฐ€ ๋ฐ ๋ถ„์„ํ•˜๊ณ  ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป๋Š”๋ฐ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ์ธํ”„๋ผ๊ฐ€ ๊ฐ–์ถ”์–ด์ ธ ์žˆ์œผ๋ฉด

์ฐธ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.


์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€์ˆ˜์ ์ธ ๋ฌธ์ œ์— ์‹ ๊ฒฝ์“ฐ๋Š” ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ 

์ƒ๊ฐ์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์ฆ‰๊ฐ์ ์œผ๋กœ ํ™•์ธ ๋ฐ ๋ถ„์„ํ•˜์—

๋น ๋ฅด๊ณ  ํšจ๊ณผ์ ์ธ ์ธ๊ณต์ง€๋Šฅ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ๋Š” ์œ„์™€ ๊ฐ™์€ ์‹คํ—˜ Infra ์ฝ”๋“œ์™€ ์ด๋ฅผ ๋ถ๊ทน์„ฑ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Infra Repository๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๋ชฉํ‘œ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ๊ฐœ๋ฐœ ๋ชฉํ‘œ ๋ฐ ๋ฐฉํ–ฅ์„ฑ

1. ๊ทœ๊ฒฉํ™”๋œ ์ฝ”๋“œ๐Ÿ“Œ

  • ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ์‹์„ ์ผ๊ด€ํ™”ํ•˜์—ฌ, ์ฒ˜์Œ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทœ๊ฒฉํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ๊ทœ๊ฒฉํ™”๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ์ด์šฉํ•ด ์‹คํ—˜์„ ์‹œ์ž‘ํ•  ๋•Œ ์ž๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

2. ์‹คํ—˜ ์‹œ ์ฝ”๋“œ ์ˆ˜์ • ์ตœ์†Œํ™”๐Ÿ“Œ

  • ๋ชจ๋ธ ์‹คํ—˜ ์‹œ ์ฝ”๋“œ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•˜๋„๋ก ํ•˜์—ฌ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ ์‹คํ–‰ ์ฝ”๋“œ์™€ ์‹คํ—˜ Configuration์„ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์‹คํ—˜์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

3. ์‹คํ—˜ ๊ฒฐ๊ณผ ์ž๋™ Logging๐Ÿ“Œ

  • ๋ชจ๋ธ ์‹คํ—˜ ์‹œ ํ•ด๋‹น ์‹คํ—˜์ด ์–ด๋–ค Configuration์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€๋ฅผ ์ž๋™์œผ๋กœ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ—˜์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ, ์‹คํ—˜์ด ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์‹คํ—˜ ๊ฒฐ๊ณผ ๋ฐ ํ˜„ํ™ฉ์„ ์ฆ‰๊ฐ ์‹œ๊ฐํ™”ํ•˜์—ฌ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

4. ์ž‘์—… ๋‹จ์œ„ ๋ณ„๋กœ Module ํ™”๐Ÿ“Œ

  • ๊ฐ ์ž‘์—… ๋‹จ์œ„๋ณ„๋กœ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์ฝ”๋“œ ๊ฐ„ ์ƒํ˜ธ ์ข…์†์„ฑ์„ ์ตœ์†Œํ™” ์‹œํ‚ค๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ Test ๋ฐ Refactoring, ์ฝ”๋“œ์˜ ์ผ๋ถ€ ๋ณ€ํ˜•์ด ์šฉ์ดํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๊ฑด์ด ํ—ˆ๋ฝํ•œ๋‹ค๋ฉด TDD๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ฐ ๋ชจ๋“ˆ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ TestCase๋ฅผ ํ†ต๊ณผํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์ฝ”๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. (์ถ”ํ›„ ๊ณ„ํš ์ค‘)
  • ๋ชจ๋“ˆ์„ ๋งˆ์น˜ ๋ ˆ๊ณ  ์กฐ๋ฆฝํ•˜๋“ฏ์ด ์กฐ๋ฆฝํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑํ•˜์—ฌ ์‹คํ—˜ ์‹œ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

5. ํ˜‘์—…์— ์šฉ์ดํ•˜๋„๋ก ๋ชจ๋“ˆ ๊ตฌ์„ฑ๐Ÿ“Œ

  • ํ˜‘์—…์— ์šฉ์ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ๋“ˆ ๋ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜‘์—…ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ๋น„๊ต๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

6. ๊ทธ ์™ธ ์ถ”๊ฐ€์ ์ธ ํŽธ์˜ ๊ธฐ๋Šฅ ๋ฐ˜์˜ ๋ฐ ํ™•์žฅ์„ฑ ํ™•๋ณด๐Ÿ“Œ

  • Pytorch์˜ device Setting ํ•˜๋Š” ๋ถ€๋ถ„ ๋“ฑ ๋ถ€์ˆ˜์ ์ธ ๊ฒƒ์€ ์ž๋™ํ™”๋˜์–ด ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • Sweeping ์ž๋™ํ™” ๋ฐ ์‹œ๊ฐํ™” ๋“ฑ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด

์ €ํฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โš’๏ธ ํ™œ์šฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์„ ์ • ์ด์œ 

1. Pytorch Lightning๐Ÿ“Œ

image

Pytorch Lightning์€ AI Model ์ฝ”๋“œ๋ฅผ ๊ทœ๊ฒฉํ™”ํ•˜๊ณ , ์ด๋ฅผ ํ™œ์šฉํ•œ ๋‹ค์–‘ํ•œ ํŽธ์˜ ๊ธฐ๋Šฅ๊ณผ Model Lifecycle ๊ด€๋ฆฌ๋ฅผ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์„ ์ • ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ๋ฅผ ๊ทœ๊ฒฉํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” 1๋ฒˆ ๋ชฉํ‘œ, 7๋ฒˆ ๋ชฉํ‘œ์— ์ž˜ ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ Wandb์™€ ์—ฐ๋™ ์‹œ wandblogger๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ์ ์—์„œ 3๋ฒˆ ๋ชฉํ‘œ, 5๋ฒˆ ๋ชฉํ‘œ์— ์ž˜ ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Data Module, Model Module, Task Module, Training Module, Inference Module๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค๋Š” ์ ์—์„œ 4๋ฒˆ ๋ชฉํ‘œ์— ์ž˜ ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Device๋ฅผ ์ž๋™์œผ๋กœ Settingํ•˜๋Š” ๊ธฐ๋Šฅ ๋“ฑ ๋‹ค์–‘ํ•œ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์—์„œ 6๋ฒˆ ๋ชฉํ‘œ์— ์ž˜ ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

pytorchLightningCode

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ •ํ•ด์ง„ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ทœ๊ฒฉํ™”๋œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Hydra๐Ÿ“Œ

Hydra

Hydra๋Š” ์‹คํ—˜์— ๊ด€๋ จ๋œ Configutration ํŒŒ์ผ์„ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  pyํŒŒ์ผ์—์„œ ์ž‘์—… ์‹œ์—๋Š” ๋‹ค์–‘ํ•œ plugin๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์„ ์ • ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Configuration ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์‹คํ—˜ ์‹œ ์ฝ”๋“œ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ 2๋ฒˆ ๋ชฉํ‘œ์— ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Configuration ํŒŒ์ผ๋กœ ์‹คํ—˜ ๋‚ด์—ญ์ด ์ž๋™ ์ €์žฅ๋˜๋„๋ก ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์—์„œ 3๋ฒˆ ๋ชฉํ‘œ์— ๋ถ€ํ•ฉํ•˜๊ณ  ํŒŒ์ผ ํ˜•ํƒœ์ด๋ฏ€๋กœ ๊ณต์œ ๊ฐ€ ์šฉ์ดํ•˜๋‹ค๋Š” ์ ์—์„œ 5๋ฒˆ ๋ชฉํ‘œ์— ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Configuration file

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Config.yaml ํŒŒ์ผ์—์„œ ์‹คํ—˜์— ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ์„ค์ •์„ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰ ์ฝ”๋“œ๋ฅผ ์ „ํ˜€ ๋งŒ์งˆ ํ•„์š”์—†์ด ์ด ํŒŒ์ผ๋งŒ ๊ฑด๋“œ๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

3. Wandb๐Ÿ“Œ

wandb

Wandb๋Š” ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•˜์—ฌ ํด๋ผ์šฐ๋“œ์— ์ €์žฅํ•˜๊ณ  ๋Œ€์‹œ๋ณด๋“œ๋กœ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ˜‘์—… ์‹œ ์„œ๋กœ ๋‹ค๋ฅธ ์‹คํ—˜ ๊ฐ„์˜ ๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ๋น„๊ต ๋ฐ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์ž…๋‹ˆ๋‹ค. ๋”๋ถˆ์–ด ์ž๋™ Sweeping ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•˜๊ณ  ๊ฒฐ๊ณผ๋„ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‹คํ—˜ ๊ฒฐ๊ณผ๊ฐ€ ํด๋ผ์šฐ๋“œ์— ์ž๋™์œผ๋กœ ์ €์žฅ๋˜๊ณ  ์‹œ๊ฐํ™”๋„ ์šฉ์ดํ•˜๋‹ค๋Š” ์ ์—์„œ 3๋ฒˆ ๋ชฉํ‘œ์— ์ž˜ ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์˜ ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋น„๊ต ๋ถ„์„ํ•˜๊ธฐ ๋งค์šฐ ์‰ฌ์šด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— 5๋ฒˆ ๋ชฉํ‘œ์— ์ž˜ ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • Sweeping ์ž๋™ํ™”๋ฅผ ์ง€์›ํ•˜๋ฉฐ ์ด ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”๊นŒ์ง€ ํ•ด์ค€๋‹ค๋Š” ์ ์—์„œ 6๋ฒˆ ๋ชฉํ‘œ์— ์ž˜ ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

wandb dashboard

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด WandB Dashboard๋ฅผ ์ด์šฉํ•ด ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๊ณ 
์ด ๊ฒฐ๊ณผ๋ฅผ ํŒ€์›๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. Transformers - HuggingFace๐Ÿ“Œ

transformers

Transformers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” HuggingFace Repository์— ์˜ฌ๋ผ์™€ ์žˆ๋Š” ๋ชจ๋ธ์„ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  finetuning ๋“ฑ์˜ ์ž‘์—…๋„ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

  • ์ฃผ์š”ํ•œ ๋ชจ๋ธ์„ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  HuggingFace์— ์˜ฌ๋ผ์™€์žˆ๋Š” ์ฃผ์š” pretrained ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Repository๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ์˜ ๋ชจ๋ธ ๊ฒฐ๊ณผ ๊ฐ’์„ ์‰ฝ๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ 5๋ฒˆ ๋ชฉํ‘œ์— ์ž˜ ๋ถ€ํ•ฉํ•˜์—ฌ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

huggingface repository

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ชจ๋ธ Config์™€ Weight๊ฐ’์„ HuggingFace Repository์— ์ €์žฅํ•˜๊ณ 
์ด๊ฒƒ์„ ์ฝ”๋“œ ํ•œ ์ค„๋กœ ์‰ฝ๊ฒŒ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Infra Model์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌ์กฐ์™€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ Wiki ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

๐Ÿปโ€โ„๏ธ Infra๋ฅผ ๋ถ๊ทน์„ฑ Project์— ์ ์šฉ

Infra ์ €์žฅ์†Œ๋Š” ๋ถ๊ทน์„ฑ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ํšจ์œจ์ ์ธ ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ ์ฝ”๋“œ๋ฅผ ๊ทœ๊ฒฉํ™”ํ•˜์˜€์œผ๋ฉฐ, ํŒ€์›๋“ค์ด ๊ฐ๊ฐ ์ƒˆ๋กœ์šด ๋ชจ๋ธ์ด๋‚˜ ํ•™์Šต ๋ฐฉ์‹์„ ๋„์ž…ํ•˜์˜€์„ ๊ฒฝ์šฐ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ๋ฐ ๋ชจ์•„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹œ๊ฐํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ €ํฌ AiVENGERS Team์€ ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•œ Infra๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ถ๊ทน์„ฑ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋  ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ์„ ์‹คํ—˜ํ•˜๊ณ  ํŠœ๋‹ํ•˜๊ณ  ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์–ด ์ตœ์ ํ™”๋œ ์ตœ์ข… ๋ชจ๋ธ์„ ์–ป์–ด๋‚ด๋Š” ๊ณผ์ •์—์„œ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

Infra๋ฅผ ๋ถ๊ทน์„ฑ Project์— ์ ์šฉํ•œ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. Infra Repository ๊ธฐ๋ฐ˜์˜ ์ฝ”๋“œ ์ž‘์„ฑ (Infra_Init)๐Ÿ“Œ

๋ณธ๊ฒฉ์ ์œผ๋กœ ์ €ํฌ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  Infra Code๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

  • ๋จผ์ € ๊ฐ„๋‹จํ•œ MNIST ๋ฌธ์ œ๋ฅผ CNN์œผ๋กœ ํ‘ธ๋Š” ๋ชจ๋ธ์„ ์ด์šฉํ•ด์„œ ์ƒ๊ธฐ๋œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” Infra Code๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. MNIST ๋ฌธ์ œ๋Š” ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์˜ˆ์‹œ์ด๊ณ  ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ๊ณ  ์ž…๋ฌธ ์ฝ”๋“œ์ด๋‹ˆ, ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ดˆ์•ˆ Infra Code๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    infra_init/mnist_baseline.ipynb infra_init/config.yaml infra_init/global.yaml

  • ๊ทธ ๋‹ค์Œ, Hugging Face Module์„ ์ ์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์œ„์—์„œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ CNN ๋ชจ๋ธ ๋ถ€๋ถ„์„ Hugging Face ViT ๋ชจ๋ธ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. infra_init/mnist_vit_baseline.ipynb

  • ๊ทธ ๋‹ค์Œ, ์ด Infra Code๋ฅผ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ ๋ฌธ์ œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก, ๊ธฐ์กด์— ํ•ด๊ฒฐํ–ˆ๋˜ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ Task ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์ผ๋ถ€ ๋ฆฌํŒฉํ† ๋งํ•ฉ๋‹ˆ๋‹ค. infra_init/nlp_baseline.ipynb

2. ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋  ๋ชจ๋ธ ๊ด€๋ จ ๋ถ„์„ ๋ฐ ์ฝ”๋“œ ์ž‘์„ฑ (Model_Analysis)๐Ÿ“Œ

๋ถ๊ทน์„ฑ ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค ์ค‘ ๊ณต๊ณ  ์ถ”์ฒœ ์„œ๋น„์Šค์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ €ํฌ๊ฐ€ ๊ฒฐ์ •ํ•œ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž์—๊ฒŒ QnA๋ฅผ ํ†ตํ•ด ์–ป์–ด๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ๊ฐ€์ƒ์˜ Job Description์ธ Mock JD๋ฅผ ๋งŒ๋“  ๋’ค, ์ด Mock JD๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ๋ฅผ ๋ฝ‘์•„๋‚ด์–ด, ์ด Mock JD์™€ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ ๊ฐ’์„ ๊ฐ€์ง„ JD๋ฅผ ์ฐพ์•„ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ž์—ฐ์–ด ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ ๋ คํ•ด๋ณด์•˜๊ณ  ์ตœ์ข…์ ์œผ๋กœ๋Š” BERT ๊ณ„์—ด์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฏธ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋ฌธ์žฅ์˜ ๋งฅ๋ฝ๊ณผ ์ฃผ์š” ๋‹จ์–ด์˜ ์˜๋ฏธ๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋ธ์ด Pretrained Model๋กœ์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • Transformer์˜ Encoder ๋ถ€๋ถ„์„ ํ™œ์šฉํ•˜๋ฏ€๋กœ Model ์˜ ํ˜•ํƒœ๊ฐ€ Embedding Vector๋ฅผ ์ถ”์ถœํ•ด ๋‚ด๋Š” ๊ฒƒ์— ํŠนํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ €ํฌ๊ฐ€ Target์ธต์œผ๋กœ ์ •ํ•œ ๊ฐœ๋ฐœ ๋ถ„์•ผ์˜ Job Description์— ๋Œ€ํ•˜์—ฌ LLM์„ Domain Adaptation์„ ์‹œ์ผœ์•ผ ํ•˜๋Š”๋ฐ, BERT์˜ ๊ฒฝ์šฐ ์ ์€ ๋ฐ์ดํ„ฐ๋งŒ์„ ์ด์šฉํ•ด์„œ ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • ํ•™์Šต ๋ฐฉ์‹์ด MLM ๋ฐฉ์‹์ด๋ฏ€๋กœ labeling ์ž‘์—…์ด ํ•„์š”์น˜ ์•Š์•„, ์ƒˆ๋กœ์šด JD ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ์— ์ ์šฉํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด BERT ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์žฅ์„ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๊ณต๊ณ ์˜ ๋ฌธ์žฅ๊ณผ ์‚ฌ์šฉ์ž ์งˆ์˜์‘๋‹ต์˜ ๋ฌธ์žฅ์œผ๋กœ๋ถ€ํ„ฐ ๋ณ€ํ™˜๋œ ๋ฒกํ„ฐ๋ผ๋ฆฌ์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ถ”์ฒœ ๊ณต๊ณ ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์˜€์œผ๋ฉฐ ์ด๋Š” Transformer Encoder ์˜ ๊ตฌ์กฐ๋กœ ํ›ˆ๋ จ๋œ BERT ๋ชจ๋ธ์˜ ์ž„๋ฒ ๋”ฉ ๋ ˆ์ด์–ด์™€ ํžˆ๋“  ๋ ˆ์ด์–ด๊ฐ€ ์ถœ๋ ฅ์œผ๋กœ ๋‚ด๋†“์„ ๋ฒกํ„ฐ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งฅ๋ฝ๊ณผ ์ฃผ์š” ๋‹จ์–ด์˜ ์˜๋ฏธ๋ฅผ ์ž˜ ๋‚ดํฌํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ •์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•˜๋ฉฐ, ๊ธฐ ํ›ˆ๋ จ๋œ ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜๋Š” ๋งŒํผ Domain Adaptation์— ๋Œ€ํ•œ Cost๊ฐ€ ๋‚ฎ๊ณ  ๋ผ๋ฒจ๋ง ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์ด ์ด๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค๋Š” ์ ์„ ์ด์œ ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

BERT ๋ชจ๋ธ์€ Hugging face ๋ฅผ ํ†ตํ•ด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ™œ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Hugging face ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ import ํ•œ ํ›„, ์•„๋ž˜์™€ ๊ฐ™์ด tokenizer ์™€ model ์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ํ•˜์—ฌ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

tokenizer = AutoTokenizer.from_pretrained('bert-base-multilingual-cased')
model = BertForMaskedLM.from_pretrained('bert-base-multilingual-cased')

๋ชจ๋ธ์˜ fine-tuning ์€ ํ•„์š”์—†์ง€๋งŒ, ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ ์ฃผ๋กœ ๋‹ค๋ฃฐ ๋ฌธ์žฅ์€ ๊ณต๊ณ ์™€ ์‚ฌ์šฉ์ž ์งˆ์˜, ๊ตฌ์ง ๊ด€๋ จ ํ‚ค์›Œ๋“œ์— ํ•œ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” domain-adaptation ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์˜๊ฒฌ์ด ์ œ๊ธฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Domain-adaptation ์„ ์œ„ํ•ด์„œ๋Š” BERT ๋ชจ๋ธ์˜ ํ›ˆ๋ จ ๋ฐฉ๋ฒ•์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋Š” Masked language modeling(MLM) ๋ฐฉ์‹๊ณผ Next sentence prediction(NSP) ๋ฐฉ์‹์˜ ํ›ˆ๋ จ์ด ํ•„์š”ํ•˜๋ฉฐ, ํ›ˆ๋ จ์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ˆ˜์ง‘ํ•œ ๊ณต๊ณ  ๋ฌธ์žฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ณ„๋„์˜ ๋ผ๋ฒจ๋ง ์ž‘์—…์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • Hugging Face ์—์„œ MLM ์šฉ ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์™€, ๋ณด์œ ํ•œ ๋ฐ์ดํ„ฐ๋กœ MLM ํ•™์Šต์‹œํ‚ค๋Š” ์ฝ”๋“œ์™€ ํ•™์Šตํ•œ ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋ฌธ์žฅ์œผ๋กœ๋ถ€ํ„ฐ encoded vector ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. model_analysis/Bert_embedding.ipynb
  • BERT ๊ณ„์—ด์˜ ๋‹ค์–‘ํ•œ ๋ชจ๋ธ์„ Hugging Face์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. model_analysis/Bert_various.ipynb
  • BERT ๋ชจ๋ธ์—์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Cosine Similarity๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. model_analysis/Bert_cosine_cal.ipynb

3. ๋ชจ๋ธ ์„ฑ๋Šฅ ๋น„๊ต ํ…Œ์ŠคํŠธ ์ „๋žต ์„ค์ •๐Ÿ“Œ

  • ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด 2๊ฐ€์ง€ ์ง€ํ‘œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์ง€ํ‘œ๋Š” model ํ•™์Šต๊ณผ์ •์—์„œ์˜ loss ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์ž‘์„์ˆ˜๋ก ์ข‹์€ ๋ชจ๋ธ๋กœ ํŒ๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์ง€ํ‘œ๋Š” wandb ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‹œ๊ฐํ™”๋œ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ๋น„๊ต๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ์ง€ํ‘œ๋Š” TestSheet Score์ž…๋‹ˆ๋‹ค. ์œ ์‚ฌ๋„๊ฐ€ ๋†’๊ฒŒ ์ธก์ •๋˜์–ด์•ผ ํ•˜๋Š” ์˜ˆ์‹œ Set์™€ ์œ ์‚ฌ๋„๊ฐ€ ๋‚ฎ๊ฒŒ ์ธก์ •๋˜์–ด์•ผ ํ•˜๋Š” ์˜ˆ์‹œ Set๋ฅผ ๋ชจ๋ธ์— ์ž…๋ ฅํ•˜์—ฌ ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ•œ ์œ ์‚ฌ๋„๋Œ€๋กœ ์ž˜ ๋‚˜์˜ค๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ์ง€ํ‘œ๋Š” TestSheet Score๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ต๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์ตœ์ข… ์‹คํ—˜์šฉ Baseline Model์„ ์ž‘์„ฑ (Baseline)๐Ÿ“Œ

  • ์œ„์—์„œ ๋ถ„์„๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ตœ์ข… Baseline Model์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Pretrained๋œ ๋ชจ๋ธ์„ ์‹ค์ œ ์„œ๋น„์Šค์— ์ ์šฉ๋˜๋Š” ๋ชจ๋ธ ๊ตฌ์กฐ๋กœ ์ด์‹ํ•  ๋•Œ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๊ณ ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. new_prediction_layer_deletion ๋ฐฉ์‹ new_prediction_from_pretrained ๋ฐฉ์‹

    ์ž์„ธํ•œ ์„ค๋ช… ๋ณด๊ธฐ (์ ‘๊ธฐ ์ด์šฉ, ์•„๋ž˜์— ์ƒ์„ธ ์„ค๋ช…)

  • ๊ตฌ์„ฑ๋œ Baseline Model ์ฝ”๋“œ ํŒŒ์ผ๋“ค์˜ ๊ตฌ์„ฑ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. train_from_pretrained.ipynb ๋˜๋Š” train_layer_deletion.ipynb (์ตœ์ข… ๋ชจ๋ธ ํ•™์Šต ์ฝ”๋“œ) config.yaml (์‹คํ—˜ ์„ค์ •) global.yaml (Versioning์„ ์œ„ํ•œ ํŒŒ์ผ) test_from_pretrained.ipynb ๋˜๋Š” test_layer_deletion.ipynb (2๋ฒˆ์งธ ์ง€ํ‘œ๋ฅผ ์–ป์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ) test_case.csv (2๋ฒˆ์งธ ์ง€ํ‘œ๋ฅผ ํŒ๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” test case๊ฐ€ ๋“ค์–ด์žˆ๋Š” csv์ž…๋‹ˆ๋‹ค.)

5. ์‹คํ—˜ ๊ณ„ํš Sheet ์ž‘์„ฑ ๋ฐ ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Experiment ๋ฐฐ๋ถ„ (Experiment)๐Ÿ“Œ

  • ํŒ€์› ๊ฐ๊ฐ์ด ์–ด๋–ค ์‹คํ—˜์„ ์ง„ํ–‰ํ• ์ง€ ์‹คํ—˜ ๊ณ„ํš Sheet๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ž‘์„ฑ๋œ ๊ณ„ํš Sheet๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹คํ—˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ—˜์€ experiment ํด๋” ๋‚ด์— ์ƒ์„ฑ๋œ ๊ฐ ํŒ€์› ํด๋”์—์„œ ์‹คํ—˜์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • baseline ํด๋”์— ์žˆ๋Š” ๋ชจ๋ธ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜จ ๋’ค, ์‹คํ—˜ ๊ณ„ํš Sheet์— ๋‚˜์˜จ๋Œ€๋กœ configํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ๋’ค ๋ชจ๋ธ ํ•™์Šต์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Data Processing Code (DataProcessing)

๋ถ๊ทน์„ฑ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ๋กœ์ง์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž์™€ Q&A ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  2. ์–ป์–ด์ง„ Q&A๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ€์ƒ์˜ Mock JD๋ฅผ ์–ป์–ด๋ƒ…๋‹ˆ๋‹ค.
  3. Mock JD๋ฅผ BERT ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ Embedding Vector๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ด Embedding Vector์™€ Cosine ์œ ์‚ฌ๋„๊ฐ€ ๋†’์€ JD ๋ชฉ๋ก์„ ์–ป์–ด๋ƒ…๋‹ˆ๋‹ค.
  5. ์ด ์ค‘ ํ•˜๋‚˜์˜ JD๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ฐ•์˜ ์ถ”์ฒœ์„ ์š”์ฒญํ•˜๋ฉด ํ•ด๋‹น JD๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฒน์น˜๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ์ ์ ˆํ•œ ๊ฐ•์˜๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

Data Processing ํด๋” ๋‚ด์— ์žˆ๋Š” ํด๋” ์ค‘ JD_feature ํด๋”๋Š” 2๋ฒˆ ๊ณผ์ •, Lec_recommendlogic ํด๋”๋Š” 5๋ฒˆ ๊ณผ์ •์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

JD_feature๐Ÿ“Œ

  • QnA ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ€์ƒ JD๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋”๋ถˆ์–ด TestSheet๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋„ ์—ฌ๊ธฐ์— ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฆ‰ Sample JD์™€ ์œ ์‚ฌ๋„๋ฅผ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

LEC_recommend_logic๐Ÿ“Œ

  • JD๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด ์ด์™€ ๊ด€๋ จ๋„๊ฐ€ ๋†’์€ ๊ฐ•์˜๋ฅผ ์ถ”์ฒœํ•ด์ฃผ๋Š” ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ‚ค์›Œ๋“œ๊ฐ€ ๋งค์นญ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

Data Processing์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ํ™•์ธํ•˜๋ ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”.

Retrospection๐Ÿ“Œ

  • ์ธ๊ณต์ง€๋Šฅ ๋ชจ๋ธ ์ฝ”๋“œ๋Š” ๋Œ€์ฒด์ ์œผ๋กœ ๋น„์Šทํ•œ ํ˜•ํƒœ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ์‹ค์ œ๋กœ Kaggle ๋“ฑ์„ ์ง„ํ–‰ํ•  ๋•Œ ์ด์ „์— ์‚ฌ์šฉํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์—ฌ๋„ฃ๊ธฐํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ผ์ด ์žฆ์„ ์ •๋„๋กœ ๊ต‰์žฅํžˆ ๊ทธ ํ˜•์‹์ด ์œ ์‚ฌํ•˜๋‹ค. ์ฆ‰ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ ์ด๋ฅผ ๋ชจ๋“ˆํ™”ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜์˜€๊ณ  ๊ทธ๊ฒƒ์„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜์—ฌ ๊ฝค ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์„ฑ๊ณผ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค๋Š” ๊ฒƒ์ด ์ธ์ƒ ๊นŠ์—ˆ๋‹ค.
  • kaggle ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„์ „์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ง€ ๋ชปํ–ˆ๋‹ค. ์‚ฌ์‹ค ๋น ๋ฅด๊ฒŒ ๋ชจ๋ธ baseline์„ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด ๋ณผ ๋•Œ GPU๊ฐ€ ์—†๋‹ค๋ฉด Kaggle ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ํ˜ธํ™˜์„ฑ์ด ํ•„์š”ํ•œ๋ฐ ์•„์ง ์ด ๋ถ€๋ถ„์„ ์ œ์ž‘ํ•ด๋ณด์ง€ ๋ชปํ•œ ๊ฒƒ์ด ์•„์‰ฝ๋‹ค.
  • ๋ชจ๋“ˆํ™”๊ฐ€ ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ ์ฝ”๋“œ๋„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์—ˆ์œผ๋‚˜, ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ ๋™์•ˆ์—๋Š” ์™„์„ฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ํ–ฅํ›„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์ฝ”๋“œ์ด๋ฏ€๋กœ ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ ์ฝ”๋“œ๋„ ๊ตฌํ˜„ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.