개발자 이야기 20

[jq] 특정 필드 추출 / 필터링

개요 일을 하다보면, json 형식의 문서를 많이 다룹니다. 어떤 처리를 하고자 한다면 파이썬 프로그램 등을 작성하는 등 코딩을 하는 수고를 해야하지만, 단순히 내용을 봐야하는 것이라면 코딩을 하기에 매우 번거로울 수 있습니다. 처음에 jq라는 툴을 알았을 때는 단순히 pretty print를 해서 볼 수 있는 툴이라고만 생각을 했었는데, 생각보다 많은 기능이 있었습니다. 우선 이번 글에서는 어떤 json파일을 조회할 때, 사용할 수 있는 방법을 간단히 정리 합니다. 방법1) pretty print 형태로 출력하기 MacBookPro:~/ $ cat ./temp.json [7:07:17] {"a":1, "b":2, "c":3} {"a":1, "b":2, "c":3} {"a":1, "b":2, "c":3}..

Tools&Library 2023.12.29

[ray] 파이썬 병렬 처리 라이브러리

개요 파이썬에서 병렬처리를 쉽게 해줄 수 있는 라이브러리 입니다. 단순히 병렬처리 뿐만 아니라 머신러닝을 위한 다양한 기능이 있는 파이토치와 같은 프레임워크를 지향하는 것 같습니다. 저는 간단히 멀티프로세싱 로직만 써보고 해당 내용을 정리하고자 합니다. 설치 pip를 이용해서 간단히 설치해줍니다. pip install ray 사용법 - 1 가장 기본적인 사용법을 정리합니다. 상황은 5개의 파일이 있고, 하나의 파일을 처리하는데 5초가 걸리는 시나리오를 생각합니다. 순차방식으로 처리를 하면 대략 25초 정도의 시간이 걸려야 하지만, 이를 병렬처리를 통해 효과적으로 처리해보겠습니다. 코드 import ray import time ray.init @ray.remote def process_task(file_p..

Tools&Library 2023.12.15

백준 / 13305 / 주유소

문제 https://www.acmicpc.net/problem/13305 도시마다 주유소가 있고, 가격은 다 다르다. 도시에서 도시를 이동할 때 거리가 있는데 거리만큼 이동하기 위해서 기름이 필요하다. 그래프로 보자면, 노드가 도시이고, 해당 주유소의 가격을 나타낸다. 에지에 있는 값은 도시간 이동에 필요한 거리이다. 처음 도시에서 마지막 도시까지 이동할 때 가장 최소비용을 구하는 문제이다. 접근방식 가격이 5 -> 2 -> 4 -> 1 순으로 되어있다는 사실을 알았을 때, 도시를 한칸씩 이동하면서 현재보다 기름값이 싼 도시를 구합니다. 이 도시까지 이동할 때 필요한 기름을 현재 도시에서 다 넣고 이동하면 될 것이라고 생각했습니다. 그래서, 처음에는 이중루프를 생각하고, 현재 도시보다 싼 도시가 나올때까..

Algorithm/Greedy 2023.11.01

백준 / 1789 / 수들의 합

문제 https://www.acmicpc.net/problem/1789 서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까? 접근방식 처음에 너무 어렵게 생각해서 좀 막혔던 것 같습니다. 가장 많은 자연수의 합으로 구성되려면 무조건 1부터 차례대로 더하면서 S가 넘어서는 시점에서의 숫자 개수를 알아내면 되는 것이었습니다. (풀이) #!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys S = int(sys.stdin.readline()) cnt = 0 total = 0 while True: if total == S: break elif total > S: cnt -= 1 break cnt += 1 total += cn..

카테고리 없음 2023.11.01

백준 / 1541 / 잃어버린 괄호

문제 https://www.acmicpc.net/problem/1541 숫자와 +, - 로 구성된 수식이 있다고 했을 때, 적당히 괄호를 쳐서 수식의 계산 값이 최소가 되도록 괄호의 위치를 결정하는 문제 실제로 괄호의 위치를 구할 필요는 없고, 괄호가 있다고 했을 때 계산값이 최소가 되기만 하면 된다. 접근방식 직관적으로 +,-로만 구성되어있다고 하면 연속된 +항을 모두 괄호로 묶어서 먼저 계산을 한다. 그다음 -만 남을텐데, -는 무조건 왼쪽에서 오른쪽으로 순서대로 빼주는 것이 최소가 된다. 생각해보면, 최소가 되려면 - 뒤에 있는 값은 무조건 커야 큰 수를 뺄 수 있다. 그리고 수식에 -로만 구성이 되어있다고 하면 일부러 괄호를 쳐서 작은 값을 만들어서 뺄 필요는 없다. 예) 2-2-2 = -2 지만..

Algorithm/Greedy 2023.10.13

백준 / 1931 / 회의실 배정

문제 https://www.acmicpc.net/problem/1931 회의실은 하나이고, 시작과 끝시간이 명시된 회의가 N개 있다고 하자. 겹치지 않게 잘 배열하여 최대로 진행할 수 있는 회의의 개수를 찾는 문제 접근방식 1) 시작시간을 1차키, 회의시간을 2차키로 하여 정렬 후 탐색 - 가장 빠르게 개최되는 회의 중, 회의시간이 짧은 것을 선택해 나가는 방식 - 모든 시작시간을 대상으로 N번 탐색을 해야하므로 O(N^2)복잡도가 생김 - 당연히 시간 초과 2) 회의시간순으로 정렬하여 가장 짧은 시간회의부터 선택 - 짧은 것 먼저 선택하다보면, 다음 회의를 선택할 때 겹치는 지 여부를 판단할 때 조건이 복잡해진다. - 또한, 선택된 회의가 여러개라면 루프를 돌거나 정렬한 상태로 유지를 해야하는데 이게 ..

Algorithm/Greedy 2023.10.13

백준 / 2217 / 로프

문제 https://www.acmicpc.net/problem/2217 N개의 로프가 있을 때, 각 로프별 최대로 들어올릴 수 있는 무게가 주어졌다고 하자. 로프를 여러개 사용하는 경우 균등하게 무게가 배분된다고 할때, 최대로 들어올릴 수 있는 무게를 구한다. 접근방식 로프가 감당할 수 있는 무게를 내림차순으로 정렬을 하게 되면, 첫번째 무게가 로프 1개를 사용했을 때 들 수 있는 최대 무게가 됩니다. 다음으로 첫번째, 두번째 두개의 로프를 사용한다고 했을 때 두번째 로프의 무게에 2를 곱해주면 두 개의 로프를 사용해서 들 수 있는 최대 무게가 됩니다. 다음으로 세번째 로프의 경우, 3을 곱해주면 세개의 로프를 사용해서 들 수 있는 최대 무게가 됩니다. 이런 방법으로 N까지 N개의 로프를 사용했을 때 들..

Algorithm/Greedy 2023.10.12

Serving LLM API

개요 생성 모델을 개발하다보면, 내가 만든 모델을 테스트 해볼 수 있는 WebUI나 Restful API를 만들어야 하는 상황이 오게 됩니다. 요즘에는 오픈소스가 매우 잘 되어있어서 이런 기능이 이미 잘 만들어져 있는 것을 쉽게 찾아볼 수 있습니다. 그중에서도 FastChat 프로젝트를 소개하고 간단히 알아보겠습니다. FastChat? 공식 페이지는 아래와 같습니다. https://lmsys.org/about/ About | LMSYS Org LMSYS Org, Large Model Systems Organization, is an organization missioned to democratize the technologies underlying large models and their system i..

Reward Gaming in Conditional Text Generation

RM모델이 취약해질 수 있는 상황을 3가지 시나리오로 설정하고, 실제로 그런지 확인하기 위해 가상태스크(synthetic example)와 실제 태스크(Real-world example)로 구분하여 실험을 진행하였습니다. 가상 태스크는 [8 X 8]행렬에 주어진 규칙을 만족하도로 숫자를 채워 넣는 수도쿠(sudoku) 문제를 사용하였고, 실제 태스크는 요약과 번역 태스크를 사용합니다. 특히, 수도쿠 문제는 [1 x 8] 1차원 배열로 형식을 변경하고, 36개의 숫자(힌트)가 미리 주어졌을 때, 나머지 37~80까지 숫자를 생성하는 형태로 문제를 정의합니다. Reward gaming은 부적절한 패턴이 높은 보상을 갖게 되는 경우에 발생하는 현상이라고 정의합니다. Reward gaming이 발생하는 3가지 ..

Papers 2023.07.21

평균, 분산, 표준편차

평균(mean, average) 어떤 집단을 대표하는 값 중의 하나로, 모든 원소의 값을 다 더한 후 원소의 개수로 나누어주는 값으로 정의됩니다. 분산(Variance) 분산도 평균의 일종으로, 편차를 제곱한 후 이들을 모두 더한 뒤 원소의 개수로 나누어주는 값으로 정의됩니다. 즉, "편차의 제곱의 평균"이 된다. 편차는 "원소의 값 - 평균"으로 각각의 원소값이 평균으로부터 얼마나 떨어져 있는지를 나타냅니다. 표준편차(Standard deviation) 표준편차는 분산을 제곱근한 값이 됩니다. 편차를 모두 더하면 0이 되기 때문에, 분산은 제곱을 한 후 평균을 구하게 됩니다. 제곱을 했으니, 다시 원래 스케일로 돌리기 위해서 제곱근을 해주게 됩니다. 예제 어떤 두 그룹 A,B가 있고, 각각 10명의 키..

Statistics 2023.07.15