Get it on Google Play


Wm뮤 :: 'AI' 카테고리의 글 목록

블로그 이미지
불펌때문에 드래그 방지 건것가지고
99% 다 공유되는 지식 가져와서 쓰는 글 아니냐 누가 보면 자기 지식 훔쳐가는줄 자기도 다 베껴온거일텐데
같은 소리 할거면 꾸역꾸역 블로그 찾아오지 말고 AI나 쓰쇼.
세상에 없는게 많아서 제로베이스에서 손수 연구하고 만들어서 정리해줬더니 이런 소리나 들어야 합니까?
모카쨩
@ahzkwid

Recent Comment

Archive


2025. 6. 7. 18:17 AI

 

 

 

게임이나 일반응용프램과 달리 AI쪽에서는 그래픽카드 처리속도보다 VRAM 크기가 중요하다

게임처럼 실시간 처리가 필요한게 아니니 처리속도야 시간을 들이면 해결될이지만

VRAM이 부족하면 로드 자체가 실패하기 때문

상용프로그램으로 개발할땐 엄청나게 커다란 문제이다

프로그램을 다운로드 받았는데 작동이 안 된다고 하면 곤란하지 않은가

 

 

 

그런데 일반 윈폼프로젝트에는 VRAM측정이 존재하지 않는다. Direct3D기반 프로젝트에서만 분석해주기 때문 

https://learn.microsoft.com/ko-kr/visualstudio/profiling/gpu-usage?view=vs-2022

 

 

그래서 이번엔 Nuget을 이용한 VRAM 측정방법을 소개하겠다

 

 

LibreHardwareMonitorLib를 쓸것이다

상업적 사용도 가능하단다

 

 

 

설치끝

 

 

 

아래코드를 넣어준다

https://gist.github.com/ahzkwid/a003bf0e6c9f3794d47b1296b3644a9d



using LibreHardwareMonitor.Hardware;
using System;
using System.Diagnostics;

namespace Ahzkwid
{
    internal class MemoryChecker
    {
        static Computer computer = null;
        public static Computer GetComputer()
        {
            if (computer == null)
            {
                computer = new Computer
                {
                    IsGpuEnabled = true
                };
                computer.Open();
            }
            return computer;
        }
         static List<IHardware> GPUHardwares()
        {
            computer = GetComputer();
            var hardwares= computer.Hardware.ToList().FindAll(hardware =>
            {
                if (hardware.HardwareType == HardwareType.GpuNvidia || hardware.HardwareType == HardwareType.GpuAmd || hardware.HardwareType == HardwareType.GpuIntel)
                {
                    return true;
                }
                return false;
            });
            return hardwares;
        }

        public static float RamUsed
        {
            get
            {
                float usad = 0;
                var process = Process.GetCurrentProcess();
                usad = process.PrivateMemorySize64 / (1024 * 1024);
                return usad;
            }

        }
        public static float VramFree
        {
            get
            {
                return VramTotal-VramUsed;
            }
        }
        public static float VramUsed
        {
            get
            {
                float usad = 0;
                foreach (var hardware in GPUHardwares())
                {
                    hardware.Update();

                    foreach (var sensor in hardware.Sensors)
                    {
                        var lowerName = sensor.Name.ToLower();
                        if (lowerName.Contains("memory") && lowerName.Contains("used") && lowerName.Contains("gpu"))
                        {
                            usad = (float)sensor.Value;
                            break;
                        }
                    }
                }
                return usad;
            }

            //computer.Close();
        }
        public static float VramTotal
        {
            get
            {
                float total = 0;
                foreach (var hardware in GPUHardwares())
                {
                    hardware.Update();

                    foreach (var sensor in hardware.Sensors)
                    {
                        var lowerName = sensor.Name.ToLower();
                        if (lowerName.Contains("memory") && lowerName.Contains("total") && lowerName.Contains("gpu"))
                        {
                            total = (float)sensor.Value;
                            break;
                        }
                    }
                }
                return total;
            }

            //computer.Close();
        }
    }
}

 

 

 

 

 

 

그리고 테스트할 코드 앞뒤로 아래와같이 변화량을 추적한다

왜냐하면 VRAM의 전체사용량만을 추적할뿐 프로세스가 얼만큼 차지하는지는 나오지 않기 떄문이다

 

 

Debug.WriteLine($"Private Memory: {MemoryChecker.RamUsed} MB");
var vramUsad = MemoryChecker.VramUsed;
var vramUsadPre = vramUsad;
Debug.WriteLine($"vramUsad:{vramUsad - vramUsadPre} MB");

 

 

 

 

일반메모리가 5GB, VRAM을 4GB먹는다는것을 알게되었다

 

이것은 에디터에서만 테스트하는 용도뿐만이 아니고

일반사용자들의 VRAM을 측정하여 어떤 모델을 올릴지 취사선택하는것도 가능하다

 

GpuLayerCount를 최소 256으로 올려야 GPU에서 처리를 하는데 메모리가 너무 부족하여

32레이어밖에 못 올리니 GPU가 작동 안 하는 문제가 발생한다

옵션 좀 잘 조정해봐야겠다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'AI' 카테고리의 다른 글

AI 이미지 인식방법  (0) 2025.05.31
LLaVaSharp 오류 모음  (0) 2025.05.29
AI 번역기 만들기 TinyLLaMa vs Phi-2  (0) 2025.05.26
posted by 모카쨩
2025. 5. 31. 08:34

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2025. 5. 29. 12:23

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2025. 5. 26. 09:16

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2025. 5. 24. 09:23

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2025. 2. 18. 08:38 AI

 

 

 

유전알고리즘으로 만들어진 AI의 작동방식은 누구나 알것이다

 

1. 랜덤하게 생성된 규칙을 가진 개체를 수천개 만들어서

2. 제일 높은 점수를 가진 개체만 남기고 

3. 그 개체들의 복사본을 만들어서 변이를 준다

4. 1번으로 돌아간다

 

이 방식은 어떠한 환경에도 적응할수 있다는 매우 훌륭한 장점이 있지만

 

 

 

 

 

https://www.science.org/doi/10.1126/sciadv.1500921

 

https://medium.com/analytics-vidhya/journey-of-gradient-descent-from-local-to-global-c851eba3d367

 

 

생물이 가진 최대 단점인 적응도의 골(fitness valley) 또는 지역 최소점(local minima) 현상으로 대표되는 학습지연에 빠져버리기 쉽다는것이다.

이것에 대한 자세한 내용은 

https://youtu.be/fnrpQuSgy-Q?si=DNX8KzHbTHHZukKj&t=245

 

 

이 영상이 잘 설명하고 있으니 참고하자

 


그리고 근본적으로 생물의 알고리즘이지 사람의 알고리즘이 아니라는점도 있다

 

 

아무튼 유전알고리즘이 만들어내지 못한 인간지능을 구현하기 위해

그냥 처음부터 신경의 작동원리를 모방하여 AI를 만들기로 했는데

 


작동방식을 정리하면
1. 무작위로 연결된 뉴런집합체를 만든다. (이 뉴런들은 단순히 두개의 값을 비교하여 차를 반환한다)

2. 입력에 따라 뉴런들을 활성화 시키고 출력된 값에 따라 행동시킨다. 

3. 결과에 따라 보상이나 처벌을 준다. 보상은 활성화된 뉴런들에 가중치를 주고 처벌은 가중치를 감소시킨다.

4. 1번으로 돌아간다

 

인공신경망또한 근본적인 작동방식은 유전알고리즘과 비슷하다

차이점은 유전알고리즘은 개체를 바꿔가면서 찾아내지만

인공신경망은 이미 정답인 개체가 존재하며 그 개체를 찾아내는 작업만 진행할 뿐이다

 

 

https://www.hani.co.kr/arti/science/science_general/755976.html
단순히 차를 반환하는것은 동작의 최소단위를 구현하기 위함일뿐이라 필요에 따라 다른 함수로 교체해도 된다

가령 마인크래프트를 예로 들어보자 초기에는 레드스톤과 레드스톤 토치만으로 모든 회로를 구현했지만 현재는 회로밀도를 높이기 위해 리피터나 비교기들을 섞어가며 사용하는것과 같다

그러므로 위의 차반환은 일종의 한개의 트랜지스터일뿐이라 각종 유용한 연산으로 치환해도 된다

 

 


더 많은 복잡도를 원한다면 다층레이어를 구성하면 된다

레이어의 출력을 다시 입력으로 받아서 처리하는것이다

예를들어 위와같은 차반환만 들어있는 방식은 말그대로 차만 반환하기 때문에 사칙연산의 결과값을 얻어내기 위해서는 다층구조가 필요하다.

 

 

https://www.youtube.com/watch?v=ScIrkTgwQiI

 

이 동영상은 전에 만들었던 한개의 레이어로 무작위로 배치된 뉴런들이 외부 자극을 받아 활성화 되고

보상에 따라 연결이 강화되거나 약화됨으로서 자연스레 정답인 뉴런들만이 남는것을 보여준다

 

 

 

https://www.kidsdiscover.net/brain-development.php

 

참고로 인간의 뇌도 시냅스 가지치기라고 하여 이것과 동일한 작용이 일어난다

사실 당연하다

왜냐하면 인공신경망이 인간의 뇌를 모방해서 만든것이기 때문이다

인간의 뇌는 이 비활성화 된 세포들도 에너지를 소비하기 때문에 일부를 불활성정도가 아니라 아예 제거를 해버린다

때문에 사람의 경우 부정피드백이 너무 많이 들어오면 우울증같은 기능장애를 유발한다고 한다.

근데 사실 이건 AI도 마찬가지라 피드백을 어떻게 줄지 잘 설계해야한다.

 

그리고 인간의 경우는 긍정피드백은 미엘린이 담당한다

수초 혹은 말이집이라고도 하며 전달속도를 늘리고 신호를 증폭시킨다.

즉 가중치가 증가된다

 

 

이러한 작동원리로 인하여 뉴런 하나하나의 결과값은 영향이 거의 없고 집합의 결과에 영향을 받기 때문에 일부분이 손상되어도 문제없이 작동한다.

 

인간의 뇌는 20%만 쓴다는 말도 들어봤을것이다.

위와같은 과정을 거치기에 당연히 일부만 활성화 되어야 정상이고

모든 뉴런세포가 활성화 되면 동일한 출력을 내뿜기만 하는 뇌전증에 불과하게 된다.

 

 

 

 

그런데 보다시피 레이어는 처리에 한계가 있다.

가령 특정 오브젝트의 개체를 인식하여 오브젝트의 위치에 따라 처리하게 하려는데

출력이 하나뿐이므로 서로 간섭을 일으킨다

 

 

때문에 이 레이어들을 엮어서 집합체를 만드는데 이것을 모델 혹은 네트워크라고 한다

 

 

 

모델에서는 각 레이어의 결과값을 입력값으로 받아 재처리할수 있다

따라서 오브젝트를 인식하거나 단어를 인식하여 처리하는등의 고차원 처리가 가능하다


위의 경우는

1. 위치를 판별하는 레이어

2. 화상을 인식하는 레이어

3. 움직임을 담당하는 레이어

이렇게 3개의 레이어가 필요하겠다

 

 

인간의 뇌도 이와같은 처리경로를 거친다

 

 

 

 

 

 

 

 

 

https://thebrain.mcgill.ca/flash/a/a_02/a_02_cr/a_02_cr_vis/a_02_cr_vis.html

 

https://www.waece.org/cd_morelia2006/ponencias/stoodley.htm

 

 

시각을 1차적으로 처리후 What경로와 Where경로를 거쳐 다른 레이어로 전달된다

 

 

그런데 인공신경망에는 커다란 단점이 있는데 보상과 처벌에 따라 학습되는것이기 때문에

그것을 판별할 시스템이 필요하다는 점이다

이것때문에 시각데이터에 라벨링 하는 과정이 들어가며 이것은 오로지 사람손으로 이루어진다

그래서 오토라벨링을 만드려고 애를 쓰지만 오토라벨링 또한 그것을 판별해줄 데이터는 사람손으로 만들어야 한다

 

생물의 경우는 정상적인 보상회로를 갖춘 생물만 살아남으므로 문제되지 않는다. 

그래서 최근에 개발되는것은 시뮬레이션 게임을 만들어서 그곳에서 학습시키는것이다.

 

 

 

그런데 인공신경망 또한 local minima문제를 가지고 있다

인간의 경우엔 두개의 뇌가 각기 판단후 뇌량을 통해 보강함으로서 상쇄시키려 한다

 

이 문제는 다수의 모델을 운용함으로서 해결할수 있다

 

 

그러니까 인공신경망은 군체의 결과가 판단의 주체이며

기존의 AI는 방정식의 결과가 판단의 주체이기 때문에 완전히 다른 방식의 AI라고 할 수 있다

 

 

 

'AI' 카테고리의 다른 글

라마샵 LLaMaSharp 사용법  (0) 2025.05.24
AI 환각현상과 분리뇌 현상의 유사성  (0) 2025.02.04
Rodin 사용법  (0) 2025.02.04
posted by 모카쨩
2025. 2. 4. 13:24 AI

 

AI hallucination

 

AI 환각 현상은 생성형 인공지능(AI)이 없는 정보를 지어내거나 왜곡하는 현상을 말합니다. 예를 들어, 챗GPT와 같은 AI 모델이 실제로 존재하지 않는 역사적 사건에 대해 질문을 받았을 때, 마치 실제 있었던 일처럼 상세한 설명을 만들어내는 경우가 이에 해당한다

 

분리뇌 현상은 좌뇌와 우뇌를 연결하는 뇌량이 절단된 환자들에게서 나타나는 독특한 행동 패턴을 의미합니다. 예를 들어, 우뇌에만 특정 이미지를 보여주고 왜 그 이미지를 선택했는지 좌뇌에 질문하면, 좌뇌는 실제 이유를 알지 못함에도 불구하고 그럴듯한 이야기를 만들어냅니다. 이는 뇌가 불완전한 정보를 바탕으로 그럴듯한 이야기를 만들어내는 능력을 가지고 있음을 보여준다.

 

이러한 유사성은 인간의 뇌와 AI가 정보를 처리하고 해석하는 방식에서 공통적인 메커니즘이 존재할 수 있음을 암시합니다. AI의 환각 현상은 단순한 오류가 아니라, 인간과 유사한 방식으로 정보를 처리하는 과정에서 발생하는 필연적인 결과일지도 모른다.

 

 

사실 어떻게 보면 당연한 것일지도 모른다

노드들의 연결을 잘라버려 반토막이 났으니 정상적인 기능을 못 할수밖에

 

 

실제로 있었던 분리뇌 실험 사례들

1. 빛 자극 실험
왼쪽 시야(우뇌)와 오른쪽 시야(좌뇌)에 각각 빛을 번쩍였다. 오른쪽 시야에 빛을 비췄을 때는 "빛이 보였다"고 말할 수 있었지만, 왼쪽 시야에 비췄을 때는 "아무것도 안 보인다"고 하였다. 그런데 웃긴 것은, 어디에서 빛이 번쩍였는지 손으로 가리키라고 하면 정확하게 가리켰다는 점이다. 결국 우뇌가 정보를 갖고 있긴 하였으나, 언어를 담당하는 좌뇌와 연결이 끊어지면서 말로는 설명을 못 하였다.

2. 단어 인식 실험
오른쪽 시야(좌뇌)와 왼쪽 시야(우뇌)에 각각 다른 단어를 보여주고, 해당 단어와 관련된 물건을 집게 하였다. 오른쪽 시야에 ‘열쇠(key)’를 보여주면, 오른손으로 열쇠를 집고 "열쇠"라고 말하였다. 그런데 왼쪽 시야에 ‘열쇠’를 보여주었을 때, 왼손으로는 열쇠를 잘 집었으나, 그게 무엇인지 말로는 설명하지 못 하였다. 즉, 우뇌는 정보를 갖고 있었으나, 언어로 표현하는 기능이 없어 답답한 상황이 발생한 것이다.

3. 장면-도구 연관 실험
왼쪽 시야(우뇌)에는 눈보라 치는 장면을, 오른쪽 시야(좌뇌)에는 닭발 사진을 보여주었다. 그리고 본 것과 어울리는 그림을 고르라고 하였더니, 오른손은 닭을, 왼손은 삽을 집었다. 문제는 삽을 왜 골랐냐고 물었을 때이다. "지저분한 닭장을 치우려면 삽이 필요하니까요."라고 대답하였다. 사실 우뇌는 눈보라 장면을 보았기 때문에 삽을 고른 것이었으나, 좌뇌는 그 사실을 모르고 대충 말 맞추는 식으로 설명을 지어낸 것이다.


from GPT



대체적으로 좌뇌가 현상에 맞추어 합리화 하고 설명하는것을 볼수 있는데

이것은 AI의 환각현상과 놀랍도록 일치한다

 

진화학적으로 봤을때 이러한 오류처리들이 우뇌의 어떤 노드들이 처리하면서 보정되었을것이나 

뇌량이 절단되면서 기능을 상실하게 된것으로 볼수있다.

 

 

 

 

 

 

 

 

 

 

 

 

'AI' 카테고리의 다른 글

인공신경망 작동 원리  (0) 2025.02.18
Rodin 사용법  (0) 2025.02.04
AI 영상 생성 Sora 후기  (0) 2025.02.03
posted by 모카쨩
2025. 2. 4. 06:55 AI

 

 

 

 

 

 

 

 

결제

 

 

 

 

 

 

이번엔 생성 누르고 멀티뷰 옵션을 줬다

 

 

생성된 퀄이 별로길래 Redo실행

 

 

 

너 모델링 진짜 못한다

 

 

 

 

 

멀티뷰 생성

아놔

 

'AI' 카테고리의 다른 글

AI 환각현상과 분리뇌 현상의 유사성  (0) 2025.02.04
AI 영상 생성 Sora 후기  (0) 2025.02.03
Qwen 사용법  (0) 2025.01.30
posted by 모카쨩