adyoi commited on
Commit
00c2a02
·
verified ·
1 Parent(s): 4435d51

Upload train.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. train.py +34 -3
train.py CHANGED
@@ -61,7 +61,7 @@ def estimate_loss(model, data, args, device):
61
  return sum(losses) / len(losses)
62
 
63
 
64
- def main():
65
  parser = argparse.ArgumentParser(description="Latih model Indigo dari scratch")
66
  parser.add_argument("--data", nargs="+", default=["data/sample.txt"], help="path file/folder teks untuk training")
67
  parser.add_argument("--out", default="out", help="folder output checkpoint")
@@ -83,7 +83,7 @@ def main():
83
  parser.add_argument("--tokenizer", default="char", choices=["char", "bpe"])
84
  parser.add_argument("--vocab-size", type=int, default=512, help="ukuran vocab untuk tokenizer bpe")
85
  parser.add_argument("--val-fraction", type=float, default=0.1, help="proporsi file untuk validasi")
86
- args = parser.parse_args()
87
 
88
  torch.manual_seed(args.seed)
89
  if args.device == "auto":
@@ -111,6 +111,7 @@ def main():
111
  start_step = 0
112
  init_meta = None
113
  config = None
 
114
  if args.init_from:
115
  init_state, init_meta, init_opt = load_init(args.init_from)
116
  config = GPTConfig(**init_meta["config"])
@@ -125,9 +126,10 @@ def main():
125
  tokenizer = BPETokenizer.train(all_text, args.vocab_size)
126
  tinfo = tokenizer.state()
127
  n_chars = len(all_text.encode("utf-8"))
 
128
  print(
129
  f"tokenizer=bpe | vocab={tokenizer.vocab_size} | "
130
- f"kompresi {n_chars:,} karakter -> rasio {n_chars / max(1, len(tokenizer.encode(all_text))):.2f}x"
131
  )
132
  else:
133
  tokenizer = CharTokenizer.from_text(all_text)
@@ -232,6 +234,35 @@ def main():
232
  torch.save(optimizer.state_dict(), os.path.join(args.out, "indigo_optimizer.pt"))
233
  print(f"model tersimpan di {final_path} (+_meta.json, indigo_optimizer.pt)")
234
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
 
236
  if __name__ == "__main__":
237
  main()
 
61
  return sum(losses) / len(losses)
62
 
63
 
64
+ def main(argv=None):
65
  parser = argparse.ArgumentParser(description="Latih model Indigo dari scratch")
66
  parser.add_argument("--data", nargs="+", default=["data/sample.txt"], help="path file/folder teks untuk training")
67
  parser.add_argument("--out", default="out", help="folder output checkpoint")
 
83
  parser.add_argument("--tokenizer", default="char", choices=["char", "bpe"])
84
  parser.add_argument("--vocab-size", type=int, default=512, help="ukuran vocab untuk tokenizer bpe")
85
  parser.add_argument("--val-fraction", type=float, default=0.1, help="proporsi file untuk validasi")
86
+ args = parser.parse_args(argv)
87
 
88
  torch.manual_seed(args.seed)
89
  if args.device == "auto":
 
111
  start_step = 0
112
  init_meta = None
113
  config = None
114
+ comp_ratio = 1.0
115
  if args.init_from:
116
  init_state, init_meta, init_opt = load_init(args.init_from)
117
  config = GPTConfig(**init_meta["config"])
 
126
  tokenizer = BPETokenizer.train(all_text, args.vocab_size)
127
  tinfo = tokenizer.state()
128
  n_chars = len(all_text.encode("utf-8"))
129
+ comp_ratio = n_chars / max(1, len(tokenizer.encode(all_text)))
130
  print(
131
  f"tokenizer=bpe | vocab={tokenizer.vocab_size} | "
132
+ f"kompresi {n_chars:,} karakter -> rasio {comp_ratio:.2f}x"
133
  )
134
  else:
135
  tokenizer = CharTokenizer.from_text(all_text)
 
234
  torch.save(optimizer.state_dict(), os.path.join(args.out, "indigo_optimizer.pt"))
235
  print(f"model tersimpan di {final_path} (+_meta.json, indigo_optimizer.pt)")
236
 
237
+ stats = {
238
+ "out": args.out,
239
+ "device": device,
240
+ "backend": "pytorch",
241
+ "tokenizer": tinfo.get("type", "char"),
242
+ "vocab_size": tokenizer.vocab_size,
243
+ "compression_ratio": round(comp_ratio, 4),
244
+ "tokens_train": len(train_data),
245
+ "tokens_val": len(val_data),
246
+ "files_train": max(0, len(files) - n_val),
247
+ "files_val": n_val,
248
+ "steps_trained": args.steps,
249
+ "total_steps": total_steps,
250
+ "best_val": best_val if best_val != float("inf") else None,
251
+ "last_val": last_val,
252
+ "nats_per_char_best": (
253
+ round(best_val / comp_ratio, 4) if best_val != float("inf") and comp_ratio else None
254
+ ),
255
+ "params_million": round(model.num_params() / 1e6, 4),
256
+ "config": config.__dict__,
257
+ "args": {k: v for k, v in vars(args).items() if k != "data"},
258
+ "elapsed_sec": round(time.time() - t0, 1),
259
+ }
260
+ print(
261
+ f"ringkasan: best_val={stats['best_val']} | "
262
+ f"nats/karakter={stats['nats_per_char_best']} | params={stats['params_million']}M"
263
+ )
264
+ return stats
265
+
266
 
267
  if __name__ == "__main__":
268
  main()