[{"data":1,"prerenderedAt":251},["ShallowReactive",2],{"project-31494328":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":42,"post_text":45,"what":46,"said":78,"maker_in_thread":166,"shape":175,"grid":177,"attempts":213,"same_week":214,"maker_shows":44,"maker_hidden":243,"reader_version":244,"card":245},"31494328","SymForce","Fast symbolic computation, code generation, and optimization","title","Show HN: SymForce – Fast symbolic computation, code generation, and optimization","https:\u002F\u002Fgithub.com\u002Fsymforce-org\u002Fsymforce","github.com","haykmartiros",1653410311,2022,125,17,489,2570,20,"notable","dev_tools","symbolic code generation library","library",[24,25,26,27,28],"symbolic computation","code generation","nonlinear optimization","robotics","sympy","mixed",0.309,{"positive":32,"neutral":33,"mixed":34,"critical":35},6,4,0,2,12,{"idea":38,"performance":40,"execution":41},{"positive":39,"critical":34},1,{"positive":34,"critical":35},{"positive":34,"critical":34},[43,44,34,39,34,39,34,44,44,34,44,34,43,43,43,43,43],5,3,"Author here. I’m unreasonably excited to share this library that we’re open-sourcing today — our team has been building it for five years and these ideas have been a passion of mine for fifteen.\n\nSymForce is a library that makes it easy to code a problem once in Python with an augmented SymPy API (backed by C++), experiment with it symbolically, generate optimized code in C++ or any backend language, and then run highly efficient nonlinear optimization problems based on the original problem definition. This workflow elegantly solves a wide variety of tasks in robotics and related domains, and ",{"problem":47,"audience":53,"pricing":57,"motivation":58,"time_to_build":57,"stack":62,"openness":75,"stage":76,"team_size":77},{"value":48,"source":49,"evidence":50},"Coding and optimizing robotics algorithms symbolically with less handwritten code and faster runtime","maker",[51],{"id":52},"post",{"value":54,"source":49,"evidence":55},"Robotics engineers, students, research teams and tech companies writing algorithmic code",[56],{"id":52},null,{"value":59,"source":49,"evidence":60},"Released to benefit the open-source community; developed at Skydio for drone autonomy",[61],{"id":52},[63,67,71],{"value":64,"source":49,"evidence":65},"Python",[66],{"id":52},{"value":68,"source":49,"evidence":69},"SymPy",[70],{"id":52},{"value":72,"source":49,"evidence":73},"C++",[74],{"id":52},"open_source","launched","company",{"praise":79,"objections":102,"requests":121,"questions":126,"alternatives":145},[80,96],{"value":81,"source":82,"evidence":83},"Symbolic Python workflow with code generation is useful and exciting","commenter",[84,88,92],{"id":85,"by":86,"text":87},"31495088","crubier","I think the approach makes a lot of sense. In the past I’ve been using Matlab and Mathematica to solve robotics \u002F trajectories problems symbolically and then generate code from…",{"id":89,"by":90,"text":91},"31496257","linty_samosa","Fascinating and incredibly exciting -- can't wait to see how the world uses this library",{"id":93,"by":94,"text":95},"31496711","ebaabe","This is super awesome! Can't wait to see what it enables!",{"value":97,"source":49,"evidence":98},"Fast runtime performance for small problems",[99],{"id":100,"by":11,"text":101},"31498680","Part of the motivation for SymForce was in fact serious attempts (multiple months) by us to do similar things with TensorFlow XLA and being stymied by some of these effects. Many…",[103,114],{"value":104,"source":82,"evidence":105},"Benchmarks against TensorFlow and JAX may be unfair, especially batch size choices",[106,110],{"id":107,"by":108,"text":109},"31498014","albertzeyer","How does it compare with TensorFlow (graph-based, i.e. symbolic) or Theano? Or maybe also JAX, which you could also see as symbolic. In the paper it is briefly mentioned that…",{"id":111,"by":112,"text":113},"31500271","jxy","> amortizing across a batch size of 1000 This put the problem outside of L2 and thus is not a fair comparison, especially if your problem is small enough to fit in L1. In…",{"value":115,"source":82,"evidence":116},"No GPU support compared with TensorFlow",[117,118],{"id":111,"by":112,"text":113},{"id":119,"by":86,"text":120},"31501716","> TensorFlow code can directly run on GPU. SymForce cannot. I think this is just a matter of tweaking the code generator, and not a hard limitation of Symforce.",[122],{"value":123,"source":82,"evidence":124},"Fairer benchmarks and direct conceptual comparison with TensorFlow and JAX",[125],{"id":107,"by":108,"text":109},[127,138],{"value":128,"source":82,"evidence":129},"How does it compare with CasADi, GTSAM and Ceres",[130,134],{"id":131,"by":132,"text":133},"31497805","themonteray","Super cool! How does this compare with Casadi? I didn't see it mentioned in the related AD frameworks in the paper, but I think that targets a similar niche? Thanks for releasing…",{"id":135,"by":136,"text":137},"31502392","rsp1984","Congratulations, this looks intriguing! I am somewhat familiar with Ceres and GTSAM. Can you explain how it differs from these? What are the key features of SymForce that make it…",{"value":139,"source":82,"evidence":140},"How does it compare with autodiff in C++ such as Ceres Jet",[141],{"id":142,"by":143,"text":144},"31502521","snovv_crash","How was your experience using this compared with autodiff directly in C++, eg. Jet from Ceres, and depending on the compiler to optimize?",[146,150,154,158,162],{"value":147,"source":82,"evidence":148},"CasADi",[149],{"id":131,"by":132,"text":133},{"value":151,"source":82,"evidence":152},"GTSAM",[153],{"id":135,"by":136,"text":137},{"value":155,"source":82,"evidence":156},"Ceres",[157],{"id":135,"by":136,"text":137},{"value":159,"source":82,"evidence":160},"TensorFlow and JAX",[161],{"id":107,"by":108,"text":109},{"value":163,"source":82,"evidence":164},"Matlab and Mathematica",[165],{"id":85,"by":86,"text":87},{"comments":43,"answered":33,"key":167},[168,171,172],{"id":169,"text":170},"31497851","I think Casadi is solid. Primarily, I'd say Casadi is more specialized towards optimal control. To my knowledge it's much easier in SymForce to formulate complex objectives (ex:…",{"id":100,"text":101},{"id":173,"text":174},"31500954","To be clear, we tested a large set of batch sizes from 1 up to ~1e8. The smaller the batch size, the less competitive JAX was. The crossover point for JAX to be faster was…",{"commenters":36,"max_depth":33,"maker_replies":43,"first_comment_mins":176,"lifespan_hours":18},30,[178,180,182,183,185,187,188,190,192,193,195,196,198,200,203,205,209],[85,34,43,179,86,34],"project\u002Fpositive\u002Fidea",[131,39,44,181,132,34],"project\u002Fneutral\u002Fnone",[169,39,34,179,11,39],[107,35,39,184,108,34],"project\u002Fcritical\u002Fperformance",[100,35,34,186,11,39],"project\u002Fpositive\u002Fperformance",[111,35,39,184,112,34],[173,35,34,189,11,39],"project\u002Fneutral\u002Fperformance",[119,35,44,191,86,34],"project\u002Fneutral\u002Fexecution",[135,44,44,181,136,34],[194,44,34,179,11,39],"31503325",[142,33,44,181,143,34],[197,33,34,179,11,39],"31503425",[89,43,43,199,90,34],"project\u002Fpositive\u002Fnone",[201,32,43,199,202,34],"31497396","captaindiego",[93,204,43,199,94,34],7,[206,207,43,199,208,34],"31501295",8,"pizza",[210,211,43,199,212,34],"31494766",9,"rurban",[],[215,220,225,229,233,238],{"id":216,"name":217,"points":218,"category":219},"31504002","VideoMentions",295,"consumer_social",{"id":221,"name":222,"points":223,"category":224},"31481581","Little Procedural Pixel Worlds",227,"games",{"id":226,"name":227,"points":228,"category":20},"31508850","Arctype",200,{"id":230,"name":231,"points":232,"category":20},"31485898","IndigoStack",187,{"id":234,"name":235,"points":236,"category":237},"31494498","Muse",178,"productivity",{"id":239,"name":240,"points":241,"category":242},"31450127","Plantarium",144,"creative",false,"v2",{"id":246,"name":5,"line":6,"ai":243,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":247,"top":18,"kw":248,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":249,"url":9,"mix":250,"praise":81,"objection":104,"sub":21},31494328,0.31,[24,25,26,27,28],"53010103303055555",[32,33,34,35],1794036620705]