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

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

Сегодняшняя рекомендация: используйте 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода