|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
import re
|
|
|
import os
|
|
|
|
|
|
LOG_FILE = "fine_tune_pile.log"
|
|
|
OUTPUT_IMAGE = "loss_chart.png"
|
|
|
|
|
|
def plot_loss():
|
|
|
if not os.path.exists(LOG_FILE):
|
|
|
print(f"Файл {LOG_FILE} не найден.")
|
|
|
return
|
|
|
|
|
|
steps = []
|
|
|
losses = []
|
|
|
|
|
|
|
|
|
pattern = re.compile(r"Шаг (\d+).*Loss: (\d+\.\d+)")
|
|
|
|
|
|
with open(LOG_FILE, "r") as f:
|
|
|
for line in f:
|
|
|
match = pattern.search(line)
|
|
|
if match:
|
|
|
steps.append(int(match.group(1)))
|
|
|
losses.append(float(match.group(2)))
|
|
|
|
|
|
if not steps:
|
|
|
print("Данные для графика пока не найдены в логе.")
|
|
|
return
|
|
|
|
|
|
plt.figure(figsize=(10, 6))
|
|
|
plt.plot(steps, losses, label='Raw Loss', alpha=0.3, color='blue')
|
|
|
|
|
|
|
|
|
if len(losses) > 10:
|
|
|
window = 10
|
|
|
smooth_loss = [sum(losses[i:i+window])/window for i in range(len(losses)-window)]
|
|
|
plt.plot(steps[window:], smooth_loss, label='Smooth Loss (EMA)', color='red', linewidth=2)
|
|
|
|
|
|
plt.xlabel('Step')
|
|
|
plt.ylabel('Loss')
|
|
|
plt.title('JiRack 1B Training Progress')
|
|
|
plt.legend()
|
|
|
plt.grid(True, linestyle='--', alpha=0.6)
|
|
|
|
|
|
plt.savefig(OUTPUT_IMAGE)
|
|
|
print(f"График сохранен в {OUTPUT_IMAGE}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
plot_loss() |