240717 Today I Learn
๋ณ๋ ฌ์ฒ๋ฆฌ์ ๋ถ์ฐ์ฒ๋ฆฌ
๋ณ๋ ฌ์ฒ๋ฆฌ vs. ๋ถ์ฐ์ฒ๋ฆฌ
- ๋ณ๋ ฌ์ฒ๋ฆฌ : ์ฌ๋ฌ๊ฐ์ core์์ ๋์ ๋ค๋ฐ์ ์ผ๋ก ์ผ์ ๋๋์ด์ ์ฒ๋ฆฌ
- Multiprocessing์ด๋ joblib์ด ํํ ์ฌ์ฉ.
- sklearn์ njobs๊ฐ ์ด๋ฅผ ์ ์ดํ๋ ๊ธฐ๋ฅ.
- ๋ถ์ฐ์ฒ๋ฆฌ : ๋คํธ์ํฌ๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ์ฌ๋ฌ ๋์ ์ปดํจํฐ(๋
ธ๋)๊ฐ ๊ฐ๊ฐ์ ์์
์ ์ํํ๋ ๊ฒ
- Spark๋ฅผ ํฌํจํด Ray, Dask ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์.
๋ณ๋ ฌ ์ฒ๋ฆฌ vs Vectorize
๐ก ํ ๊ธฐ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ท๋ชจ๋ผ๋ฉด, ๊ตณ์ด Spark๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋ ์ฐ์ฐ์ ์ต์ ํํ๋ ๊ฒ์ด ๋ ๋ซ๋ค.
- Numpy(Pandas ํฌํจ)๋ ๋ฒกํฐํ ์ฐ์ฐ์ ํตํด ๋จ์ ๋ฐ๋ณต์์ ์ ๊ต์ฅํ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์์.
- ์คํํฌ์์๋ ๊ฐ๋ณ ๋จธ์ ์ ๋ฒกํฐํ๋ฅผ ์ํํ์ฌ ์๋๋ฅผ ์ต์ ํํ ์ ์์.
๋ณ๋ ฌ์ฒ๋ฆฌ์ ๊ธฐ์
- Pickling & Job broker
- ๋ถ์ฐ/๋ณ๋ ฌ์ฒ๋ฆฌ ๋๊ตฌ๋ค์ ๋ด๋ถ์์ ๋ฐ์ดํฐ๋ฅผ Picklie๋ก ๋ณํํ์ฌ ์ก์์
- ๋ํ ์ด๋ค ํ๋ก์ธ์์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ , ์ด๋ค ์์
์ ์ํฌ ๊ฒ์ด๋ฉฐ, ์ด๋ป๊ฒ ์ทจํฉํ ๊ฒ์ธ์ง์ ๋ํ ๋งค๋์ ๊ฐ ํ์ํ๋ฉฐ, ์ด๋ฅผ Job broker๋ผ๊ณ ํจ
→ ์คํํฌ์์๋ ํด๋ฌ์คํฐ ๋งค๋์ Cluster Manager๊ฐ Yarn, Mesos, Kube ๋ฑ์ ์ด์ฉ
- ์ค๋ ๋์ ํ๋ก์ธ์ค
- ์ค๋ ๋ : ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์
- ํ๋ก์ธ์ค : ๋
๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
→ ํ์ด์ฌ์ ๋ฉํฐ ํ๋ก์ธ์ฑ์ด ์ผ๋ฐ์
- Joblib : ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์ํ ํ์ด์ฌ ํจํค์ง
- Sklearn์ ๊ฒฝ์ฐ ๋ด๋ถ์์ joblib์ ์ฌ์ฉ
- k๊ฐ์ ๋ฉํฐํ๋ก์ธ์ฑ์ ํ ๋ k๊ฐ ์๋ฃ ๋์ด์ผ ๋ค์ ์ํ๋ก ๋์ด๊ฐ ์ฝ๊ฐ์ ๋นํจ์จ ๋ฐ์ ๊ฐ๋ฅ → ๋์์ผ๋ก๋ multiprocessing ํจํค์ง๋ ๋ง์ด ์ฌ์ฉ
Spark๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ
์ํ๋ง
"์ ์ฒด ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ฉด, ์ผ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ํ๋ค."
- Random Sampling : ๋๋ค์ผ๋ก ์ํ๋ง
→ ํ๋ณธ์ด ์ฐ์ฐํ ํธํฅ๋ ์๋ ์๊ณ ๋งค๋ฒ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ค๋ ๋ฌธ์ ์ ์ด ์์. - Stratified Sampling : ์ผ์ ๋น์จ์ ๋ง์ถ์ด ์ํ๋ง ํ๋ ๊ฒ
→ ์ฌ์ ํ ๋งค๋ฒ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ค๋ ๋ฌธ์ ์ ์ด ์์. - Systematic Sampling : ํจํด์ด ์๊ฑฐ๋ ์์์ ์ํฅ์ ๋ฐ์ง ์๋ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋กํจ.
- ํจํด์ด ์๋์ง ๊ฒ์ฌํด๋ณด๋ ๊ณผ์ ์ด ํ์
- ๊ฑด๋๋ฐ๋ ๋จ์๋ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํน์ ํจํด์ ํผํ๊ธฐ์ ์ข์.
๋ถํ ์ฒ๋ฆฌ
"๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ค๋ฉด 1/n๋ก ์์ ์ ๋๋์ด์ ์ํ"
- ๋ฐ์ดํฐ๊ฐ ์๋ฒฝํ ๋ถํ ๋๋ ๊ฒฝ์ฐ ์ฌ์ฉ ๊ฐ๋ฅ ← ์์ ๋คํธ์ํฌ์ ๊ฐ์ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ ๋ถํ ์ด ์ด๋ ค์.
- ๊ฐ ํํฐ์
์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์, ํ์ํ ์ฐ์ฐ์ ์ํํ ๋ค ์ต์ข
๊ฒฐ๊ณผ๋ง์ ์ง๊ณํ์ฌ ์ ์ฅ
- ์ ์ฒด ๋ฐ์ดํฐ > ์ง๊ณ๋ ๋ฐ์ดํฐ
- ์ผ์ ์์ค ์ด์์ ์์ธํจ์ ๋จ๊ฒจ์ค์ผ ์ถํ ์๋ฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ข์.
Dask
"๋ถ์ฐ์ฒ๋ฆฌ ๋๊ตฌ๋ก Spark ๋ณด๋ค ๊ฐ๋ณ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ"
- Dask๋ฅผ ์ฌ์ฉํ๋ฉด NumPy, Pandas ๋ฐ sklearn๊ณผ ๊ฐ์ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ์ฅํ ์ ์์.
- Dask Dataframe์ Pandas์ ์ ์ฌํ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋น๊ต์ ํ์ต ๋์ด๋๋ ๋ํ ๋ฎ์.
- Spark์ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
- ์ฑ๊ธ ๋จธ์ ์ผ๋ก ํฐ ํ์ผ์ ์ฝ์ ๋ ์ ์ฉํจ.
→ parquet์์ ์ผ๋ถ ์นผ๋ผ์ ์ฝ๊ฑฐ๋, csv์์ ์ผ๋ถ row๋ง ์ฝ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง dask๋ก ํ์ผ์ ์ชผ๊ฐ๋ ๊ฒ์ด ํธ๋ฆฌ
์๋ํ
Batch vs Streaming
- batch job : ์ฃผ๊ธฐ์ ์ธ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ
→ ๋ฐ์ดํฐ ๋ถ์๊ฐ์ ์ ๋ฌด๋ batch job์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์. - streaming job : ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ๋ ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ
Cron์ ์ด์ฉํ ์ค์ผ์ค๋ง
- ๊ฐ์ฅ ์ฝ๊ณ ๋จ์ํ ์ค์ผ์ฅด๋ง ๋๊ตฌ๋ก ์ํํธ์จ์ด ์ด๋ฆ์ธ ๋์์, ์ค์ผ์ฅด๋ง ํํ์์ ์ด๋ฆ
- ๋จ์ → ๊ท๋ชจ ์๋ ํ์ฌ์์๋ Airflow๋ Jenkins๋ฅผ ๋ง์ด ์ฌ์ฉ
- job์ด ์คํจํ ๊ฒฝ์ฐ, ๋ฐ๋ก ์๋์ด ์ค์ง๋ ์์.
→ ๋ฐ๋ก ์๋์ ์ธํ ํ๋๋ผ๋, OOM ๋ฑ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ๋ฉ์ถ๋ฉด ์์ ๋ ํฌํ ์ด ์๋จ. - ์๋ฒ ์์ฒด๊ฐ ์ฃฝ์ ๊ฒฝ์ฐ, ํ์ธํ๊ธฐ ์ด๋ ค์.
- ๋ก๊ทธ๋ฅผ ์ ์ธํ๋ฉด ํ์คํ ๋ฆฌ๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ค์.
- GUI๋ฅผ ๋ฐ๋ก ์ ๊ณตํ์ง ์์.
- ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํฌํจํ ์์ ๊ด๋ฆฌ๋ฅผ ์ง์ํ์ง ์์.
- job์ด ์คํจํ ๊ฒฝ์ฐ, ๋ฐ๋ก ์๋์ด ์ค์ง๋ ์์.
๋ชจ๋ํฐ๋ง๊ณผ ํ์คํ ๋ฆฌ ๊ด๋ฆฌ
- ๋ชจ๋ํฐ๋ง : ์ฃผ๊ธฐ์ ์ธ batch job์ด ์ํ๋์ง ์์์ ๋ ์๋ฆผ์ด ์ค๋๋ก ํ๋ ๊ฒ.
→ ๋ณดํต ์ฌ๋ ๋ฑ์ ์ฑ์ ์ด์ฉ ์๋ฆผ์ ๋ฐ์ ์ ์์. - ์ฝ๋ ๋จ์์ ์ด๋ป๊ฒ ์์ ์ด ์ํ๋์๋์ง ๊ธฐ๋ก(logging)ํ๋ ๊ฒ์ด ์ค์ํจ.
'๐ Today I Learn > ๐ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spark๋ฅผ ์ด์ฉํ ๋น ๋ฐ์ดํฐ ๋ถ์ (3) (0) | 2024.07.19 |
---|---|
Spark๋ฅผ ์ด์ฉํ ๋น ๋ฐ์ดํฐ ๋ถ์ (1) (1) | 2024.07.17 |
๋จธ์ ๋ฌ๋ ํน๊ฐ #3 ๊ตฐ์งํ(Clustering) (0) | 2024.06.15 |
๋จธ์ ๋ฌ๋ ํน๊ฐ #2 ํ๊ท(Regression) (0) | 2024.06.15 |
[๊ฐ์ธ ๊ณผ์ ] ๋จธ์ ๋ฌ๋ ๊ฐ์ธ๊ณผ์ (1) | 2024.06.13 |