Наверняка вы замечали, что в Python есть удобная функция для получения переменной окружения
os.getenv(NAME)
И её "сестра" для создания или изменения переменных окружения
os.putenv(NAME, VALUE)
Но почему-то putenv() не работает как должно. Энвайромент не обновляется!
os.putenv('MYVAR', '1')
print(os.getenv('MYVAR'))
... и ничего 😴
Почему так?
На самом деле энвайромент обновляется, но это значение не добавляется в словарь os.environ.
Откройте исходник функции os.getenv(). Это просто шорткат для os.environ.get()
В то время как putenv() это built-in С-функция.
Словарь os.environ (или точней класс из MutableMapping) создаётся из энвайромента в момент инициализации. Функция putenv() самостоятельно его не изменяет.
В тоже время, когда вы создаёте или изменяете ключ в os.environ, автоматически вызывается putenv() в методе __setitem__().
То есть, технически putenv() всё делает верно, но в os.environ это не отражается. Можно проверить так:
>>> os.putenv('MYVAR', '123')
>>> os.system('python -c "import os;print(os.getenv(\'MYVAR\'))"')
123
Я объявил переменную в текущем процессе и вызвал дочерний процесс, который её унаследовал и получил в составе os.environ.
Аналогично при удалении переменной вызывается еще одна built-in функция unsetenv(), удаляющая переменную из системы.
Итого
▫️ Удобней всего явно обновлять переменные через os.environ
▫️ Есть способ неявно создать/удалить переменную через putenv/unsetenv, что не повлияет на os.environ но изменит энвайромент и передаст изменения сабпроцессам. Но так лучше не делать!
▫️os.environ это просто обертка для built-in функций putenv() и unsetenv().
#basic
🔥 Сенсей Карпаты выложил новый репозиторий - полный пайплайн обучения LLM с нуля
В проекте есть всё, чтобы собрать свой ChatGPT-клон за $100 и 4 часа:
> • токенизатор (написан на Rust)
> • pretraining
> • SFT (supervised fine-tuning)
> • RL (reinforcement learning)
> • оценка модели (eval)
Всего 8 000 строк кода, без лишних зависимостей - идеальный учебный пример, чтобы понять, как реально устроено обучение больших языковых моделей.
💡 Это проект из его нового грядущего курса LLM101n, и отличная возможность прокачать свои ML-навыки на практике.
Можно арендовать GPU в облаке и запустить всё самому - код уже готов к запуску.
Если запустить обучение модели nanochat на облачном GPU-сервере (например, 8×H100), то примерно через 12 часов обучения (стоимость ~300–400 $) модель достигает уровня GPT-2 по качеству на тестовых наборах (CORE-score).
А если тренировать около 40 часов (затраты ~1000 $), решает простые задачи по математике и коду, набирая:
- 40+ на MMLU
- 70+ на ARC-Easy
- 20+ на GSM8K
🧠 Это бесплатная практика топ уровня от мастера, которую не стоит упускать.
🟠GitHub:https://github.com/karpathy/nanochat
🟠Технические детали:https://github.com/karpathy/nanochat/discussions/1
@ai_machinelearning_big_data
#LLM#nanochat#MachineLearning#DeepLearning#AI#GPT
🔥 Nanochat D32 : микромодель Карпаты за $1000, которая реально работает
Карпаты написал, что завершил обучение Nanochat D32, обученной за 33 часа при бюджете $1000 (вместо $100).
Результаты - удивительно хорошие для такой «крошки»:
- 📈CORE score: 0.31 (выше, чем у GPT-2 — ~0.26)
- 🧮GSM8K: с 8% до 20%
- 🚀 Рост виден на всех этапах - pretraining, SFT и RL
Карпати пишет:
> «Не ждите от микромоделей чудес. Они обходятся $100–$1000, а не миллиарды долларов, как у крупных лабораторий.
> Разговаривать с моделью - как с ребёнком из детсада: они милые, ошибаются, путаются, галлюцинируют, но это весело.»
💡Факты:
- Nanochat тренируется с нуля
- Самая маленькая модель Nanochat содержит примерно в тысячу раз меньше параметров, чем GPT-3.
- Обнолвенный скрипт run1000.sh уже доступен в репозитории
📎 Подробности и отчёт:
https://github.com/karpathy/nanochat/discussions/8
Карпати уже тестирует веб-чат с моделью (ссылку не публикует, чтобы не обвалили сервер).
Дальше -оптимизация и возможно, переход к следующему уровню масштабирования.
#AI#LLM#Nanochat#Karpathy#AIresearch#OpenSourceAI
🧠 Карпаты показал, как добавить новую функцию в мини-LLM nanochat d32, сравнив её «мозг» с мозгом пчелы.
Он обучил модель считать, сколько раз буква r встречается в слове strawberry, и использовал этот пример, чтобы показать, как можно наделять маленькие языковые модели новыми навыками через синтетические задачи.
Сначала генерируются диалоги:
«Сколько букв r в слове strawberry?»
и правильные ответы.
После этого модель проходит дообучение (SFT) или обучение с подкреплением (RL), чтобы закрепить навык.
Карпаты объясняет, что для маленьких моделей важно продумывать всё до мелочей, как разнообразить запросы, как устроена токенизация и даже где ставить пробелы.
Он показывает, что рассуждения лучше разбивать на несколько шагов, тогда модель легче понимает задачу.
Nanochat решает задачу двумя способами:
— логически, рассуждая пошагово;
— через встроенный Python-интерпретатор, выполняя вычисления прямо внутри чата.
Идея в том, что даже крошечные LLM можно «научить думать», если правильно подготовить примеры и синтетические данные.
📘 Разбор: github.com/karpathy/nanochat/discussions/164
@ai_machinelearning_big_data
#AI#Karpathy#Nanochat#LLM#SFT#RL#MachineLearning#OpenSource