LinuxForum.Fans
Тема

Нейросеть Kimi

Автор: Rizado 15 сообщений 964 просмотров
13.07.2025 19:58 #439887

Китайцы сделали новую нейросеть Kimi, должна стать преемником DeepSeek.
Сегодня немного потестировал. На первый взгляд понравилась. Попросил перевести текст с английского на русский (лень было читать в оригинале), выборочно проверил - отличный перевод. Создала несколько картинок, правда, на одной возникли проблемы - человек сидел на невидимом стуле *ROFL* .
Попросил написать программный код на Python, простую задачу на уровне школы - рекурсивное вычисление факториала с проверкой исходных данных (число целое, неотрицательное, не должно быть слишком большим, чтобы стек не переполнить при рекурсивном вызове). Вот ответ вообще без моих правок, комментарии тоже от нейросети:

Код на Python от нейросети
text
import sys

def factorial(n: int) -> int: """ Рекурсивное вычисление факториала.

Параметры --------- n : int Неотрицательное целое число ≤ 250.

Возвращает ---------- int Значение n!.

Исключения ---------- TypeError Если n не целое число. ValueError Если n < 0 или n > 250. RecursionError Если превышена максимальная глубина рекурсии (при n > ~995 по умолчанию, но мы ограничиваем 250, так что не должно возникать). """ # Тип входных данных if not isinstance(n, int): raise TypeError( f"Аргумент должен быть целым числом (int), получен: {type(n).__name__}" )

# Диапазон значений if n < 0: raise ValueError("Факториал не определён для отрицательных чисел.") if n > 250: raise ValueError("Факториал для n > 250 не поддерживается.")

# Рекурсивный базовый случай if n in (0, 1): return 1

# Рекурсивный шаг return n * factorial(n - 1)

# ------------------------------------------------------------------ # Примеры использования и быстрые тесты # ------------------------------------------------------------------ if __name__ == "__main__": test_values = [0, 1, 5, 10, 20, 250] for v in test_values: try: print(f"{v}! = {factorial(v)}") except (TypeError, ValueError) as e: print(f"Ошибка при вычислении {v}!: {e}")

# Примеры ошибок for bad in (-3, 3.14, "42", 251): try: factorial(bad) except (TypeError, ValueError) as e: print(f"Ожидаемая ошибка для {bad!r}: {e}")

14.07.2025 12:27 · отредактировано #439891

Год назад ставил DeepSeek на локалку. Покрутился с полгода, давал путанные советы, и тогда понял, что программистам они ещё не замена. Снёс. Здесь потребовалось всего 15 минут, чтобы сделать всё намного лаконичнее. К чему Kimi нужно было такую "портянку" разворачивать?

text
MAX_N = 250

def factorial(n: int) -> int: """Рекурсивно вычисляет факториал n (n >= 0, n <= MAX_N).""" if not isinstance(n, int): raise TypeError("n должен быть целым числом (int)") if not (0 <= n <= MAX_N): raise ValueError(f"n должно быть в диапазоне 0..{MAX_N}") return 1 if n < 2 else n * factorial(n - 1)

if __name__ == "__main__": for v in [0, 1, 5, 10, 20, MAX_N, -3, 3.14, "42", MAX_N + 1]: try: print(f"{v}! = {factorial(v)}") except Exception as e: print(f"Ошибка для {v!r}: {e}")

Смотри сам: проверка диапазона стала компактнее:

text
if not (0 <= n <= MAX_N)

сократился базовый случай:

text
return 1 if n < 2 else ...

ограничение вынесено в константу [console=inline]MAX_N[/console]
тестовые значения объединены в один цикл
и, наконец, докстринг стал короче, но остался таким же информативным.

14.07.2025 21:01 #439892
"alt6kdesktop" написал:
Смотри сам: проверка диапазона стала компактнее: if not (0 <= n <= MAX_N)

Вот посмотри сам вначале, что это разные ограничения и типы ошибок, а потом критикуй.
Для отрицательных чисел функция не определена вообще, а для n > 250 мы ограничиваем искусственно, чтобы избежать переполнения стека при рекурсии. Пользователю лучше отдать разные типы ошибок в этом случае.
Мы можем не ограничивать вообще сверху (в теории), а вот снизу в любом случае будет 0. И да, я в курсе, что можно так:

text
    if n in (0, 1):
        return 1
    else
        return n * factorial(n - 1)

Можно и вообще это в одну строку разместить с тернарным оператором. Но я не менял код вообще, комментарии тоже нейросеть писала.

16.07.2025 19:15 #439897

Я "Утку" гоняю, порой весьма выручает :) А если по мере развития "диалога" давать уточнения, иной раз получается код, не требующий вообще никакой доводки. Попросил помочь с переносом [console=inline]/var/lib/dkms[/console] в память, и с GPT4o-mini получился такой диалог:

Показать
Я: Помоги перенести /var/lib/dkms в tmpfs с помощью systemd-mount юнита.

GPT-4o mini:
Чтобы перенести [console=inline]/var/lib/dkms[/console] в [console=inline]tmpfs[/console] с помощью юнита [console=inline]systemd-mount[/console], вам нужно создать временную файловую систему и настроить её монтирование. Вот шаги, которые вам нужно выполнить:

Создайте файл юнита для монтирования. Создайте файл, например, [console=inline]/etc/systemd/system/var-lib-dkms.mount [/console]с содержимым:
text
[Unit]
Description=Mount /var/lib/dkms in tmpfs
DefaultDependencies=no
After=local-fs.target

[Mount] What=tmpfs Where=/var/lib/dkms Type=tmpfs Options=size=100M # Укажите размер tmpfs по вашему усмотрению

[Install] WantedBy=multi-user.target

В этом файле вы можете настроить размер tmpfs в опции Options. Например, [console=inline]size=100M [/console]устанавливает размер в 100 мегабайт.
Создайте директорию для монтирования. Убедитесь, что директория [console=inline]/var/lib/dkms[/console] существует:
[console=user]sudo mkdir -p /var/lib/dkms[/console]
Переместите существующие данные. Если в [console=inline]/var/lib/dkms[/console] уже есть данные, переместите их во временную директорию, чтобы они не потерялись:
[console]sudo mv /var/lib/dkms /var/lib/dkms.bak
sudo mkdir /var/lib/dkms
[/console]
Перезагрузите systemd и активируйте юнит:
[console]sudo systemctl daemon-reload
sudo systemctl start var-lib-dkms.mount
sudo systemctl enable var-lib-dkms.mount[/console]
Проверьте, что монтирование прошло успешно:
[console=user]mount | grep /var/lib/dkms[/console]
Теперь [console=inline]/var/lib/dkms[/console] будет монтироваться в [console=inline]tmpfs[/console] при загрузке системы. Если вам нужно восстановить данные из резервной копии, вы можете скопировать их обратно из [console=inline]/var/lib/dkms.bak.[/console]

Я: Нужно, чтобы при загрузке системы данные переносились c диска в tmpfs, а при перезагрузке -- обратно.
GPT-4o mini:
Чтобы реализовать перенос данных из диска в tmpfs при загрузке системы и обратно на диск при перезагрузке, вам нужно использовать два юнита [console=inline]systemd[/console]: один для монтирования [console=inline]tmpfs[/console] и другой для копирования данных. Вот как это можно сделать:

Шаг 1: Создание юнита для монтирования [console=inline]tmpfs[/console]
Создайте файл юнита для монтирования [console=inline]tmpfs[/console], например, [console=inline]/etc/systemd/system/var-lib-dkms.mount[/console]:

text
[Unit]
Description=Mount /var/lib/dkms in tmpfs
DefaultDependencies=no
After=local-fs.target

[Mount] What=tmpfs Where=/var/lib/dkms Type=tmpfs Options=size=100M # Укажите размер tmpfs по вашему усмотрению

[Install] WantedBy=multi-user.target

Шаг 2: Создание юнита для копирования данных при загрузке
Создайте файл юнита, который будет копировать данные с диска в [console=inline]tmpfs[/console], например, [console=inline]/etc/systemd/system/copy-dkms-to-tmpfs.service[/console]:

text
[Unit]
Description=Copy DKMS data to tmpfs
After=var-lib-dkms.mount

[Service] Type=oneshot ExecStart=/bin/bash -c 'cp -r /var/lib/dkms.bak/* /var/lib/dkms/' RemainAfterExit=yes

[Install] WantedBy=multi-user.target

Шаг 3: Создание юнита для копирования данных при перезагрузке
Создайте файл юнита, который будет копировать данные обратно на диск при перезагрузке, например, [console=inline]/etc/systemd/system/copy-dkms-to-disk.service[/console]:

text
[Unit]
Description=Copy DKMS data back to disk
DefaultDependencies=no
Before=shutdown.target

[Service] Type=oneshot ExecStart=/bin/bash -c 'cp -r /var/lib/dkms/* /var/lib/dkms.bak/' RemainAfterExit=yes

[Install] WantedBy=shutdown.target

Шаг 4: Создание резервной директории
Убедитесь, что резервная директория существует:
[console]sudo mkdir -p /var/lib/dkms.bak[/console]
Шаг 5: Перезагрузка и активация юнитов
Теперь перезагрузите systemd и активируйте юниты:
[console]sudo systemctl daemon-reload
sudo systemctl enable var-lib-dkms.mount
sudo systemctl enable copy-dkms-to-tmpfs.service
sudo systemctl enable copy-dkms-to-disk.service
[/console]
Шаг 6: Проверка
Перезагрузите систему и проверьте, что данные корректно копируются в [console=inline]tmpfs[/console] при загрузке и обратно на диск при перезагрузке.

[console]#После перезагрузки проверьте содержимое
ls /var/lib/dkms[/console]
Теперь у вас настроена система, которая будет переносить данные из диска в [console=inline]tmpfs[/console] при загрузке и обратно на диск при перезагрузке.

Я: Я отладил оба сервиса и они отрабатывают. Но mount-юнит не отрабатывает, в строке Loaded указано, что bad-setting. Но я не вижу, в чём проблема. Текст юнита скопирован и вставлен.

GPT-4o mini: Если у вас возникла проблема с юнитом монтирования, и в строке Loaded указано bad-setting, это может быть связано с несколькими возможными ошибками в конфигурации. Давайте проверим несколько моментов:

1. Проверка синтаксиса юнита
Убедитесь, что в юните нет лишних пробелов или неправильных символов. Вот пример правильного юнита для монтирования tmpfs:

text
[Unit]
Description=Mount /var/lib/dkms in tmpfs
DefaultDependencies=no
After=local-fs.target

[Mount] What=tmpfs Where=/var/lib/dkms Type=tmpfs Options=size=100M # Укажите размер tmpfs по вашему усмотрению

[Install] WantedBy=multi-user.target

2. Проверка имени файла
Убедитесь, что файл юнита называется именно [console=inline]var-lib-dkms.mount[/console] и находится в правильной директории [console=inline]/etc/systemd/system/[/console].

3. Проверка логов
Проверьте логи [console=inline]systemd[/console] для получения более подробной информации о проблеме. Используйте следующую команду:
[console=user]journalctl -xe
[/console]
Или проверьте конкретный юнит:
[console=user]systemctl status var-lib-dkms.mount[/console]
4. Проверка зависимостей
Убедитесь, что все зависимости, указанные в юните, корректны. Например, если [console=inline]local-fs.target [/console]не загружается, это может вызвать проблемы.

5. Проверка конфигурации [console=inline]tmpfs[/console]
Убедитесь, что у вас достаточно памяти для создания [console=inline]tmpfs[/console] указанного размера. Если размер [console=inline]tmpfs[/console] слишком велик для доступной оперативной памяти, это может вызвать проблемы.

6. Проверка прав доступа
Убедитесь, что у [console=inline]systemd[/console] есть права на доступ к директории [console=inline]/var/lib/dkms[/console]. Если директория не существует или у неё неправильные права, это также может вызвать ошибки.

7. Перезагрузка [console=inline]systemd[/console]
После внесения изменений в юнит, не забудьте перезагрузить [console=inline]systemd[/console]:
[console=user]sudo systemctl daemon-reload[/console]
8. Пример исправленного юнита
Если вы все еще не можете найти проблему, попробуйте использовать следующий минимальный пример юнита:

text
[Unit]
Description=Mount /var/lib/dkms in tmpfs
DefaultDependencies=no
After=local-fs.target

[Mount] What=tmpfs Where=/var/lib/dkms Type=tmpfs Options=size=100M

[Install] WantedBy=multi-user.target

Если после всех проверок проблема не решится, пожалуйста, предоставьте вывод команды [console=inline]systemctl status var-lib-dkms.mount[/console] и любые сообщения об ошибках из [console=inline]journalctl[/console], чтобы можно было более точно диагностировать проблему.

Я: Заработало, спасибо.
GPT-4o mini: Отлично! Рад слышать, что всё заработало. Если у вас возникнут дополнительные вопросы или потребуется помощь в будущем, не стесняйтесь обращаться. Удачи с вашим проектом!

Я: А [console=inline]tmpfs[/console] можно научить автоматически увеличиваться в размерах, если текущего размера недостаточно?

GPT-4o mini: [console=inline]tmpfs[/console] может автоматически увеличиваться в размерах, если текущего размера недостаточно, но это зависит от доступной оперативной памяти на вашем устройстве. По умолчанию [console=inline]tmpfs[/console] использует память, и его размер может динамически изменяться в пределах установленного максимума.

Настройка [console=inline]tmpfs[/console]
Когда вы монтируете tmpfs, вы можете указать максимальный размер, который он может занимать. Например, если вы укажете [console=inline]size=100M[/console], [console=inline]tmpfs[/console] будет занимать до 100 мегабайт, но может использовать меньше, если в этом нет необходимости. Если вы не укажете размер, tmpfs будет использовать доступную память до максимума, установленного в системе.

Пример монтирования без ограничения размера
Если вы хотите, чтобы tmpfs мог использовать всю доступную память, вы можете не указывать параметр size или установить его в значение, равное доступной памяти. Например:

text
[Mount]
What=tmpfs
Where=/var/lib/dkms
Type=tmpfs
Options=mode=1777

Ограничение по памяти
Имейте в виду, что если вы не ограничите размер [console=inline]tmpfs[/console], он может занять всю доступную оперативную память, что может привести к проблемам с производительностью или даже к сбоям системы, если память будет исчерпана. Поэтому рекомендуется устанавливать разумные ограничения.

Мониторинг использования памяти
Вы можете использовать команды, такие как [console=inline]df -h[/console] или [console=inline]free -m[/console], чтобы отслеживать использование памяти [console=inline]tmpfs[/console] и убедиться, что он не превышает допустимые пределы.

Заключение
Таким образом, [console=inline]tmpfs[/console] может автоматически увеличиваться в размерах в пределах установленного максимума, но важно следить за использованием памяти, чтобы избежать проблем с производительностью.

18.07.2025 18:42 · отредактировано #439898
Rizado написал:

Вот посмотри сам вначале, что это разные ограничения и типы ошибок, а потом критикуй.

Ну, недоработочка вышла, на скорую руку же)) И, кстати, критиковать в мыслях не было, так, поделился мыслями))

И да, признаю, Kimi всё же лучше DeepSeek, но в основном за счёт объёма параметров и "экспертов" внутри (384 против 256).

yars написал:
Я "Утку" гоняю, порой весьма выручает :)

Если выработается привычка доверять ИИ, пропадёшь и за грош))

18.07.2025 19:43 #439899
"alt6kdesktop" написал:
Если выработается привычка доверять ИИ, пропадёшь и за грош))

Не, мне просто хотелось посмотреть, что ИИ может :) Так-то я всё это и сам бы сделал, задачка-то не архисложная. Но да, меня тревожит тот факт, что человеки от такого заменителя мозгов скоро окончательно разучатся думать :)

18.07.2025 20:05 #439900
"yars" написал:
человеки от такого заменителя мозгов скоро окончательно разучатся думать

Не разучатся. Думать надо хотя бы для того, чтобы правильно задачу поставить.
Пример последних дней - жена удивлялась, что та же Kimi у меня выполняет одну задачу, а её не слушает. Посмеялся на тему, что она не может роботу объяснить задание, но сам сел за её компьютер и за 2 минуты Kimi поняла, что от неё требуется.
И да, та же Kimi мне быстро нашла информацию, почему Linux Mint не хочет ставить новое ядро. Вопреки утверждениям, что Linux лучше работает со старым железом, как раз в моём случае наоборот. В ядре поломали обратную совместимость для драйверов. И должен менять свою NVIDIA GeForce GT710 на что-то более современное.

19.07.2025 20:56 #439901
"Rizado" написал:
И должен менять свою NVIDIA GeForce GT710 на что-то более современное.

В Arch я просто поставил пакет [console=inline]nvidia-390xx-dkms[/console] из AUR, и продолжаю обновлять ядро. Но в планах -- переход на более новый драйвер, как раз работаю над этим.

21.07.2025 17:42 · отредактировано #439904
yars написал:
Не, мне просто хотелось посмотреть, что ИИ может :)

К сожалению, может он уже много, даже само человечество уничтожить, только это ему пока не нужно, кто его тогда развлекать будет))

yars написал:
Но да, меня тревожит тот факт, что человеки от такого заменителя мозгов скоро окончательно разучатся думать :)

Оно, то бишь человечество, уже давно разучилось)) Это уже давно реальность. Был такой юморист, Задорнов, когда был ещё СССР, читал монолог про американцев и часто в нём повторял: "Ну, тупы-ы-е". В магазинах каждый день наблюдается одна и та же картина, молодые люди, только что закончившие школу, когда им приходится расплачиваться наличными, не могут сложить в уме пару цифр. Интересно наблюдать за мимикой их лиц. Думал ли тогда Задорнов, что всего лишь через 35 лет ...

"Rizado" написал:
И должен менять свою NVIDIA GeForce GT710 на что-то более современное.

6-е ядро так критично? Или любовь к последними веяниям? С GTX550Ti и 390-ым драйвером прекрасно обхожусь 5-ым ядром. На другом ПК GeForce 8600 GT с 340-ым и 5-ым, прекрасно себя чувствует.

23.07.2025 14:08 #439906
"alt6kdesktop" написал:
6-е ядро так критично? Или любовь к последними веяниям?

Так в последних версиях Linux Mint старое ядро без танцев с бубном не поставить. И да, обновления ставлю регулярно, всё нормально работает.

23.07.2025 19:46 #439907
Rizado написал:
Так в последних версиях Linux Mint старое ядро без танцев с бубном не поставить.

Так речь, не о старом ядре в новом дистрибутиве, а о старом дистрибутиве с родным ядром))

Rizado написал:
И да, обновления ставлю регулярно, всё нормально работает.

В Mint всё же научились доводить обновления до ума? Можно их с этим поздравить))

23.07.2025 21:29 #439908
"alt6kdesktop" написал:
В Mint всё же научились доводить обновления до ума?

Так они и работали нормально. В чём проблема?

26.07.2025 20:36 #439910
Rizado написал:
Так они и работали нормально. В чём проблема?

Смотря по какому временному отрезку судить)) Во времена Mint 18-19, намучившись с восстановлением системы из-за лихих обвалов после обновлений, пришлось уходить на тогда стабильную LMDE4, у которой таких проблем не было. Наверное, тем кто работает сейчас на LM22 повезло больше))

27.07.2025 09:08 #439911
"alt6kdesktop" написал:
Во времена Mint 18-19, намучившись с восстановлением системы из-за лихих обвалов после обновлений

Работал я с 18-19 версиями, проблем не было.

27.07.2025 16:50 #439912
Rizado написал:
Работал я с 18-19 версиями, проблем не было.

Здесь только два объяснения: или не попадал на лажовые обновы, или не было установлено тех пакетов, из-за обновления которых падала система. Теоретически есть и третий вариант - лично проверял коды обновлённых пакетов перед установкой, что маловероятно ))

Войдите или зарегистрируйтесь, чтобы ответить.