[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:ml-engineer\u002Fti-cluster-scheduling-resources":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-cluster-scheduling-resources","Ti Cluster Scheduling Resources","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,100,103,106,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":8,"name":9,"count":11},{"key":101,"name":102,"count":11},"ti-distributed-strategies-sync","Ti Distributed Strategies Sync",{"key":104,"name":105,"count":11},"ti-input-pipeline-throughput","Ti Input Pipeline Throughput",{"key":107,"name":108,"count":11},"ti-throughput-profiling-bottlenecks","Ti Throughput Profiling Bottlenecks",{"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":142,"explanation":144},"01a05d13-8ca8-7c53-a13a-5dbc35c7ec82",1,"A training job requests 8 GPUs with gang (all-or-nothing) scheduling: either all 8 ranks start together or none start. The cluster currently has 8 GPUs free in total, but they sit on 8 different nodes with only 1 free GPU per node, while the job's launch script requires all 8 GPUs on a single node. What happens to the job?",[132,135,138,141],{"key":133,"text":134},"a","It starts immediately, using one free GPU per node across the 8 nodes, since the scheduler only tallies the cluster-wide total.",{"key":136,"text":137},"b","It starts with 7 GPUs now and adds the 8th once available.",{"key":139,"text":140},"c","The scheduler cancels the job outright for lacking any pre-labeled, GPU-tagged nodes to place it on.",{"key":142,"text":143},"d","It stays pending; no single node has 8 free GPUs for its single-node requirement.","Gang scheduling checks the job's actual placement constraint, not just the cluster-wide free count; 8 GPUs one-per-node cannot host an 8-GPU single-node job.",{"id":146,"topic":9,"difficulty":147,"body":148,"options":149,"correct_key":139,"explanation":158},"01a05d13-8cad-7c1a-8cae-3b3b9cc48c4e",3,"A cluster has 10 nodes of 8 GPUs each (80 total). At a given moment, 16 GPUs are free, but spread as exactly 2 free GPUs on each of 8 different nodes. A pending job needs 8 GPUs on a single node (its ranks use a fast intra-node link and cannot span nodes). Later, running jobs finish and the same 16 free GPUs end up concentrated as 8 free GPUs each on only 2 nodes. What changed for the pending job?",[150,152,154,156],{"key":133,"text":151},"Nothing changed; the free GPU count stayed at 16 both times.",{"key":136,"text":153},"It still cannot start; 2 nodes cannot host a job spread across several nodes, regardless of how much capacity sits on each one.",{"key":139,"text":155},"It can now start, since the same idle capacity now sits on nodes large enough.",{"key":142,"text":157},"The scheduler must restart every running job to free up GPUs first.","Placement, not just total free count, decides whether a single-node job can start: 16 GPUs went from unusable, scattered, to sufficient, concentrated, purely by arrangement.",{"id":160,"topic":9,"difficulty":161,"body":162,"options":163,"correct_key":136,"explanation":172},"01a05d13-8cb0-7254-8c43-16a8b08d1659",2,"A cluster's gang scheduler admits jobs as groups defined by a spec like the one below.\n```yaml\napiVersion: scheduling.k8s.io\u002Fv1\nkind: PodGroup\nspec:\n  minMember: 8\n```\nWhat does `minMember: 8` enforce here?",[164,166,168,170],{"key":133,"text":165},"It starts pods one at a time until 8 have launched.",{"key":136,"text":167},"The group starts only once at least 8 pods can be placed at the same time.",{"key":139,"text":169},"The job is limited to a maximum of 8 pods for its lifetime.",{"key":142,"text":171},"The scheduler reserves 8 extra idle pods as a buffer.","`minMember` is the gang-scheduling threshold for simultaneous admission, not a start-order rule, a lifetime cap, or an idle-buffer reservation.",{"id":174,"topic":9,"difficulty":161,"body":175,"options":176,"correct_key":133,"explanation":185},"01a05d13-8cb3-72e0-adb8-04c04bbf44de","A queue processes jobs first-come-first-served, but resources free up gradually as small jobs finish. A large job needing 32 GPUs has sat at the head of the queue for hours without starting, because a steady stream of newly submitted 4-GPU jobs keeps grabbing GPUs the moment they free up. What is this pattern called, and what feature directly addresses it?",[177,179,181,183],{"key":133,"text":178},"This is starvation; a reservation guarantees the large job's turn once GPUs accumulate.",{"key":136,"text":180},"This is priority inversion; the fix is equal priority for all jobs, since that gap is what created the imbalance.",{"key":139,"text":182},"This is thrashing; the fix is reducing the cluster's node count.",{"key":142,"text":184},"This is deadlock; the fix is resubmitting the job with fewer GPUs.","The large job isn't blocked by a circular dependency or resource oscillation, it simply never gets its turn, which a guaranteed reservation directly prevents.",{"id":187,"topic":9,"difficulty":147,"body":188,"options":189,"correct_key":139,"explanation":198},"01a05d13-8cb6-7624-8614-f3a4b68b029d","A scheduler uses backfill: a smaller job may run ahead of a larger job queued earlier, but only if doing so does not delay the larger job's earliest possible start time. The large job (queued first, needs 16 GPUs) is projected to have enough GPUs to start in 3 hours. A newly submitted small job needs 2 currently-free GPUs and is estimated to run for 2 hours. Does backfill allow the small job to run now?",[190,192,194,196],{"key":133,"text":191},"No, backfill only ever runs jobs strictly in submission order.",{"key":136,"text":193},"No, backfill applies only to jobs of the same size class.",{"key":139,"text":195},"Yes; its 2-hour run finishes before the 3-hour point when the large job needs them.",{"key":142,"text":197},"Yes, but only with a manual administrator approval each time.","Backfill's whole point is running smaller jobs out of order when it provably won't delay the job ahead of them; a 2-hour job finishing before the deadline satisfies that.",{"id":200,"topic":9,"difficulty":161,"body":201,"options":202,"correct_key":133,"explanation":211},"01a05d13-8cbc-73ad-be81-92a38f05fdc9","A job needs 8 GPUs total. Layout 1 places all 8 on a single node (connected by a fast intra-node link). Layout 2 places 2 GPUs on each of 4 separate nodes (connected by the cluster network, noticeably slower than the intra-node link). Assuming both layouts are otherwise identical, which one typically finishes the same synchronous training job faster, and why?",[203,205,207,209],{"key":133,"text":204},"Layout 1, since synchronization stays on the fast intra-node link rather than the network.",{"key":136,"text":206},"Layout 2, since splitting GPUs across nodes multiplies available bandwidth.",{"key":139,"text":208},"Both finish equally fast; gang scheduling only decides when ranks start, not step speed.",{"key":142,"text":210},"Layout 2, since more nodes give the job more CPU cores.","The bottleneck is inter-GPU communication bandwidth for synchronization; Layout 1 keeps it on the fast link, and neither more nodes nor start time changes that.",{"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":129,"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":161,"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":147,"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]