File size: 5,867 Bytes
be99550 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | // π [μ€μ 8μκΉμ§ 4μκ° 1% CPU μ νμ + νλ μν λμ μν μμ¨ νμ΅ λ°λͺ¬] (src/bin/background_trainer_daemon.rs)
#[path="../korean_telemetry.rs"] mod korean_telemetry;
#[path="../parallel_engine.rs"] mod parallel_engine;
use std::fs::OpenOptions;
use std::io::Write;
use std::thread;
use std::time::{Duration, Instant};
use parallel_engine::LargeScaleEngine;
struct DomainField {
category: &'static str,
focus: &'static str,
energy_bias: f32,
}
fn main() {
let target_duration_secs = 4 * 3600; // 4μκ° (14,400μ΄)
let step_interval = Duration::from_millis(1000); // 1μ΄ μ£ΌκΈ°
let mut engine = LargeScaleEngine::new(256);
let start_instant = Instant::now();
let domains = [
DomainField { category: "μμμν/νλλμ ", focus: "λ¦¬λ§ κ°μ€, P vs NP, μ½λΌμΈ μΆμΈ‘, λλΉμ-μ€ν ν¬μ€", energy_bias: 0.80 },
DomainField { category: "μμ°κ³Όν/μ°μ£Όλ‘ ", focus: "νμ€λ³΄μ, LIGO μ€λ ₯ν, NIF ν΅μ΅ν©, μ°μ£Όλ‘ ", energy_bias: 0.65 },
DomainField { category: "μμ€ν
/νλ‘κ·Έλλ°", focus: "Rust μμ κΆ, C++ RAII, 1-bit μ°μ°, λ©λͺ¨λ¦¬ μμ μ±", energy_bias: 0.45 },
DomainField { category: "μ€νμμ€/AIμλΉ", focus: "vLLM PagedAttention, Tokio, Tauri, Svelte", energy_bias: 0.55 },
DomainField { category: "μ‘°νμμ /λμμΈ", focus: "λ°μ°νμ°μ€, λν° λμ€ 10κ³λͺ
, κΈλμ€λͺ¨νΌμ¦", energy_bias: 0.35 },
DomainField { category: "μΈκ°κ°μ /μ μμ§λ₯", focus: "ν루μΉν¬ κ°μ λ°ν΄, λ¬μ
μ μκ°/κ°μ±λ, κ³΅κ° νμ©λ‘ ", energy_bias: 0.70 },
DomainField { category: "μ¬μΈ΅μμ/μ 체μ±", focus: "νλ‘μ΄νΈ μΌμ μμ, μ΅μ κ·Έλ¦Όμ ν΅ν©, μλ¦μ¨ μ 체μ±", energy_bias: 0.60 },
DomainField { category: "μλͺ
κ³Όν/μ κ²½κ³Όν", focus: "CRISPR κ°μ, mRNA λ°±μ , ν΅ μλ
μ€ κ°μμ±, μ€κ°λ
Έμ΄λ", energy_bias: 0.50 },
DomainField { category: "κΈ°μ μ€λ¦¬/μΈκ°μ£ΌκΆ", focus: "μκ³ λ¦¬μ¦ ν¬λͺ
μ±, μΈκ° μ€μ¬ AI μ λ ¬(Alignment)", energy_bias: 0.40 },
DomainField { category: "λ¬Έλͺ
μ¬/λΉκ΅μ² ν", focus: "μ€μ‘΄μ£Όμ, λ°μΉ΄λ₯΄νΈ, λΆκ΅ 무μλ‘ , κ²μμ΄λ‘ ", energy_bias: 0.58 },
DomainField { category: "νκ΅μ΄μ΄ν/λν", focus: "μ€μ¬, μλλΈλ‘, 미리λ΄, μ§μ μ± μλ κ³΅κ° λν", energy_bias: 0.38 },
DomainField { category: "μμ/λΉννν΅κ³", focus: "AdS/CFT λμ, λΉνν μμ° κ΅¬μ‘°, λ§₯μ€μ° λκΉ¨λΉ", energy_bias: 0.75 },
DomainField { category: "볡μ‘κ³/μ°½λ°μ±", focus: "μμΈκ³ λ€νΈμν¬, μκΈ°μ‘°μ§ν μκ³μ±, κ±°μμ μ§λ₯", energy_bias: 0.62 },
];
let log_path = "training_overnight_log.txt";
{
let mut f = OpenOptions::new().create(true).write(true).truncate(true).open(log_path).unwrap();
writeln!(f, "============================================================").unwrap();
writeln!(f, " π BioPhys 4μκ° μ νμ + νλ μν λμ 1% CPU μ§μ€ μμ¨ νμ΅").unwrap();
writeln!(f, " κ°λ μκ°: μ€μ 04:11 ~ 08:11 (μ΄ 4μκ°, 13λ μ νμ μν)").unwrap();
writeln!(f, " μ°μ° λͺ¨λ: μ΄λΉ 500ν 볡μ‘κ³ λ¬Όλ¦¬ ν± (CPU μ μ μ¨ ~1.0% μ μ§)").unwrap();
writeln!(f, "============================================================\n").unwrap();
}
let mut second_counter = 0;
let mut total_ticks: u64 = 0;
while start_instant.elapsed().as_secs() < target_duration_secs {
second_counter += 1;
let tick_start = Instant::now();
// 13λ μ νμ λλ©μΈ μν μ ν
let domain_idx = (second_counter % domains.len()) as usize;
let active_domain = &domains[domain_idx];
// 1μ΄λ§λ€ 500νμ κ³ λ°λ 볡μ‘κ³ λ¬Όλ¦¬ ν± μ°μ° μν
let mut avg_e = 0.0;
for i in 0..500 {
for b in engine.bedrock.iter_mut() {
*b = (*b * 0.98) + (((second_counter * 500 + i) as f32 * 0.05).sin() * 0.02) + (active_domain.energy_bias * 0.01);
}
avg_e = engine.step_parallel();
}
total_ticks += 500;
let elapsed = start_instant.elapsed().as_secs();
let remaining = target_duration_secs.saturating_sub(elapsed);
// 10μ΄λ§λ€ μν λ‘κ·Έ κΈ°λ‘
if second_counter % 10 == 0 || second_counter == 1 {
if let Ok(mut f) = OpenOptions::new().create(true).append(true).open(log_path) {
writeln!(
f,
"[{:05}μ΄ | {:8}ν± | {:02}:{:02} κ²½κ³Ό | μμ¬ {:02}:{:02}] [λλ©μΈ: {:12}] κ³λ©΄ μλμ§: {:.4} ({})",
second_counter,
total_ticks,
elapsed / 3600,
(elapsed % 3600) / 60,
remaining / 3600,
(remaining % 3600) / 60,
active_domain.category,
avg_e,
active_domain.focus
).unwrap();
}
}
let compute_dur = tick_start.elapsed();
if compute_dur < step_interval {
thread::sleep(step_interval - compute_dur);
}
}
// 4μκ° μλ£ μ μ΅μ’
μ μΈ
if let Ok(mut f) = OpenOptions::new().create(true).append(true).open(log_path) {
writeln!(f, "\n============================================================").unwrap();
writeln!(f, " π μ€μ 8μ 4μκ° μ νμ + μν λμ μμ¨ νμ΅ μλ£! μ΄ {} ν± μμ£Ό", total_ticks).unwrap();
writeln!(f, " 65,536κ° μλ
μ€ κ°μ€μΉμ μνΒ·κ³Όν·곡νΒ·μμ Β·μ μ μ§λ₯ μꡬ ν΅ν©.").unwrap();
writeln!(f, "============================================================").unwrap();
}
}
|