분류 전체보기
-
고성능 파이썬 Chapter 11 - RAM 덜 사용하기STUDY/고성능 파이썬 2025. 2. 9. 20:23
들어가며해당 챕터는 다양한 자료구조를 통해 메모리를 적게 사용하는 방법을 알려준다. 특히 문자열을 저장하고, count 하는 방식에 대해서 알려준다. 특히 정확도를 약간 희생해서 RAM 사용량을 줄였다는 점에서 count 알고리즘이 흥미로웠다. 해당 알고리즘을 어떤 때 사용해야 하는지도 관심 있게 보면 좋을 것 같다.이 장에서 배울 내용- RAM을 덜 사용해야 하는 이유.- 원시 타입의 수를 많이 저장하는 데 numpy와 array가 더 좋은 이유- 많은 텍스트 정보를 RAM에 효율적으로 저장하는 방법- 1바이트로 1076(대략적으로!)을 세는 방법- 블룸(Bloom) 필터의 정의와 이 필터가 필요한 이유 list 대신 numpy, array를 사용하여 RAM 사용량 줄이기 RAM에 많은 텍스트를 효율..
-
고성능 파이썬 Chapter 10 - 클러스터와 작업 큐STUDY/고성능 파이썬 2025. 2. 2. 22:20
들어가며해당 챕터는 실습 보다는 정보 전달이 더 큰 내용인 것 같다. 현재 회사에서는 kubernetis 오케스트레이션을 이용하여 서버 자원을 관리하고 있으므로, 해당 내용은 참고만 하면 될 것 같다. 클러스터는 대표적인 Scale Out 방식이다. 예전 분산시스템 수업에서 배웠던 베오울프, 맵 리듀스 등이 나와서 친숙했다.이 장에서 배울 내용- 클러스터가 유용한 이유- 클러스터링에 등는 비용- multiprocessing 해법을 클러스터를 사용한 해법으로 바꾸는 방법- IPython 클러스터의 작동 방식- Dask와 Swifter를 사용한 팬더스 병렬화 방법- NSQ가 강건한 프로덕션 시스템 구축에 도움이 되는 이유클러스터링은 멀티 프로세싱과 유사한 동작 방식을 생각하면 된다. IPython Paral..
-
고성능 파이썬 Chapter 09 - Multiprocessing 모듈 part 2 (9.5절~)STUDY/고성능 파이썬 2025. 1. 19. 18:34
9.5절 부터의 내용은 생성된 프로세스간의 통신을 하는 내용이다.원하는 값을 찾는걸 다른 프로세스에서 끝냈다면, 더 진행할 일이 없을텐데 다른 프로세스의 진행 상황을 알지 못하고 수행한다면 모든 프로세스가 종료 되어야 비로소 프로그램이 종료되게 되기 때문이다.프로세스간의 통신으로 인한 오버헤드 또한 고려사항이다. 오히려 오버헤드가 많아지면서 더 느려지는 상황이 생길 수 있다. 이 책에서 제안하는 방식은MPI(via MPI4PY, 책에서 다루지는 않음), pool 사용, flag 사용, redis, Raw Value, mmap을 이용한 방법이다.또한 위의 방식들은 단순히 flag 값만을 주고 받았는데numpy 배열 전체를 프로세스간 공유하여 메모리를 효율적으로 이용하는 방법에 대해서도 다룬다. (np.fr..
-
고성능 파이썬 Chapter 09 - Multiprocessing 모듈 part 1 (~9.4절)STUDY/고성능 파이썬 2025. 1. 12. 15:47
들어가며파이썬은 기본적으로 1개의 CPU 코어만을 사용하도록 되어 있어서 이번 과를 통해 더욱 효율적으로 프로그램을 돌릴 수 있도록 해주는 방법을 배울 수 있기를 바란다.이 장에서 배울 내용- multiprocessing 모듈이 제공하는 기능- 프로세스와 스레드의 차이- 프로세스 풀의 적절한 크기를 정하는 방법- 작업 처리를 위해 영속적이지 않은 큐를 사용하는 방법- 프로세스 간 통신의 비용과 효과- 여러 CPU를 사용해 numpy 데이터를 처리하는 방법- joblib을 사용해 병렬화하고 캐시된 과학 계산 작업을 단순화하는 방법- 데이터 손실을 막기 위해 락을 사용해야 하는 이유파이썬 프로그램을 실행시키면 기본적으로 1개의 CPU가 모든 동작을 수행한다. 하지만 2000년대 후반 이후 거의 모든 CPU는..
-
고성능 파이썬 Chapter 08 - 비동기 I/OSTUDY/고성능 파이썬 2025. 1. 5. 16:16
들어가며최근 회사에서 비동기 프로그램을 작성하면서 비동기 프로그램에 대한 기초와 코드를 잘 작성하는 방법에 대한 고민이 있었는데, 이 장에서 해소되길 바란다 ㅎㅎ이 장에서 배울 내용- 동시성의 정의와 유용성- 동시성과 병렬성의 차이- 동시에 처리할 수 있는 작업과 그렇지 못한 작업- 동시성의 여러 패러다임- 동시성의 이점을 살리기에 적합한 시점- 동시성을 사용해 프로그램의 속도를 빠르게 하는 방법먼저 이 장에서 말하는 "동시"는 실질적으로 동시는 아니고, 1개의 CPU(코어)가 적절한 컨텍스트 스위칭을 통해 동시에 작업을 수행하는 것을 의미하는 것을 알아둬야 한다. (여러 프로세서가 동작을 하는 경우는 9장에서 소개될 것 같다. --> 이것이 "병렬성") 프로그램에는 CPU가 동작하는 부분의 코드 (C..
-
고성능 파이썬 Chapter 7 실습STUDY/고성능 파이썬 2024. 12. 30. 22:44
macbook air m2 모델로 Chapter 7 실습의 일부를 해보았다.julia를 그냥 실행시키면 2.3초가 걸린다. pypy로 컴파일 후에 실행하면 4.3초가 걸린다...이렇게 된 원인을 생각해보면 x86기반의 기계어로 컴파일 된 후에 로제타가 돈 것이 아닐까 추측이 된다.또한, 책에 따르면 두번째 수행이 더 빨라져야 하는데, apple silicon에서는 다른 결과가 생겼다. Cpython을 이용하면 1.87로 조금 더 빨라진다.
-
고성능 파이썬 Chapter 07 - C 언어로 컴파일하기STUDY/고성능 파이썬 2024. 12. 22. 17:43
들어가며파이썬을 처음 공부할때 파이썬의 장점으로 C언어와 궁합이 좋다는 얘기를 많이 들었던 것 같다. 특정 부분은 C언어로 구현하여 속도를 향상시키고, 다른 부분은 python으로 실행시켜 빠르게 작성하여 두 언어의 장점을 모두 사용할 수 있다는 점이었다. 그러나 이후 직접 C언어로 파이썬 코드의 특정 부분을 작성해본 적이 없고, 어떻게 해야하는지도 잘 몰랐다. 이번 7장에서는 해당 부분에 대해서 다양한 접근 방식으로 c언어 코드를 이용하는 방법을 알려준다. 이 장에서 배울 내용- 파이썬 코드를 저수준에서 동작하도록 만드는 방법- JIT 컴파일러와 AOT 컴파일러의 차이점- 순수 파이썬 코드보다 컴파일된 파이썬 코드가 좋은 이유- 타입 어노테이션이 파이썬 코드의 성능에 도움이 되는 이유- C나 포트란으로..
-
고성능 파이썬 Chapter 06 - 행렬과 벡터 계산STUDY/고성능 파이썬 2024. 12. 14. 17:36
들어가며인공지능의 연산이 기본적으로 행렬 연산이기 때문에 python을 처음 접할때부터 별 생각 없이 사용했던 numpy 모듈에 대한 이야기가 나온다. numpy는 cpu에서 수행하도록 설계되어 있는데, 요즘은 jax라는 라이브러리에서 gpu를 이용한 행렬 연산을 numpy와 비슷한 문법으로 쓸 수 있게 해주어서 관심을 가지고 보고 있다.이 장에서 배울 내용- 벡터 연산 병목 지점의 위치- 계산 과정 중에 CPU를 효율적으로 사용하는지 알아볼 수 있는 도구- 산술 계산에서 numpy가 순수 파이썬보다 더 빠른 이유- 코드 내에서 메모리 할당을 추적하는 법이번 챕터에서 최적화 할 코드는 확산 방정식이다. 요즘 생성형 AI에서 많이 사용되는 바로 그 diffusion의 forward path이다.해당 함수를..