Fail-fast 전략, 실수를 빠르게 찾아내는 방법

안녕하세요. 오늘 이야기할 주제는 ‘Fail-fast’라는 전략인데요, 이는 소프트웨어 개발에서 많이 사용되는 개념입니다. Fail-fast는 ‘빠르게 실패하다’라는 말 그대로, 오류를 발생하게 하고 이를 빠르게 수정하는 방법을 지향하는 것을 의미합니다.

소프트웨어 시스템을 운영하다 보면 여러 가지 오류가 발생하곤 합니다. 이런 오류 중 일부는 무시하거나 넘어가도 크게 문제가 되지 않지만, 일부 오류는 시스템에 큰 피해를 줄 수 있습니다. Fail-fast 전략은 이러한 큰 문제를 초래할 수 있는 오류를 조기에 감지하고, 그에 따른 대응을 즉시하기 위한 것입니다.

예를 들어, 프로그램에서 잘못된 입력 값이 들어오면, 해당 프로그램은 즉시 오류를 반환하고 작동을 중단합니다. 이렇게 해서 잘못된 입력 값이 프로그램 내에서 더 이상 전파되는 것을 방지하며, 문제가 더 커지는 것을 막습니다.

이런 Fail-fast 전략은 테스트 주도 개발(Test-Driven Development, TDD)과 밀접한 관계가 있습니다. TDD에서는 먼저 테스트 케이스를 작성하고, 이를 통과하는 코드를 개발합니다. 그렇게 해서 개발 초기 단계에서부터 오류를 발견하고 수정하게 됩니다.

하지만 모든 상황에서 Fail-fast가 최선의 전략인 것은 아닙니다. 예를 들어, 네트워크 통신과 같이 일시적인 오류가 발생할 수 있는 상황에서는, Fail-fast보다는 재시도하거나 대체 경로를 제공하는 등의 복구 전략이 필요할 수 있습니다.

결국, Fail-fast는 소프트웨어 개발에서 오류를 빠르게 찾아내고 대응하는 중요한 전략입니다. 하지만 상황에 따라 적절한 전략을 선택해야 하며, 항상 Fail-fast가 최적의 해결책은 아닙니다.

GPTQ-for-LLaMa

GPTQ-for-LLaMa는 Google AI의 LLaMa 대규모 언어 모델에 대해 특별히 설계된 양자화 프레임워크입니다. GPTQ는 “Gradient-Perturbed Training for Quantization”의 약자이며 모델 가중치를 양자화하여 메모리 사용량과 계산 비용을 줄이는 데 사용할 수 있습니다.

LLaMa는 175억 개의 매개변수를 가진 방대한 언어 모델입니다. 텍스트 생성, 언어 번역, 다양한 종류의 창의적인 콘텐츠 작성, 유익한 방식으로 질문에 답변할 수 있습니다. 그러나 LLaMa와 같은 대규모 언어 모델은 메모리 집약적이고 계산 비용이 많이 들 수 있습니다.

GPTQ-for-LLaMa를 사용하면 LLaMa 모델의 메모리 사용량과 계산 비용을 줄일 수 있습니다. 이를 통해 LLaMa를 저전력 장치에서 실행하고 더 많은 요청을 처리할 수 있습니다.

GPTQ-for-LLaMa는 아직 개발 중이지만 LLaMa 모델의 메모리 사용량과 계산 비용을 줄이는 데 효과적인 것으로 나타났습니다. 또한 LLaMa 모델의 성능 저하가 적은 것으로 나타났습니다.

GPTQ-for-LLaMa는 LLaMa 모델의 메모리 사용량과 계산 비용을 줄이는 데 유용한 도구입니다. 또한 LLaMa 모델을 다양한 장치에서 실행할 수 있으므로 더 많은 사용자에게 액세스할 수 있습니다.

JAX란 무엇인가요?

JAX란 무엇인가요?
JAX는 고성능 머신 러닝 연구를 위해 결합된 Autograd와 XLA입니다.

업데이트된 버전의 Autograd를 통해 JAX는 네이티브 Python과 NumPy 함수를 자동으로 구분할 수 있습니다. 루프, 브랜치, 재귀, 클로저를 통해 차별화할 수 있으며, 파생 함수의 파생 함수를 취할 수 있습니다. 정방향 미분뿐만 아니라 그라데이션을 통한 역방향 미분(일명 역전파)도 지원하며, 이 두 가지를 임의의 순서로 구성할 수 있습니다.

새로운 기능은 JAX가 XLA를 사용하여 GPU와 TPU에서 NumPy 프로그램을 컴파일하고 실행한다는 것입니다. 컴파일은 기본적으로 내부에서 이루어지며 라이브러리 호출은 적시에 컴파일되고 실행됩니다. 그러나 JAX를 사용하면 단일 함수 API인 jit를 사용하여 자체 Python 함수를 XLA에 최적화된 커널로 적시에 컴파일할 수도 있습니다. 컴파일과 자동 차별화를 임의로 구성할 수 있으므로 Python을 벗어나지 않고도 정교한 알고리즘을 표현하고 최대 성능을 얻을 수 있습니다. pmap을 사용하면 여러 개의 GPU나 TPU 코어를 한 번에 프로그래밍하고 전체를 통해 차별화할 수도 있습니다.

조금 더 자세히 살펴보면 JAX가 실제로 컴포저블 함수 변환을 위한 확장 가능한 시스템이라는 것을 알 수 있습니다. grad와 jit는 모두 이러한 변환의 인스턴스입니다. 그 외에도 자동 벡터화를 위한 vmap과 여러 가속기의 단일 프로그램 다중 데이터(SPMD) 병렬 프로그래밍을 위한 pmap이 있으며, 앞으로 더 많은 기능이 추가될 예정입니다.

https://github.com/google/jax

macOS에서 C 언어를 어셈블리어로 컴파일

macOS에서 C 언어를 어셈블리어로 컴파일하려면 GCC(GNU Compiler Collection) 또는 Clang 컴파일러를 사용할 수 있습니다. macOS에는 기본적으로 Clang이 설치되어 있지만, GCC를 설치하려면 Homebrew와 같은 패키지 관리자를 사용할 수 있습니다.

아래는 macOS에서 C 언어를 어셈블리어로 컴파일하는 방법입니다.

  1. C 프로그램이 있는 파일을 준비하세요. 예를 들어, 파일 이름이 hello.c라고 가정하겠습니다.
  2. 터미널을 열고 아래와 같은 명령어를 입력하여 C 소스 코드를 어셈블리어로 컴파일하세요.Clang을 사용하는 경우:
clang -S -O0 -mllvm --x86-asm-syntax=intel hello.c -o hello.s

GCC를 사용하는 경우:

gcc -S -O0 -masm=intel hello.c -o hello.s

여기서 -S 옵션은 컴파일러에게 어셈블리어로 컴파일하도록 지시합니다. -O0 옵션은 최적화를 비활성화합니다. 최적화를 끄면 더 읽기 쉬운 어셈블리 코드를 얻을 수 있습니다. -mllvm --x86-asm-syntax=intel (Clang) 또는 -masm=intel (GCC) 옵션은 어셈블리어를 인텔 구문으로 출력하도록 설정합니다.

위의 명령어를 실행한 후, hello.s 파일에 어셈블리어 코드가 생성됩니다. 이 파일을 열어 어셈블리 코드를 확인할 수 있습니다.

Hello C 코드

#include <stdio.h>

int main(){
	printf("Hello\n");
	return 0;
}

어셈블리어

	.section	__TEXT,__text,regular,pure_instructions
	.build_version macos, 13, 0	sdk_version 13, 0
	.intel_syntax noprefix
	.globl	_main                           ## -- Begin function main
	.p2align	4, 0x90
_main:                                  ## @main
	.cfi_startproc
## %bb.0:
	push	rbp
	.cfi_def_cfa_offset 16
	.cfi_offset rbp, -16
	mov	rbp, rsp
	.cfi_def_cfa_register rbp
	sub	rsp, 16
	mov	dword ptr [rbp - 4], 0
	lea	rdi, [rip + L_.str]
	mov	al, 0
	call	_printf
	xor	eax, eax
	add	rsp, 16
	pop	rbp
	ret
	.cfi_endproc
                                        ## -- End function
	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.asciz	"Hello\n"

.subsections_via_symbols

주어진 어셈블리 코드를 실행하려면 먼저 해당 코드를 컴파일하고 링크해야 합니다. 이 과정에서 다음과 같은 단계를 거칩니다.

어셈블리 코드를 파일에 저장합니다. 예를 들어, hello.s라는 파일로 저장합니다.

터미널을 열고, 해당 어셈블리 파일을 목적 파일로 컴파일합니다. 이 때, 아래와 같은 명령어를 사용합니다.

gcc -c hello.s -o hello.o

이 명령어는 hello.s 파일을 hello.o라는 목적 파일로 컴파일합니다.

이제 목적 파일을 실행 파일로 링크합니다. 다음과 같은 명령어를 사용합니다.

gcc hello.o -o hello

이 명령어는 hello.o라는 목적 파일을 hello이라는 실행 파일로 링크합니다.

실행 파일을 실행합니다.

./hello
  1. 이 명령어를 실행하면, 프로그램이 실행되고 “Hello” 문자열이 출력됩니다.

참고로, 이 과정은 x86-64 아키텍처 기반의 macOS 또는 Linux 시스템에서 작동합니다. 다른 시스템이나 아키텍처에서 실행하려면 명령어와 옵션을 조정해야 할 수도 있습니다.

정리하는 뇌

“정리하는 뇌” / 영문제목 “The Organized Mind: Thinking Straight in the Age of Information Overload”은 다니엘 J. 레비튼이 쓴 책으로, 일상 생활에서 우리가 마주치는 지속적인 정보 흐름을 관리하는 전략을 제공하고 정보 과부하 시대에서 살아가는 데에 대한 문제점을 다룹니다.

레비튼은 신경과학, 심리학 및 경제학 분야의 연구를 인용하여 우리 뇌가 정보를 처리하고 분류하는 방식에 대해 설명하며, 이것이 우리의 결정력, 문제 해결 능력 및 집중력에 어떤 영향을 미치는지에 대해 논의합니다. 또한 기술이 우리의 조직력과 집중력에 미치는 영향을 논하고, 산재한 정보를 관리하고 우선순위를 정하며 생산성을 향상시키는 실용적인 팁을 제공합니다.

마음의 조화, 시간 관리 및 단순성이 조직된 뇌를 얻는 데에 얼마나 중요한지 강조합니다. 레비튼은 할 일 목록을 작성하거나 디지털 파일을 정리하는 등의 정보 처리 시스템을 개발하도록 독자를 권장하며, 휴식을 취하고 안정성과 창의성을 촉진하는 활동에 참여하도록 권장합니다.

또한 명확하고 조직적인 물리적 환경의 이점을 탐구합니다. 레비튼은 혼란스러운 것이 어떻게 압도적인 것이 되는지에 대한 과학적 이유를 논하며, 물리적 공간을 정리하고 조직하는 시스템을 만드는 방법에 대해 논합니다.

주요 테마 중 하나는 우리 뇌가 제한된 자원을 가지고 있으며, 이를 현명하게 사용해야 한다는 것입니다. 레비튼은 우리는 언제나 생산적일 수 없으며, 정신적인 에너지를 보충하기 위해 휴식, 안정성 및 창의성에 우선순위를 두어야 한다고 주장합니다.

기술이 우리의 조직력과 집중력에 미치는 영향을 탐구합니다. 레비튼은 디지털 장치의 장단점을 논하며, 알림을 끄고 이메일을 확인하는 지정된 시간을 만드는 등의 방법으로 산재한 정보를 관리하는 방법에 대한 실용적인 팁을 제공합니다.

전반적으로 마음의 조화, 시간 관리 및 단순성을 달성하여 현대 사회의 복잡성을 극복하고 인지 기능을 향상시키기 위한 유용한 통찰력과 실용적인 조언을 제공합니다. 이 책은 정보 과부하를 관리하고 스트레스를 줄이며, 모든 삶의 영역에서 생산성과 창의성을 증가시키는 로드맵을 제공합니다.

가장 흥미로운 부분 중 하나는 레비튼의 결정력에 대한 논의입니다. 그는 우리가 내리는 다양한 결정 유형과 결정에 영향을 미칠 수 있는 인지적 편견에 대해 설명합니다. 다양한 정보 출처에서 정보를 수집하고 결정의 장기적 영향을 고려하기 위해 “10-10-10” 규칙을 사용하는 등, 결정력을 향상시키는 실용적인 팁을 제공합니다.

스트레스가 인지 기능에 미치는 영향을 탐구합니다. 그는 스트레스가 어떻게 해로울 수 있는지에 대한 과학적 이유를 논하며, 신체 운동을 하거나 자연에서 시간을 보내는 등의 스트레스를 줄이는 방법에 대한 실용적인 팁을 제공합니다.

“The Organized Mind”은 현대 사회의 복잡성을 극복하고 인지 기능을 향상시키기 위한 유용한 통찰력과 실용적인 조언을 제공하는 책입니다. 이 책은 정보 과부하를 관리하고 스트레스를 줄이며, 모든 삶의 영역에서 생산성과 창의성을 증가시키는 로드맵을 제공합니다.

Github 개인 액세스 토큰 만들기 :: 깃허브

개인 액세스 토큰 사용

You can create a personal access token to use in place of a password with the command line or with the API.

노트:

  • If you use GitHub CLI to authenticate to GitHub on the command line, you can skip generating a personal access token and authenticate via the web browser instead. For more information about authenticating with GitHub CLI, see gh auth login.
  • Git Credential Manager is a secure, cross-platform alternative to using personal access tokens (PATs) and eliminates the need to manage PAT scope and expiration. For installation instructions, see Download and install in the GitCredentialManager/git-credential-manager repository.

개인 액세스 토큰(PAT)은 GitHub API 또는 명령줄 을 사용할 때 GitHub에 인증하는 데 암호 대신 사용할 수 있습니다.

PAT를 사용하여 SAML SSO를 사용하는 Organization이 소유한 리소스에 액세스하는 경우 PAT를 인증해야 합니다. For more information, see ” About authentication with SAML single sign-on ” and ” Authorizing a personal access token for use with SAML single sign-on ” in the GitHub Enterprise Cloud documentation.

As a security precaution, GitHub automatically removes personal access tokens that haven’t been used in a year. To provide additional security, we highly recommend adding an expiration to your personal access tokens.

토큰을 사용하여 할당되지 않은 scopes can only access public information repo. For more information, see ” Available scopes “.

토큰 만들기

  1. 아직 확인하지 않은 경우 이메일 주소를 확인 합니다.
  2. 모든 페이지의 오른쪽 상단에서 프로필 이미지를 클릭한 다음 Settings(설정) 를 클릭합니다.
  3. In the left sidebar, click Developer settings .
  4. 왼쪽 사이드바에서 Personal access tokens(개인 액세스 토큰) 를 클릭합니다.
  5. Generate new token 을 클릭합니다.
  6. 토큰에 알기 쉬운 이름을 지정합니다.
  7. To give your token an expiration, select the Expiration drop-down menu, then click a default or use the calendar picker.
  8. 이 토큰에 부여할 범위, 즉 권한을 선택합니다. 토큰을 사용하여 명령줄에서 리포지토리에 액세스하려면 repo 를 선택합니다.
  9. Generate token 을 클릭합니다.경고 : 토큰은 비밀번호처럼 취급하고 비밀로 유지하십시오. API를 사용하는 경우 토큰을 프로그램에 하드 코딩하는 대신 환경 변수로 사용하십시오.
  10. To use your token to authenticate to an organization that uses SAML single sign-on, authorize the token. For more information, see ” Authorizing a personal access token for use with SAML single sign-on ” in the GitHub Enterprise Cloud documentation.

명령줄에서 토큰 사용

토큰을 받으면 HTTPS를 통해 Git을 조작할 때 암호 대신 해당 토큰을 입력할 수 있습니다.

예를 들어, 명령줄에서 다음을 입력할 수 있습니다.

$ git clone https://github.com/username/repo.git
Username: your_username
Password: your_token

개인 액세스 토큰은 HTTPS Git 작업에만 사용할 수 있습니다. SSH 원격 URL을 사용하는 리포지토리의 경우 원격을 SSH에서 HTTPS로 전환 해야 합니다.

사용자 이름과 암호를 묻는 메시지가 표시되지 않으면 자격 증명이 컴퓨터에 캐시되었을 수 있습니다. 이전 암호를 토큰으로 교환하도록 키체인에서 자격 증명을 업데이트 할 수 있습니다.

Instead of manually entering your PAT for every HTTPS Git operation, you can cache your PAT with a Git client. Git will temporarily store your credentials in memory until an expiry interval has passed. You can also store the token in a plain text file that can read before every request. 자세한 내용은 Git에 GitHub 자격 증명 캐싱 을 참조하십시오.

참고 링크

안경닦는 천

  • 눈가에 무엇인가 아른거린다.
  • 시선을 돌리면 따라오지 않고 고개를 돌리면 따라오는걸로 봐서는
  • 안경에 뭐가 묻은것이 확실하다.
  • 내 몸은 뇌가 시키지도 않는데 책상 첫번째 서랍을 열고 있다.
  • 그 안에 안경닦는 천이 있기 때문이다.
  • 보통은 안경닦는 천이 그리 깨끗하지 않다.
  • 최근 안경을 새로 맞춘 관계로 아주 깨끗한 안경닦는 천이 들어 있었다.
  • 왼쪽을 3번 오른쪽을 3번 닦고 나니 그래도 새로 사서 깨끗한 안경이 더욱더 깨끗해졌다.

영화 테넷을 보았다.

영화 테넷을 보았다.

CGV 극장

  • 테넷 개봉일 오전 9시 강남역 CGV에 가운데 좋은 자리를 예매했다.
  • 오전 9시까지 가기 위해 약간의 빠른 걸음을 걸으니 오랜전 회사에 출근하던 기억이 잠깐 났다.
  • 정시간에 출근했던 적이 거의 없었던거 같았는데 
  • 지금은 서두루고 있구나.

조조할인

  • 조조할인이라 7천원밖에 안했다.
  • 코로나로 한칸씩 띄어서 좌석을 배치했지만 극장안에 대략 15명 정도 밖에 없었다.
  • 더욱 좋은 점은 내 앞에는 아무도 없었다.

테넷

  • 테넷의 주인공은 자신의 목숨을 내던져 인류 멸망을 막는다는 이야기다.
  • 만약 인류의 절반이 망한다면 지금처럼 넓은 극장을 독차지 할 수 있겠다는 멍청한 생각이 문득 들었다.
  • 강남역은 뜨거운 햇살때문인지 코로나 때문인지 사람의 절반정도는 없는거 같았다.

알라딘 중고 서점

  • 영화를 다 보고 바로 옆 알라딘 중고 서점에서 무라카미 하루키의 “직업으로서의 소설가” 책을 샀다.
  • 중고 서적은 처음 사 보는데 그냥 새책 같아서 너무 놀랐다.
  • 아무리 봐도 중고책의 흔적을 찾을 수 없었다.
  • 책의 절반이 멸망해도 괜찮을 것같다는 또 멍청한 생각이 잠시 스쳐갔다.

바닐라 라떼

  • 내가 좋아하는 아이스 바닐라 라떼를 한잔 하면서 책을 읽어 볼까 했는데
  • 때마침 점심시간이라 카페에는 앉을 자리가 없을 정도였다.
  • 영화 테넷의 인버스와 만나는 현상같이 사람이 너무 많았다.

15키로 감량 성공 비법

15키로 감량 성공 비법

  • 2달하고 3일만에 15키로 감량했습니다.

저의 다이어트 철학

모든 음식을 먹을때 칼로리를 계산하여야 합니다.

  • 칼로리 계산은 아주 과학적인 감량 비법입니다.
  • 보통 남자의 경우 하루에 2000키로칼로리를 넘을면 안됩니다.
  • 나머지는 살로 간다고 보면 됩니다.
  • 감량을 할려면 하루 1500키로칼로리를 넘지 마세요.

배고픔을 참으면 안됩니다.

  • 배고픔은 참기가 어렵습니다.
  • 참지 말고 방울토마토나 삶은 계란을 수시로 먹습니다.
  • 물론 칼로리를 계산하여야 합니다.
  • 하루를 5번으로 나누어 식사를 해도 좋습니다.
  • 식사마다 300키로칼로리 이하로 먹으면 1500키로칼로리를 넘지 않을것 입니다.

음식의 맛은 잊어야 합니다.

  • 맛보다는 그냥 배를 채운다는 생각으로 음식을 접해야 합니다.
  • 배고픔에 단순히 적은 칼로리의 부피가 큰 음식으로 배를 채운다는 생각을 항상 하세요.

다이어트 동기

다이어트 방법

  • 다이어트 방법은 크게 3가지가 있습니다.
  • 식이조절 즉 먹는것을 줄여 뺴는 방법
  • 운동으로 빼는 방법
  • 식이조절과 운동을 병행하는 방법입니다.

저의 경험담

  • 그동안 20여년 동안 여러가지 방법을 해 왔습니다.
  • 저의 결론은 식이조절이 가장 효과적인 다이어트 방법이라는 것입니다.

운동이 다이어트에 힘든 이유

  • 운동으로 한달에 8키로정도 감량을 한적도 있었는데요
    • 한달동안 거의 매일 등산을 한적이 있었습니다.
    • 물론 8키로그램이 감량되었지만 무릎에 탈이 났고
    • 힘들기도 하지만 무었보다 많은 시간을 들여야 했습니다.
  • 운동을 하면 식욕이 너무 좋아지기 때문에
    • 운동과 함께 식이조절을 하기가 어렵습니다.
  • 결국 운동을 하여 몸은 건강해지지만 몸무게를 빼는 것은 별개의 문제가 되어갑니다.

식이조절의 방법은?

  • 탄수화물을 끊어야 합니다.
    • 탄수화물은 인슐린의 과도한 분배을 일으켜 계속 배가 고파지는 악순환에 빠질 수가 있습니다.
    • 또한 탄수화물과 더불어 같이 먹은 단백질이나 지방을 더 더욱 잘 흡수하게 도와주는 일을 합니다.

그럼 뭘 먹나요?

  • 저의 방법은
  • 기본 베이스는 닭가슴살입니다.
    • 요즘은 어디서나 진공팩으로 바로 먹을 수 있는 닭가슴살이 있습니다.
    • 대략 120그램 정도에 120키로 칼로리 밖에 되지 않습니다.
    • 최근에는 여러가지 맛으로 출시되고 있습니다.
    • 하지만 닭가슴살을 계속 먹기는 쉽지 않으니 마음의 준비가 필요합니다.
  • 중간중간 입이 심심하면 방울 토마토를 드세요
  • 삶은 계란을 항상 준비해서 배 고플때 하나씩 까 드세요.
    • 소금없이 그냥 드셔도 맛있습니다.
    • 물론 다이어트를 잘 하시고 계시다면요.

노브랜드에서 저렴하게 구입 가능한 다이어트 식품을 소개합니다.

  • 노브랜드 닭가슴살 : 양이 많고 가격이 저렴합니다.
  • 노브랜드 스파클링 탄산수
    • 제로칼로리 음료수입니다.
    • 매우 달고 탄산량도 괜찮습니다.
  • 노브랜드 크래미
  • 방울토마토
  • 양상추
  • 계란
  • 노브랜드 단호박 샐러드
    • 칼로리가 상당히 높으니 닭가슴살 먹을때 정말 한 숟가락만 조금씩 나눠드세요
    • 칼로리 주의하셔야 합니다.