[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:ml-engineer\u002Fti-throughput-profiling-bottlenecks":4,"config":212},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":112,"samples":126},"ml-engineer","ML Engineer","","ti-throughput-profiling-bottlenecks","Ti Throughput Profiling Bottlenecks","en",75,2400,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,109],{"key":19,"name":20,"count":11},"cml-distance-clustering-dimreduction","Cml Distance Clustering Dimreduction",{"key":22,"name":23,"count":11},"cml-gradient-boosting-mechanics","Cml Gradient Boosting Mechanics",{"key":25,"name":26,"count":11},"cml-linear-logistic-internals","Cml Linear Logistic Internals",{"key":28,"name":29,"count":11},"cml-probabilistic-models-calibration","Cml Probabilistic Models Calibration",{"key":31,"name":32,"count":11},"cml-svm-kernels-margins","Cml Svm Kernels Margins",{"key":34,"name":35,"count":11},"cml-trees-randomforest-internals","Cml Trees Randomforest Internals",{"key":37,"name":38,"count":11},"dl-architecture-layers","Dl Architecture Layers",{"key":40,"name":41,"count":11},"dl-initialization-optimizers","Dl Initialization Optimizers",{"key":43,"name":44,"count":11},"dl-losses-output-layers","Dl Losses Output Layers",{"key":46,"name":47,"count":11},"dl-normalization-regularization","Dl Normalization Regularization",{"key":49,"name":50,"count":11},"dl-sequence-attention","Dl Sequence Attention",{"key":52,"name":53,"count":11},"dl-training-dynamics-backprop","Dl Training Dynamics Backprop",{"key":55,"name":56,"count":11},"fe-binning-discretization","Fe Binning Discretization",{"key":58,"name":59,"count":11},"fe-categorical-encoding-mechanics","Fe Categorical Encoding Mechanics",{"key":61,"name":62,"count":11},"fe-interactions-basis-expansion","Fe Interactions Basis Expansion",{"key":64,"name":65,"count":11},"fe-numeric-transforms-distributions","Fe Numeric Transforms Distributions",{"key":67,"name":68,"count":11},"fe-temporal-cyclical-features","Fe Temporal Cyclical Features",{"key":70,"name":71,"count":11},"fe-text-highcardinality-features","Fe Text Highcardinality Features",{"key":73,"name":74,"count":11},"ml-data-preparation","Ml Data Preparation",{"key":76,"name":77,"count":11},"ml-deployment-serving","Ml Deployment Serving",{"key":79,"name":80,"count":11},"ml-experimentation-reproducibility","Ml Experimentation Reproducibility",{"key":82,"name":83,"count":11},"ml-model-selection-tuning","Ml Model Selection Tuning",{"key":85,"name":86,"count":11},"ml-model-training-evaluation","Ml Model Training Evaluation",{"key":88,"name":89,"count":11},"ml-monitoring-drift","Ml Monitoring Drift",{"key":91,"name":92,"count":11},"ml-problem-framing","Ml Problem Framing",{"key":94,"name":95,"count":11},"ml-scaling-performance","Ml Scaling Performance",{"key":97,"name":98,"count":11},"ti-checkpointing-fault-tolerance","Ti Checkpointing Fault Tolerance",{"key":100,"name":101,"count":11},"ti-cluster-scheduling-resources","Ti Cluster Scheduling Resources",{"key":103,"name":104,"count":11},"ti-distributed-strategies-sync","Ti Distributed Strategies Sync",{"key":106,"name":107,"count":11},"ti-input-pipeline-throughput","Ti Input Pipeline Throughput",{"key":8,"name":9,"count":11},{"key":110,"name":111,"count":11},"ti-training-determinism-numerics","Ti Training Determinism Numerics",[113,117,120,123],{"key":114,"name":115,"count":116},"classical-ml","Classical ML",450,{"key":118,"name":119,"count":116},"deep-learning","Deep Learning",{"key":121,"name":122,"count":116},"feature-engineering","Feature Engineering",{"key":124,"name":125,"count":116},"training-infrastructure","Training Infrastructure",[127,145,159,173,186,199],{"id":128,"topic":9,"difficulty":129,"body":130,"options":131,"correct_key":139,"explanation":144},"01a05d13-8dd6-7da3-b6d8-546bb40dd82e",2,"A profiler breaks one training step (average of many steps) into phases:\n```\ninput_wait   : 2 ms\nforward      : 18 ms\nbackward     : 34 ms\ncollective    : 6 ms\noptimizer    : 4 ms\n-------------------\nstep total   : 64 ms\n```\nWhich phase is the best target for the first optimization attempt?",[132,135,138,141],{"key":133,"text":134},"a","input_wait, since any nonzero wait means the pipeline is starving the GPU",{"key":136,"text":137},"b","collective, because inter-rank communication tends to dominate hidden costs in a synchronous step",{"key":139,"text":140},"c","backward, since it is by far the largest phase",{"key":142,"text":143},"d","optimizer, because its 4 ms is pure overhead, and overhead should be eliminated before real compute","backward (34 ms) is more than half the step and larger than every other phase combined; a fixed percentage improvement there yields the largest absolute time saved. input_wait is only 2 ms (not a bottleneck), collective is a modest 6 ms here, and optimizer's 4 ms is normal, not 'pure overhead'.",{"id":146,"topic":9,"difficulty":147,"body":148,"options":149,"correct_key":133,"explanation":158},"01a05d13-8dd9-72c3-9203-3ad954ed4905",1,"In a per-step time breakdown (input wait, forward, backward, collective, optimizer, host overhead), which phase represents time the process spends stalled waiting for the next batch to become available?",[150,152,154,156],{"key":133,"text":151},"input wait",{"key":136,"text":153},"forward",{"key":139,"text":155},"collective",{"key":142,"text":157},"host overhead","input wait is defined as the time the training loop is blocked waiting for the data pipeline to hand it the next batch. Forward and collective are active compute\u002Fcommunication phases, and host overhead refers to CPU-side dispatch cost, not waiting on data.",{"id":160,"topic":9,"difficulty":161,"body":162,"options":163,"correct_key":142,"explanation":172},"01a05d13-8dda-75bc-a568-818df84e4b8d",3,"Two profiled steps from the same job, both with global batch size and model unchanged:\nStep A: input_wait=1ms, forward=20ms, backward=38ms, collective=5ms, total=64ms.\nStep B (taken 500 steps later): input_wait=27ms, forward=20ms, backward=38ms, collective=5ms, total=90ms.\nForward, backward, and collective are unchanged between the two steps. What most plausibly explains step B being 26ms slower?",[164,166,168,170],{"key":133,"text":165},"the model became larger between the two steps",{"key":136,"text":167},"the collective became slower because more ranks joined",{"key":139,"text":169},"the optimizer switched to a more expensive update rule",{"key":142,"text":171},"the data pipeline fell behind","Every compute\u002Fcommunication phase (forward, backward, collective) is identical between A and B; only input_wait grew, by almost exactly the 26ms gap. That isolates the slowdown to the data pipeline falling behind, not to compute, communication, or the model changing (which forward\u002Fbackward would reflect).",{"id":174,"topic":9,"difficulty":129,"body":175,"options":176,"correct_key":133,"explanation":185},"01a05d13-8ddc-76c8-8c9a-8d2346d9f71d","```python\ntimes = []\nfor i in range(10):\n    t0 = time.perf_counter()\n    loss = train_step(batch)\n    t1 = time.perf_counter()\n    times.append(t1 - t0)\nprint(sum(times) \u002F len(times))\n```\nOn a GPU where `train_step` launches asynchronous kernels and returns before they finish, what is the main problem with this timing code?",[177,179,181,183],{"key":133,"text":178},"`t1` is captured right after launch, before the kernels finish, so the measured duration understates GPU work",{"key":136,"text":180},"`perf_counter()` is not precise enough to time single steps",{"key":139,"text":182},"10 iterations is not enough samples to compute any average",{"key":142,"text":184},"the loop should switch from `time.perf_counter()` to `time.time()`, which is the timer built specifically for GPU-launched code","GPU kernel launches are asynchronous: the Python call returns as soon as the kernel is queued, not when it finishes. Without an explicit synchronization point before `t1`, the wall-clock delta mostly measures dispatch overhead, not actual compute time. The other options are not the actual defect here.",{"id":187,"topic":9,"difficulty":129,"body":188,"options":189,"correct_key":133,"explanation":198},"01a05d13-8dde-7542-8ed9-014a5978dcaa","A team times the first 5 training steps of a fresh process to estimate steady-state throughput: [420ms, 38ms, 36ms, 37ms, 36ms]. Using the mean of these 5 numbers as 'the' step time, what mistake are they making?",[190,192,194,196],{"key":133,"text":191},"the first step includes one-time warm-up cost, which drags the mean upward",{"key":136,"text":193},"5 samples is a statistically invalid sample size for any average",{"key":139,"text":195},"the mean is the wrong summary statistic and standard deviation should be reported instead",{"key":142,"text":197},"step time naturally decreases over the life of a run, so early steps are meaningless anyway","The 420ms first step is an outlier caused by one-time costs that don't recur (thread pool\u002Fallocator warm-up, kernel selection, JIT\u002Fautotune). Including it in a 5-sample mean pulls the average far above the steady-state value (~37ms) that will hold for the rest of the run.",{"id":200,"topic":9,"difficulty":161,"body":201,"options":202,"correct_key":139,"explanation":211},"01a05d13-8de0-70ef-b17a-164440b31571","30 consecutive step times were recorded (in ms), the first being a one-time warm-up outlier:\n```\n[178, 21, 20, 22, 21, 20, 21, 22, 21, 20,\n  21, 20, 22, 21, 20, 21, 22, 21, 20, 21,\n  22, 21, 20, 21, 22, 21, 20, 21, 22, 21]\n```\nWhich of these best describes the effect of computing the mean vs. the median over all 30 values?",[203,205,207,209],{"key":133,"text":204},"mean and median will be nearly identical because both are equally sensitive to a single outlier",{"key":136,"text":206},"the median will be pulled upward by the outlier, while the mean stays close to the typical step time",{"key":139,"text":208},"the mean gets pulled up by the 178ms outlier; the median stays near ~21ms",{"key":142,"text":210},"neither statistic is affected, since one outlier out of 30 values is too small a fraction to matter","One outlier among 30 values shifts the mean by roughly (178-21)\u002F30 ≈ 5ms, a real and measurable inflation. The median, being the middle-ranked value, is unaffected by the size of a single extreme value as long as it's still just one outlier — it stays at the typical ~21ms.",{"fields":213,"seniorities":436,"interview_shapes":437,"locales":442,"oauth":444,"question_count":447,"coach_enabled":448,"jd_match_enabled":448},[214,239,259,275,299,312,331,350,372,391,406,428],{"key":215,"name_tr":216,"name_en":216,"sort":147,"specializations":217},"backend","Backend",[218,221,224,227,230,233,236],{"key":219,"name":220,"field":215},"general","Genel",{"key":222,"name":223,"field":215},"go","Go",{"key":225,"name":226,"field":215},"python","Python",{"key":228,"name":229,"field":215},"java","Java",{"key":231,"name":232,"field":215},"csharp","C#\u002F.NET",{"key":234,"name":235,"field":215},"nodejs","Node.js",{"key":237,"name":238,"field":215},"php","PHP",{"key":240,"name_tr":241,"name_en":241,"sort":129,"specializations":242},"frontend","Frontend",[243,244,247,250,253,256],{"key":219,"name":220,"field":240},{"key":245,"name":246,"field":240},"javascript","JavaScript",{"key":248,"name":249,"field":240},"typescript","TypeScript",{"key":251,"name":252,"field":240},"react","React",{"key":254,"name":255,"field":240},"vue","Vue",{"key":257,"name":258,"field":240},"angular","Angular",{"key":260,"name_tr":261,"name_en":261,"sort":161,"specializations":262},"fullstack","Fullstack",[263,264,265,266,267,268,269,270,271,272,273,274],{"key":219,"name":220,"field":260},{"key":222,"name":223,"field":215},{"key":225,"name":226,"field":215},{"key":228,"name":229,"field":215},{"key":231,"name":232,"field":215},{"key":234,"name":235,"field":215},{"key":237,"name":238,"field":215},{"key":245,"name":246,"field":240},{"key":248,"name":249,"field":240},{"key":251,"name":252,"field":240},{"key":254,"name":255,"field":240},{"key":257,"name":258,"field":240},{"key":276,"name_tr":277,"name_en":277,"sort":278,"specializations":279},"devops-cloud","DevOps \u002F Cloud",4,[280,281,284,287,290,293,296],{"key":219,"name":220,"field":276},{"key":282,"name":283,"field":276},"aws","AWS",{"key":285,"name":286,"field":276},"gcp","GCP",{"key":288,"name":289,"field":276},"azure","Azure",{"key":291,"name":292,"field":276},"kubernetes","Kubernetes",{"key":294,"name":295,"field":276},"terraform","Terraform",{"key":297,"name":298,"field":276},"linux","Linux",{"key":300,"name_tr":301,"name_en":301,"sort":302,"specializations":303},"ai-engineer","AI Engineer",5,[304,305,306,309],{"key":219,"name":220,"field":300},{"key":225,"name":226,"field":300},{"key":307,"name":308,"field":300},"llm-rag","LLM\u002FRAG",{"key":310,"name":311,"field":300},"mlops","MLOps",{"key":313,"name_tr":314,"name_en":315,"sort":316,"specializations":317},"database","Veritabanı","Database",6,[318,319,322,325,328],{"key":219,"name":220,"field":313},{"key":320,"name":321,"field":313},"postgresql","PostgreSQL",{"key":323,"name":324,"field":313},"mysql","MySQL",{"key":326,"name":327,"field":313},"mongodb","MongoDB",{"key":329,"name":330,"field":313},"redis","Redis",{"key":332,"name_tr":333,"name_en":334,"sort":335,"specializations":336},"mobile","Mobil","Mobile",7,[337,338,341,344,347],{"key":219,"name":220,"field":332},{"key":339,"name":340,"field":332},"ios-swift","iOS (Swift)",{"key":342,"name":343,"field":332},"android-kotlin","Android (Kotlin)",{"key":345,"name":346,"field":332},"flutter","Flutter",{"key":348,"name":349,"field":332},"react-native","React Native",{"key":351,"name_tr":352,"name_en":353,"sort":354,"specializations":355},"security","Güvenlik","Security",8,[356,357,360,363,366,369],{"key":219,"name":220,"field":351},{"key":358,"name":359,"field":351},"appsec","AppSec",{"key":361,"name":362,"field":351},"offensive-pentest","Offensive \u002F Pentest",{"key":364,"name":365,"field":351},"cloud-security","Cloud Security",{"key":367,"name":368,"field":351},"devsecops","DevSecOps",{"key":370,"name":371,"field":351},"blue-team-incident","Blue Team \u002F Incident",{"key":373,"name_tr":374,"name_en":375,"sort":376,"specializations":377},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[378,379,382,385,388],{"key":219,"name":220,"field":373},{"key":380,"name":381,"field":373},"test-automation","Test Automation",{"key":383,"name":384,"field":373},"sdet","SDET",{"key":386,"name":387,"field":373},"performance-testing","Performance Testing",{"key":389,"name":390,"field":373},"mobile-qa","Mobile QA",{"key":392,"name_tr":393,"name_en":393,"sort":394,"specializations":395},"data-engineer","Data Engineer",10,[396,397,400,403],{"key":219,"name":220,"field":392},{"key":398,"name":399,"field":392},"pipelines-etl","Pipelines \u002F ETL",{"key":401,"name":402,"field":392},"streaming","Streaming",{"key":404,"name":405,"field":392},"warehousing","Warehousing",{"key":407,"name_tr":408,"name_en":409,"sort":410,"specializations":411},"game-dev","Oyun Geliştirme","Game Development",11,[412,413,416,419,422,425],{"key":219,"name":220,"field":407},{"key":414,"name":415,"field":407},"unity-csharp","Unity (C#)",{"key":417,"name":418,"field":407},"unreal-cpp","Unreal (C++)",{"key":420,"name":421,"field":407},"gameplay","Gameplay",{"key":423,"name":424,"field":407},"graphics-rendering","Graphics \u002F Rendering",{"key":426,"name":427,"field":407},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":5,"name_tr":6,"name_en":6,"sort":429,"specializations":430},12,[431,432,433,434,435],{"key":219,"name":220,"field":5},{"key":114,"name":115,"field":5},{"key":121,"name":122,"field":5},{"key":118,"name":119,"field":5},{"key":124,"name":125,"field":5},[14,15,16],{"junior":438,"mid":440,"senior":441},{"questions":439,"median_sec":3},20,{"questions":439,"median_sec":3},{"questions":439,"median_sec":3},[443,10],"tr",[445,446],"google","github",28950,true]