Находим мудрость в трясине ошибок: делимся методами и опытом отладки
Находим мудрость в трясине ошибок: делимся методами и опытом отладки

Прежде чем начать статью, я хотел бы порекомендовать несколько хороших статей, написанных другими! Если вам интересно, вы также можете прочитать это!

Сегодняшняя рекомендация: используйте LLaMA-Factory для точной настройки большой модели LLM! Тренируйте свою собственную модель!

Ссылка на статью:https://cloud.tencent.com/developer/article/2469532

В этой статье от MGS показан весь процесс тонкой настройки большой модели с разных точек зрения.,Он имеет детальное содержание, четкую структуру и высокую практичность. первый,Статья начинается с конкретных сценариев.,Предложил проблему модели «идеологической консолидации»,А это приводит к необходимости тонкой настройки больших моделей.,Эта вступительная глава свежа и полна практического значения. существующийинструмент Аспекты выбора,Автор подробно перечисляет использованные проекты (LLaMA-Factory) и модели (Qwen2.5:7B).,и четко объяснить, почему были выбраны именно эти ресурсы,Позвольте читателям понять логику каждого шага принятия решения.

Находим мудрость в трясине ошибок: делимся методами и опытом отладки

Повседневная жизнь разработчиков неотделима от Ошибка. Они были похожи на стелс-задачи, которые позволяли нам оттачивать свои навыки в бесчисленных ночах и мозговых штурмах. В этой статье мы поделимся некоторыми решениями Bug изметод и шаги с практическими примерами кода, которые помогут вам выжить. Debug Получите рост на этом пути.


1. Понимание ошибок: от феномена к сути

Ошибки не появляются из воздуха. Они часто являются проявлением логики, крайних случаев, зависимостей или проблем среды разработки. Поиск основной причины ошибки требует ясного мышления и тщательного анализа.

1. Что такое ошибка?

Ошибка относится к ситуации, когда результаты работы программы не соответствуют ожиданиям. Это может выглядеть как:

  • Программа выходит из строя
  • вывод ошибки
  • непредвиденное поведение

2. Распространенные типы ошибок

  • логическая ошибка:алгоритмили Проблема условного суждения。
  • синтаксическая ошибка:компилироватьилибегать Сообщить об ошибке。
  • пограничные проблемы:Экстремальный ввод не обрабатываетсяилиграничные условия。
  • Проблемы с зависимостями:Сторонние библиотекиили Проблемы с конфигурацией среды。

2. Золотые шаги по устранению ошибок

1. Проблема с восстановлением

Воспроизведение ошибки — первый шаг к ее решению. Без стабильных условий воспроизводимости результаты ремонта могут оказаться случайными.

  • Документируйте проблемную среду:Операционная система、Языковая версия、Версия зависимости и т. д.
  • Анализируйте ввод и вывод:Какие переменные подтвердитьили Статус вызывает проблемы。
Пример кода: описание проблемы

Предполагается, что у нас есть функция Python обрабатывает данные, но существует и выдает исключение при определенных входных данных:

Язык кода:python
кодбегатьчастота:0
копировать
def process_data(data):
    result = []
    for item in data:
        if item % 2 == 0:
            result.append(item / 2)
        else:
            result.append(10 / item)  # скрытыйсуществоватьвопрос    return result

data = [2, 4, 0, 7]
print(process_data(data))  # ZeroDivisionError: division by zero

2. Проблема с позиционированием

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

Способ 1. Распечатайте журнал.
Язык кода:python
кодбегатьчастота:0
копировать
def process_data(data):
    result = []
    for item in data:
        print(f"Processing item: {item}")
        if item % 2 == 0:
            result.append(item / 2)
        else:
            print(f"Debug: Attempting division 10 / {item}")
            result.append(10 / item)  # вопроссуществоватьздесь    return result
Способ 2. Используйте инструмент отладки.
  • Python:pdb Отладочный модуль
  • JavaScript:console.log или инструменты разработчика браузера
  • Java:System.out.println или IDE Встроенный отладчик

3. Анализировать первопричины

Копайте глубже в код или среду, чтобы найти основную причину проблемы, а не ее симптомы.

  • код Соответствует ли логика ожиданиям?
  • Были ли учтены граничные условия?
  • Есть ли какие-либо проблемы с параллелизмом или асинхронностью?

существуют В приведенном выше примере,ZeroDivisionError Это из-за ввода 0 не обрабатываются должным образом.


4. Ремонт и проверка

После исправления кода убедитесь, что изменения решили проблему и не привели к появлению новых ошибок.

Код исправления:
Язык кода:python
кодбегатьчастота:0
копировать
def process_data(data):
    result = []
    for item in data:
        if item == 0:  # Исправлено: добавлены проверки граничных условий.
            print("Warning: Skipping division by zero.")
            continue
        if item % 2 == 0:
            result.append(item / 2)
        else:
            result.append(10 / item)
    return result

data = [2, 4, 0, 7]
print(process_data(data))  # Результат вывода нормальный
Результаты проверки:
  • Напишите модульные тесты:
Язык кода:python
кодбегатьчастота:0
копировать
import unittest

class TestProcessData(unittest.TestCase):
    def test_valid_input(self):
        self.assertEqual(process_data([2, 4, 7]), [1.0, 2.0, 10/7])
    
    def test_zero_handling(self):
        self.assertEqual(process_data([0]), [])
  • Разработайте инструмент покрытия, гарантирующий полное тестирование нового кода.

3. Практические навыки отладки.

1. Правильно используйте инструменты

  • Инструмент регистрации:нравиться Python из logging модулей, чтобы избежать использования слишком большого количества print
  • Отладка точки останова:существовать IDE Устанавливайте точки останова и шаг за шагом просматривайте переменные и состояние программы.

2. Бинарный метод поиска ошибок

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

3. Откат и сравнение версий

Используйте систему контроля версий (например, Git), чтобы просмотреть момент появления ошибки и изменения кода:

Язык кода:bash
копировать
git bisect start
git bisect bad HEAD
git bisect good <last_known_good_commit>

4. Развивайтесь из ошибок

1. Написание модульных тестов

Не допускайте повторения подобных проблем.

2. Напишите документацию

Запишите явление, причину и решение проблемы, чтобы предоставить рекомендации членам команды.

3. Обобщить опыт

Регулярно обобщайте опыт отладки и превращайте уроки в практики для улучшения качества кода.


5. Рекомендации по предотвращению ошибок

решать Bug это возможность для роста и предотвращения Bug Это воплощение совершенства. существования разрабатывается, мы можем, следуя некоторым передовым практикам, будем Bug Вероятность возникновения сведена к минимуму.


1. Стандартизация кода

Написание кода, который легко понять и поддерживать, может эффективно уменьшить количество ошибок, вызванных запутанной логикой и неправильным именованием.

Пример: унифицировать стиль именования
Язык кода:python
кодбегатьчастота:0
копировать
# Неправильное наименование
a = 100  
b = 200  

# Стандартизированное именование
user_age = 100  
user_score = 200  

Используйте стандартные инструменты кода:

  • Python:использовать flake8 или black
  • JavaScript:использовать ESLint
  • Java:следовать Google Java Style

2. Принцип единой ответственности

Каждый функциональный модуль фокусируется на выполнении одной задачи и избегает концентрации сложной логики вместе.

Пример. Разделение сложной функции
Язык кода:python
кодбегатьчастота:0
копировать
# Исходный код: за всю логику отвечает одна функция
def process_user_data(data):
    # Очистка данных
    clean_data = [item.strip() for item in data if item]
    # Расчет данных
    result = sum(len(item) for item in clean_data)
    return result

# Оптимизация кода: разделение обязанностей
def clean_data(data):
    return [item.strip() for item in data if item]

def calculate_result(clean_data):
    return sum(len(item) for item in clean_data)

data = ["Alice ", " Bob", " "]
print(calculate_result(clean_data(data)))

3. Напишите комплексные тесты

Тестирование — это открытиескрытыйсуществовать Bug Модульное тестирование, интеграционное тестирование и сквозное тестирование являются мощными средствами, и к ним следует относиться серьезно.

Пример: среда тестирования Pytest
Язык кода:python
кодбегатьчастота:0
копировать
import pytest

def is_even(num):
    return num % 2 == 0

# тестовая функция
def test_is_even():
    assert is_even(2) == True
    assert is_even(3) == False
    assert is_even(0) == True
    assert is_even(-2) == True

Запустите тест:

Язык кода:bash
копировать
pytest test_file.py

4. Используйте инструменты статического анализа

статическийанализироватьинструмент Можетсуществовать Открытие на этапе разработкикодсерединаизскрытыйсуществоватьвопрос。

  • Pythonmypy(типисследовать)
  • JavaScript:TypeScript(статическийтиписследовать)
  • C++clang-tidy
Пример: Роль проверки типов
Язык кода:python
кодбегатьчастота:0
копировать
# Нет аннотации типа
def add_numbers(a, b):
    return a + b

# Добавить аннотацию типа
def add_numbers(a: int, b: int) -> int:
    return a + b

бегать mypy исследовать:

Язык кода:bash
копировать
mypy script.py

5. Проверка кода

Проверка кода — эффективный способ найти ошибки в командной разработке. Ошибок, вызванных индивидуальными недосмотрами, можно избежать путем перекрестной проверки членами команды.

Пример контрольного списка проверки
  • код Логика понятна?
  • Все ли возможные крайние случаи обработаны?
  • Были ли нарушены какие-либо нормы кода?

Используйте инструменты проверки кода:

  • GitHub Pull Requests
  • GitLab Merge Requests
  • Phabricator

6. Непрерывная интеграция (CI)

Создавайте автоматизированные процессы тестирования и развертывания, чтобы оперативно выявлять проблемы с помощью инструментов непрерывной интеграции, таких как Jenkins, GitHub Actions или GitLab CI/CD.

Пример: файл конфигурации действий GitHub.
Язык кода:bash
копировать
.github/workflows/python-tests.yml
name: Python Tests

on:
  push:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v3
        with:
          python-version: 3.9
      - name: Install dependencies
        run: |
          pip install -r requirements.txt
      - name: Run tests
        run: pytest

6. Отладка менталитета и навыков в реальном бою.

существовать Debug Во время процесса крайне важно сохранять спокойствие и ясное мышление. Определенные навыки и образ мышления могут помочь нам более эффективно решать сложные проблемы.


1. Разделяй и властвуй

Столкнувшись со сложной проблемой, постарайтесь разбить ее на более мелкие части одну за другой.

  • Убедитесь, что блок кода работает правильно.
  • от Минимальный ввод или Функциональный модуль начинает тестирование
Пример: тестирование функции шаг за шагом
Язык кода:python
кодбегатьчастота:0
копировать
# оригинальная сложная функция
def calculate_total(data):
    return sum(len(item.strip()) for item in data if item)

# Пошаговое тестирование
def test_calculate_total():
    assert calculate_total(["a", "bb ", "ccc"]) == 6
    assert calculate_total(["", " "]) == 0
    assert calculate_total([]) == 0

2. Будьте терпеливы

Баги обычно не существуютрешаются с первой попытки.,Особенно, когда задействовано несколько модулей и внешние зависимости. Записывайте каждую попытку, идеи и результаты,Избегайте повторных недопустимых операций.


3. Запишите моменты обучения

каждый разрешать Bug Наконец, опыт, способный предотвратить подобные проблемы, обобщается и применяется в последующих разработках. Например:

  • Добавить новый тестовый пример
  • Улучшенная обработка граничных условий
  • Оптимизировать логику кода

Семь、Подвести итог:существовать Debug средний рост

Debug Это не только проблема и процесс, но и важная часть самосовершенствования программистов. понимая Bug суть, овладение эффективным Debug метод,а такжесуществоватьупражнятьсясередина Подвести итоги опыт, мы можем Bug в возможности для роста.

основной опыт

  1. Глубоко понять проблему:Bug Это явление, за которым скрывается логическая лазейка илипограничные. проблемы。
  2. следовать научным шагам:вновь появиться、позиция、анализировать、Ремонт и проверка обязательны.
  3. Инструменты и практика идут рука об руку:Используйте отладку с пользойинструмент、среда тестирование и проверка кода, чтобы сделать разработку более надежной.
  4. Учитесь на ошибках:Записыватькаждый раз Debug из Опыта, превращая уроки в улучшенную практику.

Направления дальнейшего улучшения

  • Более широкое использование автоматизированных инструментов, таких как статический анализ и непрерывная интеграция, чтобы избежать человеческого контроля.
  • Продвигайте хорошие стандарты кодирования и пересматривайте культуру внутри команды, чтобы заложить основу для высококачественного исходного кода.
  • научись обнимать Баги, рассматривайте их как возможность отточить свои навыки и развить мышление.

Debug — это неизбежное путешествие в мире программирования. владелец Debug Благодаря мудрости мы можем не только улучшить нашу техническую мощь, но и развивать аналитические способности и способности решать, и в конечном итоге стать более разносторонними разработчиками. Можете ли вы существовать Debug Меньше беспокойства и больше чувства выполненного долга на дороге!


Надеюсь, эта статья вдохновит вас,Позвольте вам существовать Отладка из Откройте для себя мудрость в трясине,существуютрешать проблему из-за роста прибыли в процессе!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose