Установка Go и загрузка содержимого из S3
Обязательно выполните последний шаг: настройте прокси для Китая, иначе пакеты в Китае не скачиваются.
Способ 1: установка через Conda (рекомендуется, не требует root)
Если вы уже работаете с Python-окружениями, самый простой и чистый способ установить Go — через conda. Для этого не нужны права администратора (sudo).
Bash
# Устанавливаем в базовое окружение или в конкретное окружение
conda install -c conda-forge go
- Плюсы: установка одной командой, относительно свежая версия, системное окружение не загрязняется.
- Минусы: Go доступен только в том окружении conda, где он установлен.
Способ 2: стандартная установка на Linux-сервере (официальный бинарный файл)
Если нужна установка для всей системы (есть права sudo) или не хочется зависеть от conda, используйте стандартный способ.
-
Скачайте архив (пример для 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 -
Распакуйте в каталог установки (обычно
/usr/local):Bash
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz -
Настройте переменные окружения.
Нужно добавить каталог с бинарными файлами 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
Проверка установки
После установки и настройки проверьте:
-
Версия Go:
Bash
go version # Пример вывода: go version go1.23.4 linux/amd64 -
Теперь можно установить s5cmd:
Bash
go install github.com/peak/s5cmd/v2@latest(После установки
s5cmdокажется в~/go/bin/. Если настроенPATH, его можно вызывать просто по имениs5cmd.)
Дополнение: другие способы загрузки
Адрес s3://... — это путь в хранилище AWS S3. Чтобы скачать содержимое такого пути, обычно не нужен API-ключ, а используется AWS CLI или совместимые с S3 утилиты (например, s5cmd).
Ответы на три частых вопроса:
- Как скачать: через AWS CLI или совместимый с S3 инструмент, например
s5cmd. - Нужен ли API-ключ: если набор данных публичный (как в проектах с открытым исходным кодом, например OpenPI), обычно не нужен ни аккаунт, ни ключ: используется параметр
--no-sign-request. Для закрытых наборов нужны учётные данные AWS (Access Key). - Можно ли ускорить многопоточностью: да. AWS CLI умеет работать параллельно, но
s5cmdобычно загружает канал значительно эффективнее и быстрее.
Ниже способы загрузки в порядке рекомендаций.
Способ 1: s5cmd (рекомендуется, самая высокая скорость)
Если нужна максимальная скорость многопоточной загрузки, рекомендуем s5cmd. Он написан на Go, параллелизм у него очень высокий, и работает он заметно быстрее официального CLI.
-
Установка s5cmd:
- Linux (через go):
go install github.com/peak/s5cmd/v2@latest - Linux (готовый бинарный файл): скачайте со страницы релизов, распакуйте и используйте.
- Conda:
conda install -c conda-forge s5cmd
- Linux (через go):
-
Запуск загрузки (пример для публичного бакета):
--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 (стандартный способ)
Это самый универсальный вариант.
-
Установка AWS CLI:
Bash
pip install awscli # или через conda conda install -c conda-forge awscli -
Запуск загрузки:
Поскольку это каталог, используйте команду
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, нужны права доступа. Тогда:- Зарегистрируйте аккаунт AWS.
- Получите Access Key ID и Secret Access Key.
- Выполните
aws configureи введите ключи. - Запустите команду снова без
--no-sign-request.
- Важно:
-
Настройка скорости 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.