Прежде чем начать статью, я хотел бы порекомендовать несколько хороших статей, написанных другими! Если вам интересно, вы также можете прочитать это!
Сегодняшняя рекомендация: используйте LLaMA-Factory для точной настройки большой модели LLM! Тренируйте свою собственную модель!
Ссылка на статью:https://cloud.tencent.com/developer/article/2469532
В этой статье от MGS показан весь процесс тонкой настройки большой модели с разных точек зрения.,Он имеет детальное содержание, четкую структуру и высокую практичность. первый,Статья начинается с конкретных сценариев.,Предложил проблему модели «идеологической консолидации»,А это приводит к необходимости тонкой настройки больших моделей.,Эта вступительная глава свежа и полна практического значения. существующийинструмент Аспекты выбора,Автор подробно перечисляет использованные проекты (LLaMA-Factory) и модели (Qwen2.5:7B).,и четко объяснить, почему были выбраны именно эти ресурсы,Позвольте читателям понять логику каждого шага принятия решения.
Повседневная жизнь разработчиков неотделима от Ошибка. Они были похожи на стелс-задачи, которые позволяли нам оттачивать свои навыки в бесчисленных ночах и мозговых штурмах. В этой статье мы поделимся некоторыми решениями Bug изметод и шаги с практическими примерами кода, которые помогут вам выжить. Debug Получите рост на этом пути.
Ошибки не появляются из воздуха. Они часто являются проявлением логики, крайних случаев, зависимостей или проблем среды разработки. Поиск основной причины ошибки требует ясного мышления и тщательного анализа.
Ошибка относится к ситуации, когда результаты работы программы не соответствуют ожиданиям. Это может выглядеть как:
Воспроизведение ошибки — первый шаг к ее решению. Без стабильных условий воспроизводимости результаты ремонта могут оказаться случайными.
Предполагается, что у нас есть функция Python обрабатывает данные, но существует и выдает исключение при определенных входных данных:
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
Используйте инструменты отладки или распечатывайте журналы, чтобы шаг за шагом подтвердить местонахождение ошибки.
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
pdb
Отладочный модульconsole.log
или инструменты разработчика браузераSystem.out.println
или IDE Встроенный отладчикКопайте глубже в код или среду, чтобы найти основную причину проблемы, а не ее симптомы.
существуют В приведенном выше примере,ZeroDivisionError
Это из-за ввода 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)) # Результат вывода нормальный
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]), [])
logging
модулей, чтобы избежать использования слишком большого количества print
。Если код сложный, вы можете использовать метод дихотомии, чтобы постепенно сузить масштаб проблемы. Закомментируйте половину кода, проверьте, не вызывает ли другая половина проблем, и, в свою очередь, сузьте область действия.
Используйте систему контроля версий (например, Git), чтобы просмотреть момент появления ошибки и изменения кода:
git bisect start
git bisect bad HEAD
git bisect good <last_known_good_commit>
Не допускайте повторения подобных проблем.
Запишите явление, причину и решение проблемы, чтобы предоставить рекомендации членам команды.
Регулярно обобщайте опыт отладки и превращайте уроки в практики для улучшения качества кода.
решать Bug это возможность для роста и предотвращения Bug Это воплощение совершенства. существования разрабатывается, мы можем, следуя некоторым передовым практикам, будем Bug Вероятность возникновения сведена к минимуму.
Написание кода, который легко понять и поддерживать, может эффективно уменьшить количество ошибок, вызванных запутанной логикой и неправильным именованием.
# Неправильное наименование
a = 100
b = 200
# Стандартизированное именование
user_age = 100
user_score = 200
Используйте стандартные инструменты кода:
flake8
или black
Каждый функциональный модуль фокусируется на выполнении одной задачи и избегает концентрации сложной логики вместе.
# Исходный код: за всю логику отвечает одна функция
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)))
Тестирование — это открытиескрытыйсуществовать Bug Модульное тестирование, интеграционное тестирование и сквозное тестирование являются мощными средствами, и к ним следует относиться серьезно.
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
Запустите тест:
pytest test_file.py
статическийанализироватьинструмент Можетсуществовать Открытие на этапе разработкикодсерединаизскрытыйсуществоватьвопрос。
mypy
(типисследовать)clang-tidy
# Нет аннотации типа
def add_numbers(a, b):
return a + b
# Добавить аннотацию типа
def add_numbers(a: int, b: int) -> int:
return a + b
бегать mypy
исследовать:
mypy script.py
Проверка кода — эффективный способ найти ошибки в командной разработке. Ошибок, вызванных индивидуальными недосмотрами, можно избежать путем перекрестной проверки членами команды.
Используйте инструменты проверки кода:
Создавайте автоматизированные процессы тестирования и развертывания, чтобы оперативно выявлять проблемы с помощью инструментов непрерывной интеграции, таких как Jenkins, GitHub Actions или GitLab CI/CD.
.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
существовать Debug Во время процесса крайне важно сохранять спокойствие и ясное мышление. Определенные навыки и образ мышления могут помочь нам более эффективно решать сложные проблемы.
Столкнувшись со сложной проблемой, постарайтесь разбить ее на более мелкие части одну за другой.
# оригинальная сложная функция
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
Баги обычно не существуютрешаются с первой попытки.,Особенно, когда задействовано несколько модулей и внешние зависимости. Записывайте каждую попытку, идеи и результаты,Избегайте повторных недопустимых операций.
каждый разрешать Bug Наконец, опыт, способный предотвратить подобные проблемы, обобщается и применяется в последующих разработках. Например:
Debug Это не только проблема и процесс, но и важная часть самосовершенствования программистов. понимая Bug суть, овладение эффективным Debug метод,а такжесуществоватьупражнятьсясередина Подвести итоги опыт, мы можем Bug в возможности для роста.
Debug — это неизбежное путешествие в мире программирования. владелец Debug Благодаря мудрости мы можем не только улучшить нашу техническую мощь, но и развивать аналитические способности и способности решать, и в конечном итоге стать более разносторонними разработчиками. Можете ли вы существовать Debug Меньше беспокойства и больше чувства выполненного долга на дороге!
Надеюсь, эта статья вдохновит вас,Позвольте вам существовать Отладка из Откройте для себя мудрость в трясине,существуютрешать проблему из-за роста прибыли в процессе!