Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Установка Go и загрузка содержимого из S3

Обязательно выполните последний шаг: настройте прокси для Китая, иначе пакеты в Китае не скачиваются.


Способ 1: установка через Conda (рекомендуется, не требует root)

Если вы уже работаете с Python-окружениями, самый простой и чистый способ установить Go — через conda. Для этого не нужны права администратора (sudo).

Bash

# Устанавливаем в базовое окружение или в конкретное окружение
conda install -c conda-forge go
  • Плюсы: установка одной командой, относительно свежая версия, системное окружение не загрязняется.
  • Минусы: Go доступен только в том окружении conda, где он установлен.

Способ 2: стандартная установка на Linux-сервере (официальный бинарный файл)

Если нужна установка для всей системы (есть права sudo) или не хочется зависеть от conda, используйте стандартный способ.

  1. Скачайте архив (пример для Linux x86-64, версия 1.23.4):

    Bash

    wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz
    # Если go.dev работает медленно, можно использовать зеркало в Китае:
    # wget https://mirrors.ustc.edu.cn/golang/go1.23.4.linux-amd64.tar.gz
    
  2. Распакуйте в каталог установки (обычно /usr/local):

    Bash

    sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
    
  3. Настройте переменные окружения.

    Нужно добавить каталог с бинарными файлами Go в PATH.

    Bash

    # Редактируем ~/.bashrc
    echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
    # Добавляем каталог, куда Go устанавливает сторонние утилиты (например, после установки s5cmd это $HOME/go/bin)
    echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc
    
    # Применяем настройки
    source ~/.bashrc
    

Способ 3: Windows и macOS

  • Windows: скачайте установщик .msi с официального сайта, запустите и нажимайте «Далее». Переменные окружения настроятся автоматически.
  • macOS: если установлен Homebrew, выполните brew install go.

Важный шаг: настройка прокси GOPROXY для Китая

Этот шаг очень важен.

Без него команда go install github.com/... в Китае почти всегда завершается по таймауту, потому что стандартный источник Go недоступен.

Выполните в терминале следующие команды, чтобы включить китайский прокси (Qiniu или Alibaba Cloud):

Bash

# Включаем модули Go
go env -w GO111MODULE=on

# Настраиваем GOPROXY. Рекомендуется goproxy.cn от Qiniu: работает стабильно
go env -w GOPROXY=https://goproxy.cn,direct

Проверка установки

После установки и настройки проверьте:

  1. Версия Go:

    Bash

    go version
    # Пример вывода: go version go1.23.4 linux/amd64
    
  2. Теперь можно установить s5cmd:

    Bash

    go install github.com/peak/s5cmd/v2@latest
    

    (После установки s5cmd окажется в ~/go/bin/. Если настроен PATH, его можно вызывать просто по имени s5cmd.)


Дополнение: другие способы загрузки

Адрес s3://... — это путь в хранилище AWS S3. Чтобы скачать содержимое такого пути, обычно не нужен API-ключ, а используется AWS CLI или совместимые с S3 утилиты (например, s5cmd).

Ответы на три частых вопроса:

  1. Как скачать: через AWS CLI или совместимый с S3 инструмент, например s5cmd.
  2. Нужен ли API-ключ: если набор данных публичный (как в проектах с открытым исходным кодом, например OpenPI), обычно не нужен ни аккаунт, ни ключ: используется параметр --no-sign-request. Для закрытых наборов нужны учётные данные AWS (Access Key).
  3. Можно ли ускорить многопоточностью: да. AWS CLI умеет работать параллельно, но s5cmd обычно загружает канал значительно эффективнее и быстрее.

Ниже способы загрузки в порядке рекомендаций.


Способ 1: s5cmd (рекомендуется, самая высокая скорость)

Если нужна максимальная скорость многопоточной загрузки, рекомендуем s5cmd. Он написан на Go, параллелизм у него очень высокий, и работает он заметно быстрее официального CLI.

  1. Установка s5cmd:

    • Linux (через go): go install github.com/peak/s5cmd/v2@latest
    • Linux (готовый бинарный файл): скачайте со страницы релизов, распакуйте и используйте.
    • Conda: conda install -c conda-forge s5cmd
  2. Запуск загрузки (пример для публичного бакета):

    --no-sign-request означает анонимный доступ, вход в аккаунт не нужен.

    Bash

    s5cmd --no-sign-request cp --concurrency 50 "s3://openpi-assets-simeval/pi0_fast_droid_jointpos/*" ./local_folder/
    
    • --concurrency 50: 50 параллельных потоков. Значение можно подбирать под вашу пропускную способность.

Способ 2: официальный AWS CLI (стандартный способ)

Это самый универсальный вариант.

  1. Установка AWS CLI:

    Bash

    pip install awscli
    # или через conda
    conda install -c conda-forge awscli
    
  2. Запуск загрузки:

    Поскольку это каталог, используйте команду sync или cp --recursive.

    Случай A: публичный бакет

    Публичные наборы данных открытых проектов (например, OpenPI) обычно доступны без входа в аккаунт AWS.

    Bash

    aws s3 sync s3://openpi-assets-simeval/pi0_fast_droid_jointpos ./local_target_folder --no-sign-request
    
    • Важно: --no-sign-request говорит AWS, что аккаунта нет и нужно попробовать анонимную загрузку.

    Случай B: закрытый набор данных

    Если команда выше выдаёт Access Denied, нужны права доступа. Тогда:

    1. Зарегистрируйте аккаунт AWS.
    2. Получите Access Key ID и Secret Access Key.
    3. Выполните aws configure и введите ключи.
    4. Запустите команду снова без --no-sign-request.
  3. Настройка скорости AWS CLI:

    AWS CLI по умолчанию работает многопоточно, но его можно дополнительно настроить:

    Bash

    aws configure set default.s3.max_concurrent_requests 20
    aws configure set default.s3.max_queue_size 10000
    

Способ 3: Python (boto3)

Если нужно загружать данные прямо в коде, а не сохранять на диск, используйте библиотеку boto3.

Python

import boto3
from botocore import UNSIGNED
from botocore.config import Config

# Настраиваем анонимный доступ (аналог --no-sign-request)
s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED))

bucket_name = 'openpi-assets-simeval'
prefix = 'pi0_fast_droid_jointpos'

# Получаем список файлов
paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(Bucket=bucket_name, Prefix=prefix)

for page in pages:
    if 'Contents' in page:
        for obj in page['Contents']:
            print(f"Found: {obj['Key']}")
            # Здесь добавляется логика загрузки: s3.download_file(...)

Итоговые рекомендации

  • Для начала: попробуйте aws s3 sync ... --no-sign-request из способа 2. Так быстрее всего проверить, нужны ли права доступа.
  • Если файлы большие: обязательно используйте способ 1 (s5cmd). При загрузке больших файлов и большого числа мелких файлов он обычно работает в несколько раз быстрее официального CLI.