본문 바로가기

전체 글74

[TIL] golang buffer 복사 golang에서 buffer를 io.ReadSeeker 인터페이스로 복사해줄 일이 생겼다. buffer 내용은 이후에 읽고 수정하기 때문에 consume하면 안된다. 내부 데이터만 복사해서 넘겨줘야 했다. #fail 1: bytes로 reader 만들어주기 data := bytes.NewReader(rw.Buffer().Bytes()) bytes slice를 그대로 reader로 넘겨주었는데, 이 데이터를 수정하는 시점과 data를 읽는 시점에서 timing issue가 생겼다. data를 읽는 함수가 goroutine으로 async로 구현되어 있기 때문이다. Buffer의 bytes 설명을 보면 다음과 같이 적혀 있다. The slice aliases the buffer content at least .. 2023. 12. 21.
[TIL] javascript html parser API로부터 html string을 받아와서 동적으로 파싱해야 하는 기능이 있었다. 이 기능 구현하는 동안의 시행착오를 기록해두고자 한다. #1. regex 처음 시도한 방법은 regex이다. Regular expression을 잘 사용하면 빠른 시간 안에 string에서 유용한 정보를 추출하는 것이 가능하고, filter out시키거나 replace 등 다양한 케이스에 사용하기 때문에 이전에도 많이 사용했던 방법이다. const entities = html.split("\\n") .map(entity => { \\s*(.+?)\\s* const id = [...entity.matchAll(/id='entity-(\\w+)'/g)]; if(!id || id.length === 0) return ["", .. 2023. 12. 16.
[TIL] aws codebuild에서 docker image pull rate limit 해결하기 오늘 AWS codebuild에서 docker image를 빌드할 때 pull rate limit 에러가 났는데 이를 해결한 과정을 적어두고자 한다. Context CI/CD를 위해 code pipeline을 붙여놓고, code pipeline에 code build를 포함시켜서 docker image를 build하는 과정을 포함시켰다. Base image는 debian:bookworm-slim 이다. Problem 오늘 많은 코드를 머지시켰고, CD pipeline이 많이 돌았다. 머지 후 code build에서 docker image를 빌드하는 도중 다음과 같은 에러가 발생했다. #4 ERROR: failed to copy: httpReadSeeker: failed open: unexpected sta.. 2023. 12. 15.
[TIL] mig 해제하기 nvidia a100 80GB gpu를 사용하다 mig를 해제하는 과정에서 생긴 이슈를 정리해 두고자 한다. MIG MIG(Multi-Instance GPU)는 NVIDIA H100, A100, A30 GPU에 적용된 기술이다. MIG는 GPU를 각각 자체 고대역폭 메모리, 캐시, 컴퓨팅 코어를 갖추고 완전히 격리된 최대 7개의 인스턴스로 파티셔닝할 수 있다. MIG를 이용하면 쿠버네티스에서 사용할 때 쓰루풋을 늘릴 수 있다. 기존에는 nvidia.com/gpu 하나당 하나의 모델을 할당할 수 있다. A100을 예로 들면, 80GB의 메모리에 하나의 모델로 이루어진 pod만 띄울 수 있다는 것이다. 이 80GB의 메모리를 모두 사용한다면 문제없지만, 5GB의 메모리만을 사용할 때에는 75GB의 메모리가 .. 2023. 12. 14.