# 성능 조정

Singularity는 데이터 준비 성능을 최적화하기 위해 다양한 구성을 제공합니다. 이 가이드에서는 이러한 구성을 설명하고 효과적으로 조정하는 지침을 제공합니다.

## 인라인 준비

* **설명**: 인라인 준비는 CAR 파일을 저장하는 데 필요한 추가 디스크 공간이 없어집니다. 그러나 데이터베이스 조회와 저장에 약간의 오버헤드가 발생합니다.
* **영향**: 오버헤드는 일반적으로 무시할 수 있습니다. 그러나 많은 작은 파일이 포함된 데이터셋의 경우 중요해질 수 있습니다.
* **구성**: 비활성화하려면 `singularity prep create`와 함께 `--no-inline`을 사용하십시오.
* **더 읽어보기**: [인라인 준비](https://data-programs.gitbook.io/singularity/kr/topics/inline-preparation)

## DAG 업데이트

* **설명**: 준비 과정에서 Singularity는 각 디렉토리에 대해 DAG와 CID를 새로 고칩니다. 이는 변경 사항을 실시간으로 추적하는 데 유용합니다.
* **영향**: CAR 파일이 준비될 때마다 디렉토리가 업데이트되므로 약간의 데이터베이스 오버헤드가 발생합니다.
* **구성**: 비활성화하려면 `singularity prep create`와 함께 `--no-dag`를 사용하십시오.

## 데이터 준비의 병렬 처리

### 스캔

* **설명**: 스캔은 소스 저장소를 탐색하여 파일 목록을 만드는 작업입니다. 로컬 저장소에서는 빠르지만 S3와 같은 원격 저장소에서는 느릴 수 있습니다.
* **구성**:
  * **병렬 처리 활성화**: `singularity storage create` 또는 `singularity storage update`와 함께 `--client-scan-concurrency <숫자>`를 사용하십시오.
  * **참고**: 활성화하면 파일이 결정적인 순서로 처리되지 않을 수 있습니다.

### 패킹

* **설명**: 패킹은 여러 파일을 단일 CAR 파일로 병합하는 것으로, CPU와 IO 모두를 많이 사용하는 작업입니다. 네트워크 제약이 있는 원격 저장소의 경우, 병렬 처리를 늘리는 것이 유리합니다.
* **구성**:
  * **병렬 처리 조정**: `singularity run dataset-worker`와 함께 `--concurrency <숫자>`를 사용하십시오.

## 서버의 수정 시간 사용

* **설명**: `AWS S3`와 같은 일부 원격 저장소는 사용자 정의 `mtime` 및 서버 측의 최종 수정 시간을 제공합니다. 기본적으로 Singularity는 사용자 정의 `mtime`을 확인하고 사용할 수 있으면 사용합니다. 그렇지 않으면 서버의 최종 수정 시간을 사용합니다.
* **영향**: 사용자 정의 `mtime` 확인을 건너뛰고 직접 서버의 최종 수정 시간을 사용하면 원격 저장소로의 요청 수를 줄일 수 있습니다.
* **구성**: `singularity storage create` 또는 `singularity storage update`와 함께 `--client-use-server-mod-time`을 사용하여 서버의 시간을 우선시하고 객체 메타데이터 검색을 우회하십시오.

## 재시도 전략

### 네트워크 요청 재시도

* **설명**: 실패한 원격 폴더 목록 또는 파일 개방에 대해 Singularity는 RClone의 재시도 메커니즘을 활용합니다.
* **구성**: 재시도 횟수를 늘리려면 `singularity storage create` 또는 `singularity storage update`와 함께 `--client-low-level-retries <숫자>`를 사용하십시오.

### 네트워크 IO 재시도

* **설명**: 성공한 네트워크 요청에도 불구하고, 불안정한 네트워크 연결로 인해 네트워크 IO가 실패할 수 있습니다. Singularity는 재시도와 마지막 성공 지점부터 재개를 지원합니다.
* **구성**: 아래 플래그를 `singularity storage create` 또는 `singularity storage update`와 함께 사용하십시오.

```shell
 --client-retry-backoff value      # IO 읽기 오류를 재시도하는 데 대한 지연 백오프 (기본값: 1초)
 --client-retry-backoff-exp value  # IO 읽기 오류를 재시도하는 데 대한 지수적인 지연 백오프 (기본값: 1.0)
 --client-retry-delay value        # IO 읽기 오류를 재시도하기 전의 초기 지연 (기본값: 1초)
 --client-retry-max value          # IO 읽기 오류의 최대 재시도 횟수 (기본값: 10)
```

## 접근 불가능한 파일 건너뛰기

* **설명**: 권한 문제로 인해 원격 저장소의 일부 파일에 액세스할 수 없는 경우가 있습니다. 이러한 문제는 파일을 열 때만 나타나며, 이로 인해 패킹 작업이 실패할 수 있습니다.
* **구성**: `singularity storage create` 또는 `singularity storage update`와 함께 `--client-skip-inaccessible-files`를 사용하여 접근할 수 없는 파일을 건너뛰십시오.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://data-programs.gitbook.io/singularity/kr/data-preparation/performance-tuning.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
