Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ko/guide/versions.md
25115 views

TensorFlow ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ

์ด ๋ฌธ์„œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ TensorFlow(์ฝ”๋“œ ๋˜๋Š” ๋ฐ์ดํ„ฐ)์—์„œ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž, ๊ทธ๋ฆฌ๊ณ  ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ TensorFlow๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์œ ์˜์  ๋ฒ„์ €๋‹ 2.0

TensorFlow๋Š” ๊ณต๊ฐœ API์— ์œ ์˜์  ๋ฒ„์ €๋‹ 2.0(semver)์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. TensorFlow์˜ ๊ฐ ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „์€ MAJOR.MINOR.PATCH ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด TensorFlow ๋ฒ„์ „ 1.2.3์€ MAJOR ๋ฒ„์ „ 1, MINOR ๋ฒ„์ „ 2, PATCH ๋ฒ„์ „ 3์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ˆซ์ž์˜ ๋ณ€ํ™”๋Š” ๋‹ค์Œ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค:

  • MAJOR: ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ์—†๋Š” ๋ณ€๋™์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ์ฃผ(major) ๋ฒ„์ „์—์„œ ๋™์ž‘ํ–ˆ์—ˆ๋˜ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์—์„œ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๊ธฐ์กด TensorFlow ๊ทธ๋ž˜ํ”„์™€ ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ƒˆ๋กœ์šด ๋ฒ„์ „์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ๊ทธ๋ž˜ํ”„์™€ ์ฒดํฌํฌ์ธํŠธ์˜ ํ˜ธํ™˜์„ฑ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

  • MINOR: ํ•˜์œ„ ํ˜ธํ™˜๋˜๋Š” ํŠน์„ฑ, ์†๋„ ๊ฐœ์„  ๋“ฑ์ž…๋‹ˆ๋‹ค. ์ด์ „ ๋ถ€(minor) ๋ฒ„์ „ ๋ฐ ์ด์ „ ๋ถ€ ๋ฒ„์ „์˜ ๋น„์‹คํ—˜์ ์ธ ๊ณต๊ฐœ API๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋Š” ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ API์— ๋ฌด์—‡์ด ํฌํ•จ๋˜๊ณ  ํฌํ•จ๋˜์ง€ ์•Š๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ํฌํ•จ๋˜๋Š” ์‚ฌํ•ญ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  • PATCH: ํ•˜์œ„ ํ˜ธํ™˜๋˜๋Š” ๋ฒ„๊ทธ ํ”ฝ์Šค

์ด๋ฅผํ…Œ๋ฉด ๋ฆด๋ฆฌ์ฆˆ 1.0.0์€ ๋ฆด๋ฆฌ์ฆˆ 0.12.1์—์„œ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ์—†๋Š” ๋ณ€๋™์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋ฆด๋ฆฌ์ฆˆ 1.1.1์€ ๋ฆด๋ฆฌ์ฆˆ 1.0.0๊ณผ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌํ•จ๋˜๋Š” ์‚ฌํ•ญ

TensorFlow์˜ ๊ณต๊ฐœ API๋งŒ์ด ๋ถ€ ๋ฒ„์ „ ๋ฐ ํŒจ์น˜ ๋ฒ„์ „์—์„œ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๊ณต๊ฐœ API๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • tensorflow ๋ชจ๋“ˆ๊ณผ ๊ทธ ํ•˜์œ„ ๋ชจ๋“ˆ์— ์žˆ๋Š” ํด๋ž˜์Šค, ๋ชจ๋“  ๋ฌธ์„œํ™”๋œ Python ํ•จ์ˆ˜. ๋‹จ ๋‹ค์Œ์€ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

    • ๋น„๊ณต๊ฐœ ์‹ฌ๋ณผ: _๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค ๋“ฑ

    • ์‹คํ—˜์ ์ธ ๋ฐ tf.contrib ์‹ฌ๋ณผ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋‚ด์šฉ ์ฐธ์กฐ

    examples/์™€ tools/ ๊ฒฝ๋กœ์— ์žˆ๋Š” ์ฝ”๋“œ๋Š” tensorflow Python ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ  ๋”ฐ๋ผ์„œ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

    ํ•œ ์‹ฌ๋ณผ์ด tensorflow Python ๋ชจ๋“ˆ์ด๋‚˜ ์„œ๋ธŒ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ ๋ฌธ์„œํ™”๋˜์ง€๋Š” ์•Š์€ ๊ฒฝ์šฐ, ๊ณต๊ฐœ API์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ˜ธํ™˜์„ฑ API(Python์˜ tf.compat ๋ชจ๋“ˆ). ์ฃผ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ์ž๋“ค์ด ์ƒˆ๋กœ์šด ์ฃผ ๋ฒ„์ „์œผ๋กœ ์˜ฎ๊ฒจ๊ฐ€๋Š” ๊ฒƒ์„ ๋„์™€์ฃผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ์ถ”๊ฐ€์ ์ธ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๊ณต๊ฐœ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ API ์‹ฌ๋ณผ๋“ค์€ ์—†์–ด์ง€๊ณ  ์ง€์›๋˜์ง€ ์•Š์ง€๋งŒ(์ฆ‰, ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ทจ์•ฝ์„ฑ ์ด์™ธ์˜ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ) ํ˜ธํ™˜์„ฑ์€ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

  • TensorFlow C API:

  • TensorFlow Lite C API:

  • ๋‹ค์Œ์˜ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ ํŒŒ์ผ:

ํฌํ•จ๋˜์ง€ ์•Š๋Š” ์‚ฌํ•ญ

TensorFlow์˜ ์ผ๋ถ€๋ถ„์€ ์–ด๋–ค ๋ฉด์—์„œ๋„ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ์—†๋„๋ก ๋ณ€๋™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ์‹คํ—˜์ ์ธ API: ๊ฐœ๋ฐœ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด, ์–ด๋–ค API ์‹ฌ๋ณผ๋“ค์€ ์‹คํ—˜์ ์ธ ๊ฒƒ์œผ๋กœ ๊ทœ์ •ํ•˜๊ณ  ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค์Œ์€ ์–ด๋– ํ•œ ํ˜ธํ™˜์„ฑ ๋ณด์žฅ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • tf.contrib ๋ชจ๋“ˆ์ด๋‚˜ ์„œ๋ธŒ ๋ชจ๋“ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์‹ฌ๋ณผ

    • experimental ๋˜๋Š” Experimental์ด๋ผ๋Š” ์ด๋ฆ„์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ์‹ฌ๋ณผ(๋ชจ๋“ˆ, ํ•จ์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ์†์„ฑ, ํด๋ž˜์Šค, ์ƒ์ˆ˜); ๋˜๋Š”

    • ๋ชจ๋“ˆ์ด๋‚˜ ํด๋ž˜์Šค๊ฐ€ ํฌํ•จํ•˜๋Š” ์ ˆ๋Œ€ ํ‘œ๊ธฐ๊ฐ€ ๊ทธ ์ž์ฒด๋กœ ์‹คํ—˜์ ์ธ ๋ชจ๋“  ์‹ฌ๋ณผ. experimental๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ์˜ ํ•„๋“œ๋‚˜ ์„œ๋ธŒ ๋ฉ”์‹œ์ง€ ํฌํ•จ.

  • ๋‹ค๋ฅธ ์–ธ์–ด: Python๊ณผ C ์ด์™ธ์˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ TensorFlow API ์–ธ์–ด:

  • ํ•ฉ์„ฑ ์—ฐ์‚ฐ ์„ธ๋ถ€์‚ฌํ•ญ: Python์˜ ๋งŽ์€ ๊ณต๊ฐœ ํ•จ์ˆ˜๊ฐ€ ์ผ๋ถ€ ๊ทธ๋ž˜ํ”„์˜ ์›์‹œ ์—ฐ์‚ฐ์— ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค, ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์„ธ๋ถ€์‚ฌํ•ญ์€ GraphDef๋กœ ๋””์Šคํฌ์— ์ €์žฅ๋˜๋Š” ๊ทธ๋ž˜ํ”„์˜ ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ธ๋ถ€์‚ฌํ•ญ์€ ๋ถ€(minor) ๋ฒ„์ „์—์„œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ทธ๋ž˜ํ”„๊ฐ„ ์ •ํ™•ํ•œ ๋งค์นญ์ด ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋Š” ๊ทธ๋ž˜ํ”„์˜ ํ–‰๋™์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ๊ธฐ์กด์˜ ์ฒดํฌํฌ์ธํŠธ๊ฐ€ ์•„์ง ๋™์ž‘ํ• ์ง€๋ผ๋„ ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€ ๋ฒ„์ „์—์„œ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

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

  • ๋žœ๋ค ์ˆซ์ž: ํŠน์ •ํ•œ ๋žœ๋ค ์ˆซ์ž๊ฐ€ random ops๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐ๋˜๊ณ  ์–ธ์ œ๋“ ์ง€ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ณ„์‚ฐ๋œ ํŠน์ • ๋น„ํŠธ์— ์˜์กดํ•˜์ง€ ๋ง๊ณ , ๊ทผ์‚ฌ์ ์œผ๋กœ ์ ์ ˆํ•œ ๋ถ„ํฌ์™€ ํ†ต๊ณ„์  ๊ฐ•๋„์— ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํŒจ์น˜ ๋ฒ„์ „์—์„œ๋Š” ํŠน์ •ํ•œ ๋น„ํŠธ๋ฅผ ๊ฑฐ์˜ ๋ฐ”๊พธ์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ณ€๋™์‚ฌํ•ญ์€ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ถ„์‚ฐ Tensorflow์—์„œ์˜ ๋ฒ„์ „ ์—‡๊ฐˆ๋ฆผ: ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๋ฒ„์ „์˜ Tensorflow๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™€์ด์–ด ํ”„๋กœํ† ์ฝœ(wire protocol)์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

  • ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” API: ๋‹น์‚ฌ๋Š” ๋ฌธ์„œํ™”๋œ ์šฉ๋„๊ฐ€ ์—†๋Š” API์— ๋Œ€ํ•ด ํ•˜์œ„ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ๊ถŒ๋ฆฌ๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค(GitHub ๊ฒ€์ƒ‰์„ ํ†ตํ•ด TensorFlow ์‚ฌ์šฉ ๊ฐ์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•จ). ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์„ ํ•˜๊ธฐ ์ „์— announce@ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๋ณ€๊ฒฝ ์˜์‚ฌ๋ฅผ ๋ฐœํ‘œํ•˜์—ฌ ์ค‘๋‹จ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•(ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ)์„ ์ œ๊ณตํ•˜๊ณ  2์ฃผ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ํ”ผ๋“œ๋ฐฑ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ค๋‹ˆ๋‹ค.

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

์ €์žฅ๋œ ๋ชจ๋ธ, ๊ทธ๋ž˜ํ”„ ๋ฐ ์ฒดํฌํฌ์ธํŠธ์˜ ํ˜ธํ™˜์„ฑ

์ €์žฅ๋œ ๋ชจ๋ธ์€ TensorFlow ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ง๋ ฌํ™”๋œ ํ˜•์‹์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ €์žฅ๋œ ๋ชจ๋ธ์€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ทธ๋ž˜ํ”„๊ฐ€ GraphDefs์™€ ์ฒดํฌํฌ์ธํŠธ๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„๋Š” ์‹คํ–‰ํ•  ์—ฐ์‚ฐ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋ฅผ ๊ธฐ์ˆ ํ•˜๊ณ  ์ฒดํฌํฌ์ธํŠธ๋Š” ๊ทธ๋ž˜ํ”„ ๋ณ€์ˆ˜๋“ค์˜ ์ €์žฅ๋œ ํ…์„œ๊ฐ’์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ TensorFlow ์‚ฌ์šฉ์ž๋“ค์ด ์ €์žฅ๋œ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  ๋‚˜์ค‘์— ๋ฆด๋ฆฌ์ฆˆ๋œ TensorFlow์—์„œ ๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. semver์— ๋”ฐ๋ผ ํ•œ ๋ฒ„์ „์˜ TensorFlow์—์„œ ์ž‘์„ฑ๋œ ๋ชจ๋ธ์ด ๊ฐ™์€ ์ฃผ ๋ฒ„์ „์— ์†ํ•œ ๋‚˜์ค‘ ๋ฒ„์ „์˜ TensorFlow์—์„œ ๋กœ๋“œ๋˜๊ณ  ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›ํ•˜๋Š” ์ €์žฅ๋œ ๋ชจ๋ธ์—์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ๋ณด์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. TensorFlow ์ฃผ ๋ฒ„์ „ N์—์„œ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ์‹คํ—˜์ ์ด์ง€๋„ ์•Š์œผ๋ฉฐ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  ์ €์žฅ๋œ ๋ชจ๋ธ์€ ๋ฒ„์ „ N์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. TensorFlow ์ฃผ ๋ฒ„์ „ N์—์„œ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ์ €์žฅ๋œ ๋ชจ๋ธ์€ TensorFlow ์ฃผ ๋ฒ„์ „ N+1์—์„œ๋„ ๋กœ๋“œ๋˜๊ณ  ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๊ทธ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ์ด ๋ณด์žฅ์€ ์ˆ˜์ •ํ•˜์ง€ ์•Š์€ ์ €์žฅ๋œ ๋ชจ๋ธ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•˜๋ฉด ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ง๋ ฌํ™”๋œ ํŒŒ์ผ๋“ค์€ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

GraphDef ํ˜ธํ™˜์„ฑ

๊ทธ๋ž˜ํ”„๋Š” GraphDef ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ํ†ตํ•ด ์ง๋ ฌํ™”๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„ ๋ณ€๊ฒฝ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ GraphDef์—๋Š” TensorFlow ๋ฒ„์ „๊ณผ ๋ณ„๋„๋กœ ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GraphDef ๋ฒ„์ „ 17์—์„œ๋Š” reciprocal๋ฅผ ์œ„ํ•ด inv op๋ฅผ ์—†์•ด์Šต๋‹ˆ๋‹ค. ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • TensorFlow์˜ ๊ฐ ๋ฒ„์ „์€ GraphDef ๋ฒ„์ „์˜ ๊ฐ„๊ฒฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ„๊ฒฉ์€ ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค ์‚ฌ์ด์—์„œ ์ผ์ •ํ•˜๋ฉฐ ๋ถ€ ๋ฆด๋ฆฌ์Šค์—์„œ๋งŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. GraphDef ๋ฒ„์ „์— ๋Œ€ํ•œ ์ง€์› ์ค‘๋‹จ์€ TensorFlow์˜ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(์ €์žฅ๋œ ๋ชจ๋ธ์— ๋Œ€ํ•ด ๋ณด์žฅ๋˜๋Š” ๋ฒ„์ „ ์ง€์›๊ณผ๋งŒ ์ผ์น˜ํ•จ).

  • ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ทธ๋ž˜ํ”„์—๋Š” ์ตœ์‹  GraphDef ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

  • ํŠน์ • ๋ฒ„์ „์˜ TensorFlow๊ฐ€ ๊ทธ๋ž˜ํ”„์˜ GraphDef ๋ฒ„์ „์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ, TensorFlow์˜ ์ฃผ์š” ๋ฒ„์ „์— ๊ด€๊ณ„์—†์ด ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ TensorFlow ๋ฒ„์ „๊ณผ ๋™์ผํ•œ ๋™์ž‘์œผ๋กœ ๋กœ๋“œ ๋ฐ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค(์œ„์— ์„ค๋ช…ํ•œ ๋Œ€๋กœ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž ์ •๋ณด์™€ ๋‚œ์ˆ˜๋Š” ์ œ์™ธ). ํŠนํžˆ, ํ•œ ๋ฒ„์ „์˜ TensorFlow(์˜ˆ: ์ €์žฅ๋œ ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ)์˜ ์ฒดํฌํฌ์ธํŠธ ํŒŒ์ผ๊ณผ ํ˜ธํ™˜๋˜๋Š” GraphDef๋Š” GraphDef๊ฐ€ ์ง€์›๋˜๋Š” ํ•œ ํ›„์† ๋ฒ„์ „์—์„œ ํ•ด๋‹น ์ฒดํฌํฌ์ธํŠธ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

    ์ด๋Š” GraphDefs(๋ฐ ์ €์žฅ๋œ ๋ชจ๋ธ)์˜ ์ง๋ ฌํ™”๋œ ๊ทธ๋ž˜ํ”„์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ฝ๋Š” Code๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „์˜ TensorFlow๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์ผํ•œ ์ฝ”๋“œ์—์„œ ์ƒ์„ฑ๋œ ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ฝ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ถ€ ๋ฆด๋ฆฌ์Šค์—์„œ GraphDef ์œ„์ชฝ ๊ฒฝ๊ณ„๊ฐ€ X๋กœ ์ฆ๊ฐ€ํ•˜๋ฉด ์•„๋ž˜์ชฝ ๊ฒฝ๊ณ„๊ฐ€ X๊นŒ์ง€ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐ๋Š” ์ตœ์†Œ 6๊ฐœ์›”์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ๋Š” ๊ฐ€์ƒ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•จ).

    • TensorFlow 1.2๋Š” GraphDef ๋ฒ„์ „ 4๋ถ€ํ„ฐ 7๊นŒ์ง€ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • TensorFlow 1.3์€ GraphDef ๋ฒ„์ „ 8์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฒ„์ „ 4๋ถ€ํ„ฐ 8๊นŒ์ง€ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ ์–ด๋„ 6๊ฐœ์›” ํ›„, TensorFlow 2.0.0์€ ๋ฒ„์ „ 4๋ถ€ํ„ฐ 7๊นŒ์ง€์— ๋Œ€ํ•œ ์ง€์›์„ ์ค‘๋‹จํ•˜๊ณ  ๋ฒ„์ „ 8๋งŒ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    TensorFlow์˜ ์ฃผ์š” ๋ฒ„์ „์€ ์ผ๋ฐ˜์ ์œผ๋กœ 6๊ฐœ์›” ์ด์ƒ ๊ฐ„๊ฒฉ์„ ๋‘๊ณ  ์ถœ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์— ์„ค๋ช…ํ•œ ์ง€์›๋˜๋Š” ์ €์žฅ๋œ ๋ชจ๋ธ์— ๋Œ€ํ•œ ๋ณด์ฆ์€ GraphDefs์— ๋Œ€ํ•œ 6๊ฐœ์›” ๋ณด์ฆ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, GraphDef ๋ฒ„์ „์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋˜๋ฉด ๊ทธ๋ž˜ํ”„๋ฅผ ์ง€์›๋˜๋Š” ์ตœ์‹  GraphDef ๋ฒ„์ „์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

TensorFlow ํ™•์žฅ์‹œ ๊ทธ๋ž˜ํ”„ ๋ฐ ์ฒดํฌํฌ์ธํŠธ ํ˜ธํ™˜์„ฑ

์ด ์„น์…˜์€ ์—ฐ์‚ฐ ์ถ”๊ฐ€, ์—ฐ์‚ฐ ์ œ๊ฑฐ ๋˜๋Š” ๊ธฐ์กด ์—ฐ์‚ฐ์˜ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ๊ณผ ๊ฐ™์ด GraphDef ํ˜•์‹์— ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ด€๋ จ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์ด์ „ ์„น์…˜์˜ ๋‚ด์šฉ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์—ญ๋ฐฉํ–ฅ ๋ฐ ๋ถ€๋ถ„ ์ˆœ๋ฐฉํ–ฅ ํ˜ธํ™˜์„ฑ

๋ฒ„์ €๋‹ ๊ณ„ํš์˜ ์„ธ ๊ฐ€์ง€ ์š”๊ฑด:

  • ์ด์ „ ๋ฒ„์ „์˜ TensorFlow์—์„œ ๋งŒ๋“ค์–ด์ง„ ๊ทธ๋ž˜ํ”„์™€ ์ฒดํฌํฌ์ธํŠธ์˜ ๋กœ๋”ฉ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ.

  • ๊ทธ๋ž˜ํ”„๋‚˜ ์ฒดํฌํฌ์ธํŠธ์˜ ์ƒ์‚ฐ์ž๊ฐ€ ์†Œ๋น„์ž ์ด์ „์— ์ƒˆ ๋ฒ„์ „์˜ TensorFlow๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์œ„ํ•œ ์ƒ์œ„ ํ˜ธํ™˜์„ฑ.

  • TensorFlow๊ฐ€ ํ˜ธํ™˜ํ•˜์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ๋˜๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ. ์ด๋ฅผํ…Œ๋ฉด, ์—ฐ์‚ฐ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•จ.

GraphDef ๋ฒ„์ „ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ TensorFlow ๋ฒ„์ „๊ณผ๋Š” ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์ง€๋งŒ, GraphDef ํ˜•์‹์— ํ•˜์œ„ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๋™์‚ฌํ•ญ์€ ์œ ์˜์  ๋ฒ„์ €๋‹์—์„œ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, TensorFlow ์ฃผ (MAJOR) ๋ฒ„์ „๊ฐ„(์ด๋ฅผํ…Œ๋ฉด 1.7๊ณผ 2.0) ๊ธฐ๋Šฅ์ด ์ œ๊ฑฐ๋˜๊ฑฐ๋‚˜ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์œ„ ํ˜ธํ™˜์„ฑ์€ ํŒจ์น˜ ๋ฆด๋ฆฌ์ฆˆ(์ด๋ฅผํ…Œ๋ฉด 1.x.1์—์„œ 1.x.2) ์•ˆ์—์„œ ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค.

์ƒ์œ„ ํ˜ธํ™˜์„ฑ๊ณผ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ํ˜•์‹์˜ ๋ณ€๋™์„ ์–ธ์ œ ๊ฐ•์ œํ•ด์•ผ ํ• ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ, ๊ทธ๋ž˜ํ”„์™€ ์ฒดํฌํฌ์ธํŠธ๋Š” ์–ธ์ œ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์„น์…˜์— TensorFlow ๊ตฌํ˜„๊ณผ GraphDef ๋ฒ„์ „์—…์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์ด ์ž์„ธํžˆ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๊ณ„ํš

๊ทธ๋ž˜ํ”„์™€ ์ฒดํฌํฌ์ธํŠธ์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฐ์ดํ„ฐ ํ˜•์‹์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋น„์œจ๋กœ ๋ฒ„์ „์—…๋˜๊ณ  ๋˜ํ•œ TensorFlow์™€๋„ ์„œ๋กœ ๋‹ค๋ฅธ ๋น„์œจ๋กœ ๋ฒ„์ „์—…๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒ„์ €๋‹ ์‹œ์Šคํ…œ ๋ชจ๋‘ core/public/version.h์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์–ด๋–ค ์‚ฌํ•ญ์ด ๋ณ€ํ–ˆ๊ณ  ๋‚ ์งœ๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š” ์ง€๊ฐ€ ํ—ค๋”์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ, ์ƒ์‚ฐ์ž ๋ฐ ์†Œ๋น„์ž

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๊ตฌ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ƒ์‚ฐ์ž: ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ƒ์‚ฐ์ž๋Š” ๋ฒ„์ „(producer) ๋ฐ ํ˜ธํ™˜๋˜๋Š” ์ตœ์†Œ ์†Œ๋น„์ž ๋ฒ„์ „(min_consumer)์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์†Œ๋น„์ž: ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์†Œ๋น„์ž๋Š” ๋ฒ„์ „(consumer) ๋ฐ ํ˜ธํ™˜๋˜๋Š” ์ตœ์†Œ ์ƒ์‚ฐ์ž ๋ฒ„์ „(min_producer)์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ฒ„์ „์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“  ์ƒ์‚ฐ์ž์™€ ํ˜ธํ™˜์ด ๋˜๋Š” min_consumer, ๊ทธ๋ฆฌ๊ณ  ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ bad_consumers ๋ฒ„์ „ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ๋กํ•˜๋Š” VersionDef versions ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • consumer >= ๋ฐ์ดํ„ฐ์˜ min_consumer

  • ๋ฐ์ดํ„ฐ์˜ producer >= ์†Œ๋น„์ž์˜ min_producer

  • ๋ฐ์ดํ„ฐ์˜ bad_consumers์— ์—†๋Š” consumer

์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ๋ชจ๋‘ ๊ฐ™์€ TensorFlow ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋‚˜์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, core/public/version.h๋Š” ๋ฌธ๋งฅ๊ณผ min_consumer ๋ฐ min_producer(์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ๊ฐ๊ฐ์ด ํ•„์š”๋กœ ํ•˜๋Š”)์— ๋”ฐ๋ผ producer๋‚˜ consumer ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ ์ทจ๊ธ‰๋˜๋Š” ๋ฉ”์ธ ๋ฐ์ดํ„ฐ ๋ฒ„์ „์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • GraphDef ๋ฒ„์ „์œผ๋กœ TF_GRAPH_DEF_VERSION, TF_GRAPH_DEF_VERSION_MIN_CONSUMER, TF_GRAPH_DEF_VERSION_MIN_PRODUCER๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฒดํฌํฌ์ธํŠธ ๋ฒ„์ „์œผ๋กœ TF_CHECKPOINT_VERSION, TF_CHECKPOINT_VERSION_MIN_CONSUMER, TF_CHECKPOINT_VERSION_MIN_PRODUCER๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ์—ฐ์‚ฐ์— ์ƒˆ๋กœ์šด ์†์„ฑ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ถ”๊ฐ€

๋‹ค์Œ์˜ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด๋ฉด ์ผ๋ จ์˜ ์—ฐ์‚ฐ์ด ๋ณ€ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ๋งŒ ์ƒ์œ„ ํ˜ธํ™˜์„ฑ์ด ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  1. ์ƒ์œ„ ํ˜ธํ™˜์„ฑ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, SavedModelBuilderํด๋ž˜์Šค์˜ tf.saved_model.SavedModelBuilder.add_meta_graph_and_variables์™€ tf.saved_model.SavedModelBuilder.add_meta_graph ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ tf.estimator.Estimator.export_saved_model์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ์„ ๋‚ด๋ณด๋‚ด๋Š” ๋™์•ˆ strip_default_attrs๋ฅผ True๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋ธ์„ ์ƒ์„ฑ/๋‚ด๋ณด๋‚ผ ๋•Œ ๊ธฐ๋ณธ ๊ฐ’ ์†์„ฑ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด ์‚ฌ์šฉ๋  ๋•Œ ๋‚ด๋ณด๋‚ธ tf.MetaGraphDef์— ์ƒˆ op ์†์„ฑ์ด ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  3. ์ด ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ž˜๋œ ์†Œ๋น„์ž(์˜ˆ๋ฅผ๋“ค๋ฉด, ํ›ˆ๋ จ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋’ค์ณ์ง„ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š”)๊ฐ€ ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋ฅผ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ  ๋ชจ๋ธ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GraphDef ๋ฒ„์ „์—…

์ด ์„น์…˜์€ GraphDef ํ˜•์‹์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋ณ€๋™์‚ฌํ•ญ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ฒ„์ €๋‹ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์—ฐ์‚ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ

GraphDef ๋ฒ„์ „์„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์†Œ๋น„์ž์™€ ์ƒ์‚ฐ์ž์— ๋™์‹œ์— ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ณ€๋™์‚ฌํ•ญ์€ ์ž๋™์ ์œผ๋กœ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ์žˆ๊ณ  ๊ธฐ์กด ์ƒ์‚ฐ์ž ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์œ„ ํ˜ธํ™˜ ๊ณ„ํš์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด Python ๋ž˜ํผ๋กœ ๋ฐ”๊พธ๊ธฐ

  1. ์ƒˆ๋กœ์šด ์†Œ๋น„์ž ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  GraphDef ๋ฒ„์ „์„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

  2. ์ด์ „์— ๋™์ž‘ํ•˜์ง€ ์•Š์•˜๋˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ž˜ํผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ž˜ํผ๋Š” ์ง€๊ธˆ ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  3. Python ๋ž˜ํผ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ์€ ๊ณ ์žฅ๋‚˜์ง€ ์•Š์•„์•ผ ํ•˜๋ฏ€๋กœ min_consumer๋ฅผ ์˜ฌ๋ฆฌ์ง€ ๋งˆ์„ธ์š”.

์—ฐ์‚ฐ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ œํ•œํ•˜๊ธฐ

  1. ๊ธˆ์ง€๋œ ์—ฐ์‚ฐ์ด๋‚˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์ƒ์‚ฐ์ž ์Šคํฌ๋ฆฝํŠธ(TensorFlow ์ž์ฒด๊ฐ€ ์•„๋‹Œ)๋ฅผ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค.

  2. GraphDef๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๊ณ  ์ƒˆ ๋ฒ„์ „์˜ GraphDef๋‚˜ ๊ทธ ์ด์ƒ์—์„œ ์ œ๊ฑฐ๋œ ์—ฐ์‚ฐ์ด๋‚˜ ๊ธฐ๋Šฅ์„ ๊ธˆ์ง€ํ•˜๋Š” ์ƒˆ๋กœ์šด ์†Œ๋น„์ž ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด TensorFlow์—์„œ ๊ธˆ์ง€๋œ ๊ธฐ๋Šฅ์œผ๋กœ GraphDefs๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด REGISTER_OP(...).Deprecated(deprecated_at_version, message)๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

  3. ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ๋ชฉ์ ์œผ๋กœ ์ฃผ ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

  4. (2)์—์„œ์˜ GraphDef ๋ฒ„์ „์—์„œ min_producer๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์˜ ๊ธฐ๋Šฅ ๋ฐ”๊พธ๊ธฐ

  1. SomethingV2์™€ ๊ฐ™์ด ๋น„์Šทํ•œ ์—ฐ์‚ฐ์˜ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๋ฉฐ ์ด๋ฅผ ์œ„ํ•œ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์น˜๊ณ  ๊ธฐ์กด Python ๋ž˜ํผ๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ „ํ™˜ํ•˜์„ธ์š”. Python ๋ž˜ํผ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์ƒ์œ„ ํ˜ธํ™˜์„ฑ ํ™•์ธ์„ ์œ„ํ•ด compat.py์— ์žˆ๋Š” ์ œ์•ˆ ์‚ฌํ•ญ์„ ํ™•์ธํ•˜์„ธ์š”.

  2. ์˜ˆ์ „์˜ ์—ฐ์‚ฐ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค(ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋•Œ๋ฌธ์— ์ฃผ ๋ฒ„์ „์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๋ฐœ์ƒ).

  3. ์˜ˆ์ „์˜ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์†Œ๋น„์ž๋ฅผ ๋ฐฐ์ œํ•˜๊ธฐ ์œ„ํ•ด min_consumer๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์˜ˆ์ „ ์—ฐ์‚ฐ์— SomethingV2๋ฅผ ์œ„ํ•œ ๋ณ„์นญ์„ ๋‹ฌ์•„์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด Python ๋ž˜ํผ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์น˜์„ธ์š”.

  4. SomethingV2๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์†Œ๋น„์ž ๋ฒ„์ „ ๊ธˆ์ง€ํ•˜๊ธฐ

  1. GraphDef ๋ฒ„์ „์„ ์ถฉ๋Œ์‹œํ‚ค๊ณ  ๋‚˜์œ ๋ฒ„์ „์„ ๋ชจ๋“  ์ƒˆ๋กœ์šด GraphDef์˜ bad_consumers์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ํŠน์ •ํ•œ ์—ฐ์‚ฐ์ด๋‚˜ ๋น„์Šทํ•œ ๊ฒƒ๋“ค์„ ํฌํ•จํ•˜๋Š” GraphDef์—๋งŒ bad_consumers๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ธฐ์กด ์†Œ๋น„์ž๊ฐ€ ๋‚˜์œ ๋ฒ„์ „์ธ ๊ฒฝ์šฐ, ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.