Gorgonia는 GO에서 머신 러닝을 촉진하는 데 도움이되는 도서관입니다. 다차원 배열과 관련된 수학 방정식을 작성하고 평가합니다. 이것이 Theano 또는 Tensorflow처럼 들리면 아이디어가 상당히 비슷하기 때문입니다. 특히, 도서관은 Theano와 같이 매우 낮은 수준이지만 Tensorflow와 같은 목표가 더 높습니다.
Gorgonia :
Gorgonia의 주요 목표는 여러 기계에서 확장 할 수있는 고도로 성능이 높은 기계 학습/그래프 계산 기반 라이브러리가되는 것입니다. GO (간단한 편집 및 배포 프로세스)의 매력을 ML 세계에 가져와야합니다. 현재는 먼 길이지만 아기 계단은 이미 있습니다.
Gorgonia의 2 차 목표는 비표준 심해 및 신경망 관련 사물을 탐색하기위한 플랫폼을 제공하는 것입니다. 여기에는 Neo-Hebbian 학습, 코너 절단 알고리즘, 진화 알고리즘 등과 같은 것들이 포함됩니다.
Gorgonia를 사용하는 주된 이유는 개발자 안락함입니다. GO 스택을 광범위하게 사용하고 있다면 이제 이미 익숙하고 편안한 환경에서 생산 준비 기계 학습 시스템을 만들 수있는 기능에 액세스 할 수 있습니다.
ML/AI는 일반적으로 두 단계로 나뉩니다. 실험 단계는 다양한 모델, 테스트 및 재시험을 구축합니다. 테스트 및 함께 플레이 한 후 모델이 배치 된 배포 된 상태. 이를 위해서는 데이터 과학자 및 데이터 엔지니어와 같은 다른 역할이 필요합니다.
일반적으로 두 단계에는 다른 도구가 있습니다. Python (Pytorch 등)은 실험 단계에 일반적으로 사용되며 모델은 C ++ (DLIB, MLPACK 등 사용)와 같은보다 성능있는 언어로 다시 작성됩니다. 물론 오늘날에는 격차가 끝나고 사람들은 종종 그들 사이에 도구를 공유합니다. Tensorflow는 격차를 연결하는 도구 중 하나입니다.
Gorgonia는 GO 환경을 위해서도 똑같이하는 것을 목표로합니다. Gorgonia는 현재 상당히 성능이 뛰어납니다. 속도는 Pytorch와 Tensorflow의 CPU 구현과 비교할 수 있습니다. GPU 구현은 CGO 세금이 많기 때문에 비교하기가 약간 까다 롭지 만 이것이 적극적인 개선 영역임을 확신합니다.
패키지는 go go get -u gorgonia.org/gorgonia 입니다.
Gorgonia는 GO 모듈과 호환됩니다.
최신 문서, 참조 및 튜토리얼은 공식 Gorgonia 웹 사이트 (https://gorgonia.org)에 있습니다.
Gorgonia의 프로젝트에는 Gopherslack에 Slack Channel과 Twitter 계정이 있습니다. 공식 업데이트 및 공지 사항은이 두 사이트에 게시됩니다.
Gorgonia는 계산 그래프를 작성한 다음 실행하여 작동합니다. 이를 프로그래밍 언어로 생각하지만 수학적 기능으로 제한되며 분기 기능이 없습니다 (if/then 또는 루프 없음). 실제로 이것은 사용자가 생각하는 데 사용되어야하는 지배적 인 패러다임입니다. 계산 그래프는 AST입니다.
Brainscript를 가진 Microsoft의 CNTK는 아마도 계산 그래프를 구축하고 계산 그래프를 실행하는 것이 다른 것이며 사용자가 다른 생각 모드에 있어야한다는 아이디어를 보여주는 데 가장 좋습니다.
Gorgonia의 구현은 CNTK의 Brainscript만큼 생각의 분리를 시행하지는 않지만 구문은 약간 도움이됩니다.
예는 다음과 같습니다. 수학 표현식 z = x + y 정의하고 싶다고 가정 해보십시오. 당신이하는 방법은 다음과 같습니다.
package gorgonia_test
import (
"fmt"
"log"
. "gorgonia.org/gorgonia"
)
// Basic example of representing mathematical equations as graphs.
//
// In this example, we want to represent the following equation
// z = x + y
func Example_basic () {
g := NewGraph ()
var x , y , z * Node
var err error
// define the expression
x = NewScalar ( g , Float64 , WithName ( "x" ))
y = NewScalar ( g , Float64 , WithName ( "y" ))
if z , err = Add ( x , y ); err != nil {
log . Fatal ( err )
}
// create a VM to run the program on
machine := NewTapeMachine ( g )
defer machine . Close ()
// set initial values then run
Let ( x , 2.0 )
Let ( y , 2.5 )
if err = machine . RunAll (); err != nil {
log . Fatal ( err )
}
fmt . Printf ( "%v" , z . Value ())
// Output: 4.5
} 비슷한 특성의 다른 패키지보다 조금 더 장점이라는 점에 유의하십시오. 예를 들어, 고르지니아는 호출 가능한 기능으로 컴파일하는 대신 *TapeMachine 실행 해야하는 *program 으로 구성됩니다. 또한 수동 Let(...) 호출이 필요합니다.
저자는 이것이 좋은 일이라고 주장하고 싶습니다. 생각을 기계 기반의 사고로 바꾸는 것입니다. 그것은 일이 잘못 될 수있는 곳을 알아내는 데 많은 도움이됩니다.
또한 분기에 대한 지원이 없습니다. 즉, 조건부 (/다른 경우) 또는 루프가 없습니다. 목표는 Turing-Complete 컴퓨터를 구축하는 것이 아닙니다.
더 많은 예제가 프로젝트의 example 하위 폴더에 존재하며 단계별 자습서는 기본 웹 사이트에 있습니다.
Gorgonia에는 Cuda 지원이 상자에서 제공됩니다. Cuda가 Gorgonia.org 웹 사이트에서 작동하는 방법에 대한 참조 문서를 참조하거나 자습서로 이동하십시오.
우리는 버전 관리에 Semver 2.0.0을 사용합니다. 1.0 이전에 Gorgonia의 API는 상당히 변할 것으로 예상됩니다. API는 내보낸 함수, 변수 및 방법으로 정의됩니다. 개발자의 정신력을 위해 Semver에는 버전 1.0 이전에 적용 할 사소한 차이가 있습니다. 아래에 열거되어 있습니다.
Gorgonia의 API는 현재 바로 안정적으로 간주되지 않습니다. 버전 1.0 포워드에서 안정적입니다.
Gorgonia는 Go의 마스터 브랜치 아래 2 가지 버전을 지원합니다. 이는 Gorgonia가 현재 릴리스 된 GO의 GO를 지원할 것이며 최대 4 개의 이전 버전을 지원하여 무언가를 제공하지 않도록합니다. 가능한 경우 심이 제공됩니다 (새로운 sort API 또는 math/bits 와 같은 경우 1.9에 나왔습니다).
GO의 현재 버전은 1.13.1입니다. Gorgonia가 지원하는 최초의 버전은 Go 1.11.x이지만 Gonum은 1.12+ 만 지원합니다. 따라서 마스터 브랜치를 실행하려는 최소 GO 버전은 GO> 1.12입니다.
Gorgonia는 다음과 같습니다.
다른 플랫폼에서 Gorgonia를 테스트 한 경우이 목록을 업데이트하십시오.
Gorgonia는 몇 가지 순수한 어셈블러 지침을 사용하여 일부 수학 연산을 가속화합니다. 불행히도 AMD64 만 지원됩니다.
분명히 Github에서 이것을 읽고 있기 때문에 Github는이 패키지에 기여하기위한 워크 플로의 주요 부분을 형성 할 것입니다.
참조 : 기고 .md
모든 기부금을 환영합니다. 그러나 중요한 기고자라고 불리는 새로운 기고자들이 있습니다.
중요한 기여자는 도서관의 작동 방식 및/또는 환경에 대한 깊은 이해를 보여주었습니다. 다음은 중요한 기여를 구성하는 것의 예입니다.
중요한 기고자 목록은 한 달에 한 번 업데이트됩니다 (누군가가 Gorgonia를 사용하는 경우).
현재 가장 좋은 지원 방법은 Github에서 티켓을 열는 것입니다.
runtime.GC() 호출이 보이는 이유는 무엇입니까? 이에 대한 대답은 간단합니다. 패키지의 디자인은 CUDA를 특정한 방식으로 사용합니다. 구체적으로 CUDA 장치와 컨텍스트는 패키지 수준 대신 VM 에 연결됩니다. 이것은 생성 된 모든 VM 에 대해 VM 당 장치 당 다른 CUDA 컨텍스트가 생성됩니다. 이런 식으로 모든 작업은 CUDA를 사용하는 다른 응용 프로그램과 잘 어울립니다 (그러나 스트레스 테스트를 거쳐야 함).
CUDA 컨텍스트는 VM 쓰레기를 수집 할 때만 파괴됩니다 (Finalizer 기능의 도움으로). 테스트에서 약 100 VM S가 생성되고 대부분의 쓰레기 수집은 무작위로 간주 될 수 있습니다. 이로 인해 컨텍스트가 너무 많아서 GPU가 메모리가 부족한 경우가 발생합니다.
따라서 GPU를 사용할 수있는 테스트가 끝나면 runtime.GC() 호출은 쓰레기 수집을 강제하여 GPU 메모리를 풀어줍니다.
생산에서는 많은 VM 을 시작하지 않을 가능성이 높으므로 문제가되지 않습니다. 있는 경우 GitHub에 티켓을 열면 VM S에 대한 Finish() 메소드를 추가 할 것입니다.
Gorgonia는 Apache 2.0의 변형에 따라 라이센스가 부여됩니다. 상당한 기여자 (예 : 패키지에 대한 상업적 지원을 제공 함)가 아니라면 패키지에서 직접 상업적으로 이익을 얻을 수 없다는 점을 제외하고는 Apache 2.0 라이센스와 동일합니다. Gorgonia의 파생물에서 직접 이익을 얻는 것은 완벽하게 괜찮습니다 (예 : Gorgonia를 제품의 라이브러리로 사용하는 경우).
모든 사람은 여전히 상업적 목적으로 Gorgonia를 사용할 수 있습니다 (예 : 비즈니스 용 소프트웨어에서 사용).
Gorgonia가 사용하는 의존성은 거의 없으며 모두 안정적이므로 현재로서는 공급 도구가 필요하지 않습니다. 고르고니아가 호출하는 외부 패키지 목록은이 패키지가 가지고있는 신뢰의 순서대로 순위가 매겨집니다 (하위 패키지가 생략 됨).
| 패키지 | 사용 | 활력 | 메모 | 특허 |
|---|---|---|---|---|
| 곤 넘/그래프 | 정렬 *ExprGraph | 필수적인. 제거는 Gorgonia가 효과가 없다는 것을 의미합니다 | Gorgonia의 개발은 가장 업데이트 된 버전을 따라 잡기 위해 최선을 다하고 있습니다. | Gonum 라이센스 (MIT/BSD- 유사) |
| 곤 넘/블라스 | 텐서 서브 포장 선형 대수 작업 | 필수적인. 제거는 Gorgonial이 작동하지 않는다는 것을 의미합니다 | Gorgonia의 개발은 가장 업데이트 된 버전을 따라 잡기 위해 최선을 다하고 있습니다. | Gonum 라이센스 (MIT/BSD- 유사) |
| Cu | CUDA 드라이버 | CUDA 운영에 필요합니다 | Gorgonia와 동일한 관리자 | MIT/BSD와 유사합니다 |
| Math32 | float32 작업 | float32(math.XXX(float64(x))) | Gorgonia와 동일한 관리자, 내장 math 패키지와 동일한 API | MIT/BSD와 유사합니다 |
| HM | Gorgonia의 유형 시스템 | Gorgonia의 그래프는 유형 시스템과 매우 밀접하게 결합되어 있습니다. | Gorgonia와 동일한 관리자 | MIT/BSD와 유사합니다 |
| VECF64 | 최적화 된 []float64 작업 | tensor/genlib 패키지에서 생성 할 수 있습니다. 그러나 많은 최적화가 이루어졌습니다 | Gorgonia와 동일한 관리자 | MIT/BSD와 유사합니다 |
| VECF32 | 최적화 된 []float32 작업 | tensor/genlib 패키지에서 생성 할 수 있습니다. 그러나 많은 최적화가 이루어졌습니다 | Gorgonia와 동일한 관리자 | MIT/BSD와 유사합니다 |
| 세트 | 다양한 세트 작업 | 쉽게 교체 할 수 있습니다 | 지난 1 년간 안정적인 API | 라이센스 설정 (MIT/BSD 유사) |
| Gographviz | 그래프 인쇄에 사용됩니다 | 그래프 인쇄는 디버깅에만 중요합니다. Gorgonia는 없이는 생존 할 수 있지만 전공 (그러나 논란의 여지가없는) 기능 손실로 살아남을 수 있습니다. | 마지막 업데이트 2017 년 4 월 12 일 | Gographviz 라이센스 (Apache 2.0) |
| rng | 초기 가중치를 생성하기 위해 도우미 기능을 구현하는 데 사용됩니다 | 상당히 쉽게 교체 할 수 있습니다. Gorgonia는 편의 기능 없이도 할 수 있습니다 | RNG 라이센스 (Apache 2.0) | |
| 오류 | 오류 랩핑 | 고르고니아는 그것 없이는 죽지 않을 것입니다. 실제로 Gorgonia는 과거에 Goerrors/오류를 사용했습니다. | 지난 6 개월 동안 안정적인 API | 오류 라이센스 (MIT/BSD- 유사) |
| 곤 넘/매트 | Tensor 와 Gonum의 매트릭스 사이의 호환성 | Gorgonia의 개발은 가장 업데이트 된 버전을 따라 잡기 위해 최선을 다하고 있습니다. | Gonum 라이센스 (MIT/BSD- 유사) | |
| 증언/주장 | 테스트 | 할 수는 있지만 엉덩이에 큰 통증이 될 것입니다. | 라이센스 증언 (MIT/BSD-LIKE) |
이들은 Gorgonia를 작성하는 과정에서 영감을 얻은 패키지와 도서관입니다 (사용 된 GO 패키지는 이미 위에서 선언되었습니다).
| 원천 | 그것이 어떻게 사용되는지 | 특허 |
|---|---|---|
| Numpy | 영감을 얻은 많은 부분. 몇 가지 방법에 대한 직접 조정 된 알고리즘 (문서에 명시 적으로 레이블이 붙음) | MIT/BSD와 유사합니다. Numpy 라이센스 |
| 티아노 | 영감을 얻은 많은 부분. (확실하지 않음 : 직접 조정 된 알고리즘 수) | MIT/BSD와 같은 Theano의 라이센스 |
| 카페 | im2col 및 col2im Caffe에서 직접 가져 왔습니다. 원래 Caffee 방법에서 영감을 얻은 컨볼 루션 알고리즘 | 카페 라이센스 |