<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: craigacp</title><link>https://news.ycombinator.com/user?id=craigacp</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 20 Sep 2026 13:57:26 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=craigacp" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by craigacp in "Why we need SIMD"]]></title><description><![CDATA[
<p>SIMT - Single Instruction, Multiple Threads</p>
]]></description><pubDate>Thu, 09 Oct 2025 01:43:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=45522569</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=45522569</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45522569</guid></item><item><title><![CDATA[New comment by craigacp in "When good pseudorandom numbers go bad"]]></title><description><![CDATA[
<p>The same operations in the same order is a tough constraint in an environment where core count is increasing and clock speeds/IPC are not. It's hard to rewrite some of these algorithms to use a parallel decomposition that's the same as the serial one.<p>I've done a lot of work on reproducibility in machine learning systems, and its really, really hard. Even the JVM got me by changing some functions in `java.lang.Math` between versions & platforms (while keeping to their documented 2ulp error bounds).</p>
]]></description><pubDate>Fri, 23 May 2025 02:36:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=44069355</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=44069355</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44069355</guid></item><item><title><![CDATA[New comment by craigacp in "Show HN: Txeo – A Modern C++ Wrapper for TensorFlow"]]></title><description><![CDATA[
<p>Some of the gradients are present in the TF C API (and thus the C++ API), but it's hit & miss which are in C and which are in Python. There was an attempt years ago to port more gradients to C, but this petered out in the way that most TF related efforts seem to do at Google.<p>We use the C API to generate gradients for TF-Java, and have some success training models with it. Replicating the Python bits in another language is a huge effort though that we haven't completed.</p>
]]></description><pubDate>Sat, 22 Feb 2025 02:14:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=43135415</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=43135415</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43135415</guid></item><item><title><![CDATA[New comment by craigacp in "A Replacement for BERT"]]></title><description><![CDATA[
<p>The encoder's embedding is contextual, it depends on all the tokens. If you pull out the embedding layer from a decoder only model then that is a fixed embedding where each token's representation doesn't depend on the other tokens in the sequence. The bi-directionality is also important for getting a proper representation of the sequence, though you can train decoder only models to emit a single embedding vector once they have processed the whole sequence left to right.<p>Fundamentally it's basically a difference between bidirectional attention in the encoder and a triangular (or "causal") attention mask in the decoder.</p>
]]></description><pubDate>Fri, 20 Dec 2024 02:39:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=42467782</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=42467782</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42467782</guid></item><item><title><![CDATA[New comment by craigacp in "The super effectiveness of Pokémon embeddings using only raw JSON and images"]]></title><description><![CDATA[
<p>There are a bunch of these things in a word2vec space. I had a blog post years ago on my group's blog which trained word2vec on a bunch of wikias so we could find out who is the Han Solo of Doctor Who (which I think somewhat inexplicably was Rory Williams). You need to carefully implement word2vec, and then the similarity search, but there are plenty of vaguely interesting things in there once you do.</p>
]]></description><pubDate>Mon, 01 Jul 2024 01:20:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=40841793</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=40841793</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40841793</guid></item><item><title><![CDATA[New comment by craigacp in "Java 22 Released"]]></title><description><![CDATA[
<p>Java has had the ability to run a single code file directly by running `java <path-to-file.java>` since Java 11 - <a href="https://openjdk.org/jeps/330" rel="nofollow">https://openjdk.org/jeps/330</a>. And it's had a Java REPL since Java 9.</p>
]]></description><pubDate>Wed, 20 Mar 2024 01:09:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=39761997</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=39761997</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39761997</guid></item><item><title><![CDATA[New comment by craigacp in "Latest GPT-4 training data updated to December 2023"]]></title><description><![CDATA[
<p>There's usually a two or three step training procedure, first training to predict the next word on a huge corpus of text (billions or trillions of words), then possibly some instruction tuning (giving the model question & answer pairs and training on the answer) and then finally RLHF (or RLAIF, DPO etc) where the model is trained to match human preferences. It's this last step that is used to increase the helpfulness & harmlessness of the model, training it to not respond to certain topics.</p>
]]></description><pubDate>Tue, 20 Feb 2024 02:23:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=39437351</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=39437351</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39437351</guid></item><item><title><![CDATA[New comment by craigacp in "SD4J – Stable Diffusion pipeline in Java using ONNX Runtime"]]></title><description><![CDATA[
<p>I did. It depends what you want, for an overview of how ONNX Runtime works then Microsoft have a bunch of things on <a href="https://onnxruntime.ai" rel="nofollow">https://onnxruntime.ai</a>, but the Java content is a bit lacking on there as I've not had time to write much. Eventually I'll probably write something similar to the C# SD tutorial they have on there but for the Java API.<p>For writing ONNX models from Java we added an ONNX export system to Tribuo in 2022 which can be used by anything on the JVM to export ONNX models in an easier way than writing a protobuf directly. Tribuo doesn't have full coverage of the ONNX spec, but we're happy to accept PRs to expand it, otherwise it'll fill out as we need it.</p>
]]></description><pubDate>Mon, 01 Jan 2024 17:17:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=38833394</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=38833394</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38833394</guid></item><item><title><![CDATA[New comment by craigacp in "SD4J – Stable Diffusion pipeline in Java using ONNX Runtime"]]></title><description><![CDATA[
<p>Both GPU support and SIMD CPU support are being worked on in OpenJDK projects, there are talks on them from last year's JVM language summit - <a href="https://youtube.com/playlist?list=PLX8CzqL3ArzW90jKUCf4H6xCKpStxsOzp&si=T8-cgm7Njn0y9T41" rel="nofollow">https://youtube.com/playlist?list=PLX8CzqL3ArzW90jKUCf4H6xCK...</a></p>
]]></description><pubDate>Mon, 01 Jan 2024 16:34:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=38833038</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=38833038</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38833038</guid></item><item><title><![CDATA[New comment by craigacp in "SD4J – Stable Diffusion pipeline in Java using ONNX Runtime"]]></title><description><![CDATA[
<p>ONNX Runtime needed a good demo application in Java and this was fun to do (I maintain the Java API for ONNX Runtime and wrote this SD implementation). I've added SDv2 and SDXL support (and the turbo variants thereof) after the initial release, and I'll upgrade it to the latest ONNX Runtime when that comes out to get FP16 support among other things.</p>
]]></description><pubDate>Mon, 01 Jan 2024 16:19:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=38832916</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=38832916</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38832916</guid></item><item><title><![CDATA[New comment by craigacp in "Persimmon-8B"]]></title><description><![CDATA[
<p>There's a correction to that tweet, larger vocab means fewer tokens for any given sequence (usually, assuming it's not to add other languages or character sets).</p>
]]></description><pubDate>Fri, 08 Sep 2023 00:30:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=37427683</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=37427683</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37427683</guid></item><item><title><![CDATA[New comment by craigacp in "ONNX runtime: Cross-platform accelerated machine learning"]]></title><description><![CDATA[
<p>As ONNX models are protobufs you can edit them at a Python or Java REPL (or other language but I've personally used those two). Dumping them out as text seems like a lot more work, and a lot less typesafe.</p>
]]></description><pubDate>Wed, 26 Jul 2023 00:19:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=36871527</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=36871527</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36871527</guid></item><item><title><![CDATA[New comment by craigacp in "Stochastic gradient descent written in SQL"]]></title><description><![CDATA[
<p>We built model & data provenance into our open source ML library, though it's admittedly not the W3C PROV standard. There were a few gaps in it until we built an automated reproducibility system on top of it, but now it's pretty solid for all the algorithms we implement. Unfortunately some of the things we wrap (notably TensorFlow) aren't reproducible enough due to some unfixed bugs. There's an overview of the provenance system in this reprise of the JavaOne talk I gave here <a href="https://www.youtube.com/watch?v=GXOMjq2OS_c">https://www.youtube.com/watch?v=GXOMjq2OS_c</a>. The library is on GitHub - <a href="https://github.com/oracle/tribuo">https://github.com/oracle/tribuo</a>.</p>
]]></description><pubDate>Wed, 08 Mar 2023 02:13:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=35064339</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=35064339</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35064339</guid></item><item><title><![CDATA[New comment by craigacp in "Understanding and coding the self-attention mechanism of large language models"]]></title><description><![CDATA[
<p>A conventional neural network, i.e. one using a stack of dense layers, can't unroll across a sequence in the way the transformer does. So while it could compute the relative importance and interaction of the features it sees it wouldn't be able to compute that across arbitrary length sequences without a mechanism for the sequence elements to interact, which is what self attention provides.</p>
]]></description><pubDate>Sat, 11 Feb 2023 01:32:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=34748592</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=34748592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34748592</guid></item><item><title><![CDATA[New comment by craigacp in "JDK 20 will introduce float16 conversion methods"]]></title><description><![CDATA[
<p>Exactly so, there are a bunch of Java interfaces to native ML libraries that have some messy bit hacking to convert between fp16 and Java floats. This API along with the intrinsification (<a href="https://github.com/openjdk/jdk/pull/10500" rel="nofollow">https://github.com/openjdk/jdk/pull/10500</a>) will mean I can throw away that code and replace it with something that performs correctly and is much faster.</p>
]]></description><pubDate>Thu, 13 Oct 2022 01:17:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=33186010</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=33186010</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33186010</guid></item><item><title><![CDATA[New comment by craigacp in "An Introduction to Probabilistic Programming"]]></title><description><![CDATA[
<p>Probabilistic programming can be done via MCMC approaches, but you can also infer the necessary quantities by using variational inference (which approximates the distribution described by your program with something that's simpler and easier to estimate).<p>Basically probabilistic programming is a way of describing a distribution, and then MCMC is one way of inferring the quantities in that distribution.</p>
]]></description><pubDate>Fri, 22 Oct 2021 22:07:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=28963358</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=28963358</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28963358</guid></item><item><title><![CDATA[New comment by craigacp in "A categorized list of all Java and JVM features since JDK 8 to 16"]]></title><description><![CDATA[
<p>There is extensive discussion of that topic in the valhalla-dev and valhalla-spec-experts mailing lists, but I think the details are still being worked out.</p>
]]></description><pubDate>Thu, 01 Apr 2021 20:15:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=26665476</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=26665476</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26665476</guid></item><item><title><![CDATA[New comment by craigacp in "A categorized list of all Java and JVM features since JDK 8 to 16"]]></title><description><![CDATA[
<p>There are JEPs out for parts of it now - Primitive Objects (which is the new name for value types) <a href="https://openjdk.java.net/jeps/401" rel="nofollow">https://openjdk.java.net/jeps/401</a> and Unify the basic primitives with objects <a href="https://openjdk.java.net/jeps/402" rel="nofollow">https://openjdk.java.net/jeps/402</a></p>
]]></description><pubDate>Thu, 01 Apr 2021 18:02:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=26663980</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=26663980</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26663980</guid></item><item><title><![CDATA[New comment by craigacp in "Exploiting machine learning Pickle files"]]></title><description><![CDATA[
<p>XGBoost also has a binary file format which is neither pickle nor json. It's shared across their Python, Java and R frontends and parsed by the C++ library.</p>
]]></description><pubDate>Fri, 19 Mar 2021 01:29:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=26509391</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=26509391</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26509391</guid></item><item><title><![CDATA[New comment by craigacp in "The NeurIPS 2020 broader impacts experiment"]]></title><description><![CDATA[
<p>The reviews for published NeurIPS papers for at least the past 5 years are available from each paper's page on <a href="http://papers.neurips.cc" rel="nofollow">http://papers.neurips.cc</a>.</p>
]]></description><pubDate>Fri, 25 Dec 2020 04:17:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=25534147</link><dc:creator>craigacp</dc:creator><comments>https://news.ycombinator.com/item?id=25534147</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25534147</guid></item></channel></rss>